nette/forms
Nette Forms is a PHP library for building, rendering, and validating HTML forms with minimal code. It offers CSRF protection, file uploads, flexible controls, and a rich set of validation rules through a clean, secure, and extensible API.
netteForms.js). If our roadmap has multiple form-heavy surfaces (onboarding, admin CRUD, checkout, compliance intake), adopting it can remove the validation/CSRF/error-rendering layer from every one of those tickets rather than re-solving it per squad.nette/forms is a standalone PHP library from the Nette ecosystem, not a Laravel package. It ships no service provider, no config publish, no Blade directives. Choosing it on a Laravel codebase is a build-a-bridge decision, not a composer require decision: CSRF must be reconciled with VerifyCsrfToken, validation messages with Laravel's translator, old()/error bags with Nette's control state, and rendering with Blade instead of Latte. The PM decision is therefore less "adopt library" and more "fund an integration spike and an internal adapter, or standardize on Laravel's native validation + Form Requests."addEmail($maxLength=255), addDate(), addTime(), addDateTime(), addColor(), addFloat(), BackedEnum support via getValue()/getValues(), Blueprint for generating form/class code, upload max-size enforcement tied to upload_max_filesize, and toggle-state synchronization between PHP rules and JS. These are real, shippable features that would otherwise become backlog items.Consider it when:
Look elsewhere when:
@error directives already deliver the bulk of this with zero integration surface. Adopting nette/forms here means maintaining a bespoke bridge forever, for a library with a small talent pool — a poor trade unless the client-side rule parity is specifically the pain point.For executives — the one-paragraph version:
nette/forms is a battle-tested PHP form library that handles the unglamorous, high-risk part of every web product: validating input, blocking CSRF attacks, handling file uploads, and showing users clear errors. It is mature and actively maintained (releases through v3.2.x, current PHP support, modernized JavaScript). The catch is fit: it is built for the Nette ecosystem and is not a Laravel package, so on our stack it requires a custom adapter we would own indefinitely. Recommendation: do not adopt on the critical path. Run a two-week spike if — and only if — duplicate client/server validation logic is a measured drag on delivery. In parallel, send the license (currently flagged NOASSERTION) to legal; that is a precondition, not a formality.
For engineering — what we'd actually be signing up for:
You get a clean fluent builder, declarative rules, and a JS validator generated from the same definitions, which eliminates a whole class of "the frontend said it was valid and the backend disagreed" bugs. You take on: a Blade↔Latte rendering bridge, CSRF reconciliation with Laravel's middleware, error-bag and old() integration, and ownership of a thin adapter layer. No API churn risk in the near term — v3.2.9 is explicitly a maintenance release with type-safety and static-analysis hardening and no API changes — but also no upstream will fix our adapter. We'd need a named internal owner and a documented fallback to native Laravel validation if we ever cut it.
The decision we're asking for:
How can I help you explore Laravel packages today?