Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Jsformvalidator Bundle Laravel Package

shopsys/jsformvalidator-bundle

A Symfony bundle from Shopsys that adds client-side JavaScript form validation by translating server-side constraints into instant browser feedback. It helps build responsive forms with consistent rules, customizable messages, and fewer validation round trips.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit The core finding is unchanged: shopsys/jsformvalidator-bundle is a Symfony bundle, not a Laravel package. It hooks into the Symfony kernel via a DI extension, a Bundle class, and form-type extensions, and it emits client-side validation metadata at Twig render time. None of that contract exists in Laravel. Within a Symfony application the fit remains conditional: the bundle only adds value where the app uses Symfony Forms rendered server-side via Twig. API-first, headless, or JSON-payload architectures get no benefit because the constraint-to-JS emission is coupled to form rendering.

Integration feasibility For Laravel: still not feasible without a bespoke adapter, and the effort would amount to reimplementing the concept rather than integrating the package. A Laravel implementation would more sensibly generate a JSON Schema or a rules object from FormRequest rules and feed a JS validator directly — no dependency on this codebase. v2.0.0 adds nothing on this axis; there is no Laravel bridge, no framework-agnostic core extraction, and no headless/JSON mode.

For Symfony: feasible in hours to days, and now viable across a wider version envelope. Install via Composer, register the bundle, enable per form via the form option/configuration, and confirm the JS asset pipeline (Webpack Encore/Vite) bundles the shipped client assets. Real effort still sits in the constraint coverage audit, not the install.

Technical risk

  • Fork risk (high — unchanged). [FORK] in the description, still effectively zero external dependents. This remains an internal vendor fork of karser/JsFormValidatorBundle maintained to serve Shopsys Platform. A 2.0.0 release is a mildly positive maintenance signal — someone is actively working the repo — but it does not create an external ecosystem, an independent roadmap, or third-party dependents to absorb breakage. If Shopsys drops it, you own it.
  • Validation drift (high — unchanged). Constraints are authored in PHP and re-projected into JS. Any constraint without a JS equivalent — UniqueEntity, Callback, Expression, custom validators, entity-backed checks — silently degrades to client-side silence. The server must remain the sole source of truth; treat client validation strictly as UX latency reduction, never as a control. v2.0.0 does not change the constraint-mapping model.
  • Legacy front-end coupling (medium — unchanged). The JsFormValidator lineage assumes a jQuery-era asset stack. Modern Stimulus/Turbo/UX-based front-ends will likely need shimming, and the bundle still predates Symfony UX Form conventions. Notably, the release notes mention framework support only — no front-end modernisation, so this risk is untouched.
  • Version envelope (medium → low, improved). Previously the assessment flagged Symfony 6→7 as a potential fork-of-a-fork event. v2.0.0 explicitly adds Symfony 6 and 7 support, which materially de-risks the near-term upgrade path. Residual risk: the release is a major version bump (1.7.0 → 2.0.0) but the changelog is a single line with no BC-break list, no deprecation notices, and no stated drop of Symfony 4/5 or older PHP. Verify the composer.json constraints directly before assuming a smooth composer update.
  • New: silent major-version semantics (medium). A one-line changelog on a semver-major release is a documentation risk in itself. If 2.0.0 dropped Symfony 4/5 or bumped the minimum PHP, consumers on older stacks will hit a resolution failure with no advance warning in the notes.

Key questions

  1. Is the target stack genuinely Laravel, or Symfony? If Laravel, this package is out of scope and the assessment should pivot to an equivalent rules-emitter approach — v2.0.0 does not change this answer.
  2. Which Symfony version and which form-rendering strategy (Twig forms vs. API) are in use? If already on Symfony 6/7, v2.0.0 is a straightforward upgrade; if on 5.4, confirm whether 2.0.0 still supports it or whether you must stay pinned to 1.7.x.
  3. What exactly broke between 1.7.0 and 2.0.0? Read the diff, not the changelog — check composer.json, the DI extension, form-type extension signatures, and any Twig template/theme changes.
  4. What percentage of the constraint set is client-expressible? Get the actual inventory before committing.
  5. Is there a maintained alternative (Symfony UX, HTML5 constraint attributes, symfony/validator metadata serialized yourself) that removes the fork dependency? Symfony 7 compatibility makes this question less urgent but does not retire it.

Integration Approach

Stack fit Assume Symfony 6.x/7.x with Twig-rendered forms and an Encore/Vite pipeline — that is the only configuration where this scores positively, and v2.0.0 widens that window to include Symfony 7. For Laravel, the recommendation is unchanged: no-go on this package and a greenfield mini-implementation: map FormRequest rules to a JSON schema, ship to the browser, validate with a modern library (Zod, Yup, or Valibot), keep Validator as the authority.

