Skip to content

Latest commit

 

History

History
170 lines (132 loc) · 4.59 KB

File metadata and controls

170 lines (132 loc) · 4.59 KB
layout home
hero
name text tagline image actions
QuickForms
JSON Schema Form Generator
Vue 3 forms with sensible defaults and reasonable escape hatches
src alt
/assets/banner.readme.1280x320.png
QuickForms
theme text link
brand
Get Started
/guide/getting-started
theme text link
alt
View on GitHub
features
icon title details
Fast & Lightweight
Framework-agnostic core with Vue 3 Composition API bindings. ~56KB gzipped.
icon title details
🎨
Themeable
60+ CSS variables for complete styling control. No design system lock-in.
icon title details
🔧
Reasonable Escape Hatches
Override placeholders, add custom validators, map enum labels—without rebuilding components.
icon title details
📝
JSON Schema Powered
Full JSON Schema Draft 7+ support including oneOf, anyOf, nested objects, and arrays.
icon title details
Flexible Validation
Three validation modes, custom sync/async validators, and cross-field validation.
icon title details
🔐
Role-Based Access
Built-in RBAC with field-level visibility and editability control.
icon title details
🌍
i18n Ready
Customize all labels and messages globally or per-form for internationalization.
icon title details
🧩
Extensible
Custom component registry with tester system for complete control over field rendering.

See It In Action

QuickForms with Quasar
QuickForms with Plain Vue

Quick Example

Quasar

If you're using Quasar, you get beautiful pre-styled components out of the box:

<script setup lang="ts">
import { ref } from 'vue'
import { DynamicForm } from '@quickflo/quickforms-vue'
import { createQuasarRegistry } from '@quickflo/quickforms-quasar'
import type { JSONSchema } from '@quickflo/quickforms'

const registry = createQuasarRegistry()

const schema: JSONSchema = {
  type: 'object',
  properties: {
    name: { 
      type: 'string', 
      title: 'Full Name',
      minLength: 2 
    },
    email: { 
      type: 'string', 
      format: 'email', 
      title: 'Email' 
    },
    age: {
      type: 'number',
      title: 'Age',
      minimum: 18
    }
  },
  required: ['name', 'email']
}

const formData = ref({})

// formData updates automatically as user types!
// Use it however you want: display, send to API, etc.
</script>

<template>
  <DynamicForm 
    :schema="schema" 
    v-model="formData"
    :options="{ registry }"
  />
</template>

See Quasar Package Docs for all Quasar-specific options.

Plain Vue

Use the plain Vue package with your own styling:

<script setup lang="ts">
import { ref } from 'vue'
import { DynamicForm } from '@quickflo/quickforms-vue'
import type { JSONSchema } from '@quickflo/quickforms'

const schema: JSONSchema = { /* same schema as above */ }
const formData = ref({})
</script>

<template>
  <DynamicForm 
    :schema="schema" 
    v-model="formData"
  />
</template>

See Vue Package Docs for plain Vue options.

Installation

::: code-group

pnpm add @quickflo/quickforms @quickflo/quickforms-vue @quickflo/quickforms-quasar
npm install @quickflo/quickforms @quickflo/quickforms-vue @quickflo/quickforms-quasar
yarn add @quickflo/quickforms @quickflo/quickforms-vue @quickflo/quickforms-quasar

:::

Why QuickForms?

JSON Schema form libraries are powerful but often rigid. QuickForms provides escape hatches at common pain points:

  • ✅ Don't like the default placeholder? Override it globally or per-field
  • ✅ Need custom validation? Add sync/async validators alongside JSON Schema rules
  • ✅ Enum values too technical? Map them to friendly labels with x-enum-labels
  • ✅ Want dynamic hints? Use hintRenderer for full control

Sensible defaults, clear customization paths. No rebuilding components.