| Stop duplicating | Why |
|---|---|
| Zod / Yup / Joi / JSON Schema of the same fields | The document is the schema and the rules |
| A second server DTO validator for those fields | The server evaluates the document |
| Show/hide in the component and again in the API | when is applicability on both sides |
| A custom hook per calculated field | value = builds the dependency graph |
| A hand-written error-code dictionary | The catalogue is fixed and shared |
| A separate JSON file of labels | text + t("key") |
Fewer moving parts
One document replaces the schema, the visibility layer, the calculated-field hooks and the label file.
Your stack stays
React, Vue, your design system, HTTP, auth and the database are all still yours. FormScript replaces the rule layer only.
One opinionated format
Render intents mean the document drives the screen, so the screen stops inventing its own validation rules.
form loan version = "1.0" {
field annual_income { type = number, validate { min = 0 } }
field monthly {
type = number
value = annual_income / 12
}
group guarantor {
field guarantor_name {
type = string
when = annual_income > 10000
required = true
}
}
output {
annual_income: number
monthly: number
guarantor.guarantor_name: string
}
}
It does not replace React or Vue, your design system, HTTP, auth, the database, a payment SDK, or a PDF engine. @formscript/render emits intents; @formscript/render-dom maps them to HTML.
Do not say. “Delete your UI library.” Say: stop maintaining a second schema, a second visibility layer, and a second error dictionary for the same form.