Migration path For Symfony on 6/7: Composer require ^2.0 → confirm bundles.php registration → verify config → enable on one representative form type → confirm emitted JS payload in rendered output → run the constraint coverage matrix → expand form-by-form. For Symfony on 5.4 (or 4.x): do not assume 2.0.0 is installable. Check the version constraints first; if dropped, stay on 1.7.x, vendor-patch, and treat the Symfony upgrade and the bundle upgrade as a single sequenced project. For Laravel: the analogous path is unchanged — pick one high-traffic form, hand-write the JS rules, measure the UX delta and the drift cost, then decide whether generating rules is worth automating at all.

Compatibility Verify four axes explicitly before adoption: (a) Symfony major version constraints in the bundle's composer.json — now the critical check given the 2.0.0 bump; (b) minimum PHP version, which may have moved with the Symfony 7 support; (c) front-end dependency expectations (jQuery and any plugin versions) against your asset build — presumably unchanged in this release, so legacy coupling persists; (d) Twig form-theme overrides — the bundle typically injects data-* attributes or a script block, and custom themes can swallow them. Also confirm the client-side message catalogue handles your locales; translated constraint messages are a common gap in forks and there is no indication v2.0.0 touched i18n.

Sequencing

  1. Constraint coverage audit (blocking — do this first).
  2. Read the 1.7.0 → 2.0.0 diff and document actual BC breaks (the changelog will not tell you).
  3. Single-form proof of concept in a non-critical flow, on the target Symfony version.
  4. Asset pipeline and i18n verification.
  5. Rollout to high-value forms only (registration, checkout, address entry) where round-trip latency actually costs conversion.
  6. Establish a fork-maintenance policy (patch branch, pinned SHA, upgrade owner) before general rollout, not after.

Operational Impact

Maintenance You are still adopting a fork with no external dependents. The 2.0.0 release is a positive signal — active Symfony-version upkeep means the rebase burden is currently being carried upstream of you — but budget for: periodic rebases against upstream karser/JsFormValidatorBundle, future Symfony major-version compatibility patches (8 is now the next horizon, and the same event will recur), and JS asset upkeep. Pin to the exact 2.0.0 tag (or a SHA) rather than floating, and vendor-patch rather than relying on dev-master. The unbounded patch when the fork goes quiet remains the tail risk; v2.0.0 reduces its probability, not its impact.

Support No commercial support, no vendor SLA, unchanged. Support channels are GitHub issues on a near-zero-traffic repo and, indirectly, Shopsys community channels where you are not the priority audience. Internal ownership must be named explicitly — an unowned fork is the most common failure mode for adoptions like this, and a fresh major release is exactly the moment when informal "someone on the platform team" ownership quietly lapses.

Scaling Runtime cost remains negligible: the bundle runs at form-render time, not per request in a hot path, and adds a small config payload. The scaling concern is payload and duplication, not throughput — each instrumented form ships its own rules block, and the constraint logic now exists in two languages across every form you touch. Complexity scales linearly with form count; keep the instrumented set deliberately small. Nothing in v2.0.0 changes this profile.

Failure modes

  • Silent validation gap: a constraint without a JS mapping produces no client error; users discover the failure only on submit. Mitigate with a CI check that asserts every constraint on an instrumented form has a JS mapping.
  • Divergence after a PHP-side change: a developer adds a constraint and forgets the JS side. Mitigate with the same CI check plus a code-review checklist.
  • Upgrade regression from the 2.0.0 bump: dropped Symfony/PHP support or changed extension signatures surface as a Composer resolution failure or a hard error at form render — loud, and therefore the more benign failure mode.
  • Asset regression after Symfony/Twig upgrade: the injected attributes stop rendering; there is no error, just lost client validation. This becomes more likely, not less, as you move onto Symfony 7 and drift further from the bundle's tested front-end assumptions.
  • JS disabled or blocked: benign only if server-side validation is intact — confirm this is non-negotiable and never removed.
  • Fork abandonment: upstream and Shopsys both go quiet; you inherit full ownership mid-upgrade-cycle. Note that 2.0.0 clears the immediate Symfony 7 obstacle, so the next exposure window is Symfony 8.

Ramp-up Low for Symfony developers — a day to first working form, and the Symfony 6/7 support removes the "does this even install?" friction that previously front-loaded the effort. Moderate for the front-end/asset side, where the jQuery-era assumptions and Twig theme interactions remain the actual friction and were not addressed by this release. For a Laravel team, ramp-up is still effectively the cost of writing the replacement, not learning this package — v2.0.0 reinforces the no-go recommendation for that stack.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment