erag/inertia-forms
erag/inertia-forms simplifies form handling in Laravel Inertia apps, pairing server-side validation with a lightweight frontend API for submitting, resetting, and displaying errors—cutting boilerplate and keeping forms consistent.
Feature delivery: form-heavy surface area. Most of the product's "boring but expensive" work lives in forms — profile/settings, onboarding, checkout, application intake, admin CRUD, notification preferences. This package collapses the usual two-artifact pattern (PHP validation + hand-built frontend form) into one PHP class that both validates and renders. For a PM, that means form work becomes a single backlog item with one owner instead of a frontend/backend pair with a handoff and a spec.
Roadmap: multi-step and conditional flows. The wizard mode, per-field visibleWhen() / clearWhenHidden(), and fieldset/column layout primitives make it cheap to ship the flows that usually get deferred for cost: guided onboarding, eligibility/qualification questionnaires, tiered checkout, KYC-style intake. These are roadmap items that often slip because "it's just a form" turns into a bespoke state machine on the client. Here the branching logic is declarative and server-owned.
Roadmap: dynamic, ops-configurable forms. Repeater, Blocks, KeyValue, TagsInput, and server-searchable Combobox are the building blocks for content and data that changes shape — page/section builders, pricing tiers, FAQ lists, line items, address books. This is the difference between "every new content shape needs an engineering ticket" and "an operator can assemble it." It supports decisions like should we build an in-house form builder? — often the answer becomes "no, extend this."
Build vs. buy: replacing a bespoke form abstraction. Many teams eventually write their own field-definition + validation + rendering layer. That layer is typically weeks of engineering plus ongoing maintenance, and it is never the thing customers pay for. This package is a credible buy for that layer, subject to the adoption risk below. Decision framing: buy the plumbing, keep the product-specific validation rules — the rules() escape hatch and #[Validate] controller binding mean the package is the scaffolding, not the business logic.
Standardization decision. Adopting it sets a house style for forms: consistent labels, help text, error placement, submit/intent handling, iconography (200+ names), accessibility defaults. That is a UX consistency win that is very hard to get from a bespoke layer built form-by-form, and it reduces design-review cycles.
Agent-assisted delivery. The bundled skill file and llms.txt index mean coding agents can be pointed at a worked workflow (make:form → fields() → Inertia::render → <Form :form="form" />). For teams already using agents, this measurably lowers the cost per form and improves the odds the generated code matches house conventions instead of inventing a new one.
Explicitly not supported: pricing/packaging decisions, growth instrumentation, or anything requiring form analytics, A/B testing on field order, or conversion attribution. There is no evidence in the docs of built-in submission analytics — assume you instrument that yourself.
Adopt when most of these are true:
Look elsewhere when:
erag/inertia-forms-vue / -react / -svelte) becomes a coordination cost you do not control.component() + <Form :components="..." />, but that is an escape hatch, not a design system.Risk posture to state plainly: low maturity signals (stars, dependents, single maintainer) mean this is a pilot-grade dependency, not a platform-grade one. The correct move is a bounded pilot with a sealed wrapper, not a mandate.
To executives — the one-liner: "We can stop hand-building forms. One PHP class per form defines the fields, the validation, and the layout; the frontend renders it with a single component. Forms are the most repetitive, least differentiating work in the product, and this removes most of it."
The business case in three points:
To engineering — the honest framing: it is early-stage. 24 stars, no dependents, effectively one maintainer. The API is clean and the field set is genuinely broad (22+ types, repeaters, blocks, file upload, OTP, chat-style composer), but we should treat it as code we are adopting, not a service we are buying. Proposal: a one-sprint pilot on two or three non-critical forms, behind a thin internal wrapper so a future swap is a bounded change rather than a rewrite. If the pilot holds, expand to settings and admin; keep it off the highest-stakes checkout path until it has a track record with us.
The ask: one sprint, one engineer, two forms, and a decision at the end — expand, hold, or fork. Not a platform commitment today.
What success looks like: forms shipped in a day instead of a sprint; no validation drift between client and server; a second engineer able to add a form without reading the frontend code; and a documented exit path if the package stalls.
How can I help you explore Laravel packages today?