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

Formmaker Laravel Package

grafite/formmaker

Grafite FormMaker is a Laravel package for rapidly building model-driven forms with reusable field types, validation, and relationship-aware inputs. It simplifies form generation and editing for admin panels and CRUD workflows, reducing repetitive Blade markup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged. FormMaker implements a form-as-a-class pattern: each form is a PHP class extending the package's base form, declaring a fields() array (type, name, options, attributes) and optionally a buildForm() override; the class renders itself to HTML via formHtml() / string casting in Blade. Architecturally this is a domain-object layer over presentation, which is a genuine improvement over ad-hoc Blade partials when the same form must appear in multiple controllers, be unit-tested for field composition, or be generated programmatically. It is not a UI framework — there is no reactivity, no client-side state, no component model. Fit remains strongest in server-rendered Laravel monoliths with conventional controller → view flows, and weak in Inertia/Vue/Svelte SPAs, Livewire-heavy codebases, or API-first services where form structure is a front-end concern. The v6.0.0 headline — Bootstrap 5 compatibility — is a presentation-layer change and does not alter this positioning in either direction.

Integration feasibility. Mechanically still simple (Composer install, service-provider auto-discovery, publish config and field partials to override markup), but the feasibility picture is now less certain, not more. The prior assessment assumed a frozen 2022-era package; v6.0.0 is a major version bump delivered with a single-line release note ("Bootstrap 5 compatibility and more"). A major bump is by definition a breaking-change signal, and we have no changelog, no diff review, and no stated compatibility matrix. Two specific unknowns now sit on the critical path:

  • Laravel/PHP support. Bootstrap 5 compatibility speaks to CSS classes in the rendered markup, not to framework constraints. Nothing in the note indicates the Composer illuminate/* constraint has moved past Laravel 8/9. The PHP 8.1+ deprecation surface (dynamic properties, implicit nullable parameters, ${var} interpolation in field partials) may be untouched. The "does it install and render cleanly on our current Laravel/PHP" spike remains mandatory.
  • Release integrity. With no published changelog, the only way to know what broke is to diff the tag. That is a required step, not a nice-to-have.

Technical risk.

  • License (still blocking). NOASSERTION was the prior state and the release note makes no reference to licensing. Absent written confirmation, this remains a legal stop-sign for commercial or enterprise use. A new release does not clear it — and a maintainer actively shipping versions is the right moment to ask, but also a reminder that the terms could change under us.
  • Abandonment — downgraded, not cleared. A release after ~3 years is real evidence the project is not dead, and it materially weakens the "effectively unmaintained" characterization. It is not evidence of a maintenance cadence. One release is a data point, not a pattern; 37 stars, 0 dependents, and a single-maintainer Grafite ecosystem are unchanged. Treat this as "revived, unproven."
  • Override coupling (now elevated). Bootstrap 5 compatibility almost certainly means the shipped field partials had their markup and CSS classes rewritten. Any team that published and edited those partials — the documented customization path — inherits an immediate, guaranteed drift on upgrade, with the classic silent breakage of CSS selectors and JS hooks. This risk is higher today than it was in the prior assessment.
  • Validation drift. Unchanged. Validation rules declared alongside fields remain convention-bound to the controller/FormRequest; two sources of truth is a recurring defect source.
  • Output safety. Unchanged. Form HTML is emitted unescaped by design ({!! !!}); correct escaping depends on field-level discipline. A markup rewrite is exactly when escaping regressions slip in, so v6 output deserves a fresh review rather than inheriting the prior sign-off.

Key questions. (revised; 1–3 are new and blocking)

  1. What is in v6.0.0? We need a changelog or a tag diff — specifically the breaking changes implied by the major bump, and whether field partial paths, class names, or the fields() array schema changed.
  2. Did the Laravel/PHP constraint move? Which versions install cleanly today, verified by a branch spike rather than the README.
  3. Did the license change, and will legal sign off in writing?
  4. Is there a stated release cadence now, or is this a one-off? What would a second consecutive release in the next 6–12 months look like?
  5. What is our exit cost — how much form code becomes package-shaped if we adopt broadly?
  6. Does v6 generated markup meet our accessibility baseline (labels, aria-*, error association) and CSP posture (inline JS/handlers)?
  7. How are file uploads, old-input repopulation, and nested/array fields handled — and did any of that change in v6?
  8. Who owns the fork internally if we need one, and what is the trigger for forking versus dropping?

Verdict. Still a conditional no, but the balance has shifted slightly in the package's favor and the gates have changed. Renewed upstream activity is genuinely good news and reduces (does not eliminate) abandonment risk. It does not touch the license question, and it introduces new upgrade risk for anyone with published partial overrides. Viable as a tactical, time-boxed tool behind an internal abstraction; still not viable as a strategic dependency. The core observation stands: the value it delivers — DRY, testable form definitions — is largely reproducible with native Blade components plus a thin form-object layer, at zero abandonment and zero license risk. The prior 0.905 composite score reflected a well-formed solution to a real problem; that remains true, and the 37 stars, zero dependents, and unasserted license remain why it should not become load-bearing.

Integration Approach

Stack fit. Unchanged. Adopt only if the target application is a Blade-rendered Laravel monolith on a version the package actually supports. If the roadmap includes Livewire, Inertia, or a headless API with a separate front end, this package is a dead end and the evaluation should stop here. Note that Bootstrap 5 compatibility is only relevant if we are on Bootstrap 5 — if our design system is Tailwind, custom, or Bootstrap 4, the headline feature is worth nothing to us and the partials must be overridden anyway.

Migration path. Do not migrate existing forms. Run a single greenfield or low-traffic internal CRUD form (text, select, checkbox, file, and one custom field) through the package in parallel with an equivalent hand-written Blade component version. Compare on: lines of code, test coverage achievable, accessibility output, and override friction. Decide on that evidence. If positive, expand only within a bounded domain (e.g., internal admin tooling) — never into customer-facing flows where markup churn has revenue impact. New for v6: do not begin this prototype until the release diff has been read; prototyping against an unread major release wastes the spike.

Compatibility. Pin the exact version in composer.json — now specifically pin 6.0.x rather than allowing a float that could land on an unvetted patch. Verify PHP and Laravel constraints before install rather than after a failed CI run. Check for published config/view collisions with existing overrides in the host app; if we have any pre-existing FormMaker partial overrides from a prior evaluation or pilot, assume they are broken by v6 and budget for rewriting them. Run the spike on a throwaway branch with a full test pass, including snapshot/markup assertions.

Sequencing.

  1. License clearance — hard gate, still first, still before any code.
  2. Release diff review (new). Read the v6.0.0 tag against the prior release: identify breaking changes, partial-path changes, constraint changes, and the scope of "and more."
  3. Compatibility spike — Composer install on current Laravel/PHP; document any patches needed.
  4. Single-form prototype — render, validate, repopulate old input, handle a file upload, render validation errors.
  5. Accessibility and CSP review of generated markup, re-run against v6 output rather than carried forward.
  6. Internal abstraction — an App\Forms\BaseForm extending the vendor class so the package is exactly one class deep in our codebase. Every form extends ours, never the vendor's. This remains the single highest-leverage decision in the whole integration: it converts a fork-or-rip-out decision from a quarter of work into a week, and it is what makes absorbing a surprise major version tractable.
  7. Bounded rollout with a documented list of adopting forms and a named owner.
  8. Quarterly re-evaluation — does the package still install on our current Laravel, and has upstream shipped again? Two consecutive releases on a plausible cadence is the bar for calling this maintained. If not met, execute the exit.

Rejected alternatives to state explicitly. Rolling the abstraction ourselves is roughly 200–400 lines (field registry, renderer, model binding, error surfacing). Given the license and the still-unproven maintenance profile, that comparison should be made openly rather than assumed away by convenience — and the v6 release, while welcome, does not change the arithmetic much.

Operational Impact

Maintenance. Still treat this as fork-maintained software from day one, but the fork is now more likely to be a merge than a rewrite, which is the better position. Budget approximately 1–3 engineer-days per Laravel major release to validate and patch, plus a one-off cost now for anyone holding v5-era partial overrides, since v6 moved the shipped markup. The surface remains small (a base form class plus a set of field partials), which is what makes a fork tractable — that is the package's main operational virtue and v6 did not change it.

Support. Still no vendor, no SLA, community-only GitHub issues on a low-activity repo — though a maintainer who shipped a major version this week is more likely to respond than one who hadn't shipped in three years. Internal documentation remains mandatory: field type inventory, override locations, and the upgrade runbook must live in our repo, not in a README we don't control. Add a note recording exactly which upstream version our overrides were cut against, so the next major upgrade has a diffing baseline.

Scaling. Runtime cost is negligible — rendering is Blade-compiled string output with no query or memory overhead beyond the form itself. The scaling risk is organizational, not technical: how many teams adopt it versus how many engineers can maintain or replace it. Cap adoption until the internal abstraction and runbook are in place. A major-version event is a useful forcing function — if adoption has spread faster than maintainability, this is the moment to slow it down.

Failure modes.

  • Silent markup change on upgrade breaking CSS selectors and JS hooks — now the highest-probability failure mode, given v6 rewrote the partials. Mitigate with markup snapshot tests on the internal base class and by logging the upstream version our overrides target.
  • XSS via unescaped rendering of user-influenced field values or custom partials — mitigate with a security review of every custom field type, refreshed for v6 output.
  • Validation drift between form class and controller rules — mitigate by generating rules from a single source and asserting parity in tests.
  • Install breakage on a Laravel upgrade — mitigate with the pinned version, a CI job that installs on the target framework version, and a pre-agreed fork trigger.
  • License reassertion or re-licensing — an active maintainer can change terms; the written confirmation should be archived with a note to re-verify at each major bump.
  • False dawn — v6.0.0 is a single release after a three-year gap; planning that assumes a return to regular maintenance is the risk to avoid. Mitigate by treating "maintained" as unproven until a second release lands.

Ramp-up. Low for an experienced Laravel developer: the API is a fields array plus a small set of overrides, roughly half a day to productivity. The hidden cost is discoverability — there is little public material beyond the repo, and the v6 changes are undocumented in the release note, so onboarding depends entirely on internal docs and the base class. New hires will not have seen this package before; plan for it in the abstraction's inline documentation.

Recommendation. Conditional no, unchanged in direction and slightly softened in tone. Gate on (1) written license confirmation, (2) a tag diff review plus a verified install on our current Laravel/PHP, and (3) commitment to the internal base class. If any gate fails, build the thin form-object layer natively — the delta in effort is small and both the abandonment and license risks drop to zero. The v6.0.0 release is a positive signal that deserves follow-up with the maintainer, not a change in verdict.

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.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator