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

Ux Vvvebjs Laravel Package

makraz/ux-vvvebjs

A Laravel package that integrates the VvvebJs drag-and-drop page builder, letting you create and edit HTML pages visually. It provides UX components and assets for quick setup and customization in Laravel applications.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Verdict up front: v0.1.0 is a Symfony UX Bundle, not a Laravel package. It integrates with Symfony Forms, Symfony UX/Stimulus, EasyAdmin, and AssetMapper/Webpack Encore. None of those are Laravel primitives. Treat this as a foreign-stack dependency rather than a drop-in, and scope the evaluation accordingly.

Architecture fit

  • The package's value proposition is VvvebJsType — a Symfony Form Type that renders a visual builder and persists HTML into a hidden field. Laravel has no Symfony Form component, so the primary integration surface does not exist in our stack.
  • The Stimulus controller (symfony/stimulus-bundle >= 2.9.1) is a hard requirement. Stimulus can be used standalone in Laravel, but the bundle's controllers are registered via Symfony's UX bundle conventions; wiring them through Vite requires manual adapter work.
  • EasyAdmin integration and VvvebJsAdminField are irrelevant to us (Filament/Nova are our admin equivalents).
  • The storage abstraction (UploadHandlerInterface, local / Flysystem / custom) is conceptually compatible with Laravel's Flysystem-backed filesystem, but the interface is Symfony-typed and would need a shim.

Integration feasibility

  • Low-to-moderate if we accept writing and owning a bridge layer: Stimulus registration, form-type-equivalent Blade component, upload controller replacement, asset pipeline translation from CDN/AssetMapper to Vite.
  • High if we expect the bundle to "just work" — the zero-JavaScript framing in the release notes is misleading; the editor is an iframe-based JS application with lifecycle management, postMessage sync, and dynamically loaded plugin scripts. The "zero JS" claim refers only to us not writing JS, not to JS being absent at runtime.
  • The upload controller (POST /vvvebjs/upload) is Symfony-routed. We would not expose it as-is; we would reimplement it behind our own authenticated, CSRF-protected Laravel route.

Technical risk

  • Pre-1.0 with explicit no-BC notice. Between releases, form type options, plugin keys, and asset wiring can change. Any production adoption implies pinning and a maintenance budget for upgrade churn.
  • Default CDN dependency on jsDelivr. Supply-chain exposure, CSP implications (iframe, script-src, possibly connect-src), GDPR/data-residency questions for EU traffic, and outage blast radius. Self-hosting via cdn_url is supported and should be treated as mandatory, not optional.
  • Stored HTML is the persistence model. Rendered later, this is a stored-XSS surface. Server-side sanitization (HTML Purifier or equivalent) is non-negotiable and not provided by the package.
  • Upload endpoint hardening. 10 MB default cap and a MIME allowlist (images/video/PDF) are sane defaults, but "images" plausibly includes SVG — a classic XSS and SSRF-adjacent vector. Needs magic-byte validation, re-encoding, per-user quota, and authz on the handler.
  • Single-maintainer, experimental package. Bus factor of one, small adoption base, limited battle-testing. This is the dominant risk, ahead of any technical concern.
  • AI_ASSISTANT plugin implies outbound calls to a third-party service with page content. Data-egress implications are undocumented.

Key questions to resolve before any commitment

  1. Is there a Laravel-native requirement at all, or is there a Symfony service in our estate where this fits natively? (The latter changes the calculus entirely.)
  2. Who owns the bridge layer — the Stimulus registration, the Blade form component, the upload route, the sanitizer — and what is that estimate?
  3. Can we self-host all VvvebJs assets and eliminate jsDelivr from the runtime path? What is the version-pinning and upgrade cadence?
  4. What is the sanitization strategy for stored HTML, and who signs off on it?
  5. Where does the AI_ASSISTANT plugin send data, and can it be disabled cleanly?
  6. Is the maintainer responsive (issue latency, release cadence)? What is the exit plan if the package is abandoned?
  7. Does our CSP currently permit iframe-embedded editors, and what is the cost of relaxing it?

Integration Approach

Stack fit

  • Poor fit for a Laravel-first stack. The package assumes Symfony Forms, Symfony UX/Stimulus bundle conventions, Twig-adjacent asset handling, and Symfony routing for the upload controller.
  • Partial overlap exists: PHP 8.1+ (fine), Composer (fine), Flysystem (fine, via Laravel's filesystem), Stimulus (usable standalone), Bootstrap 5 component group (likely aligned with our front-end).
  • Explicit non-overlap: AssetMapper and Webpack Encore are named as supported; Vite is not mentioned. Asset pipeline translation is guaranteed work.

Migration path This is a greenfield adoption, not a migration. Recommended path:

  1. Timeboxed spike (1–2 weeks, one engineer). Stand up the bundle in a throwaway Symfony 7 app to confirm the editor UX and feature set actually match our authoring needs. Do not attempt Laravel integration in the spike — evaluate the product, not the port.
  2. Decision gate. Compare against Laravel-native or framework-agnostic alternatives (GrapesJS, Craft.js, Unlayer, self-hosted VvvebJs without the bundle). For a Laravel estate, adopting raw VvvebJs or an alternative is likely cheaper than porting a Symfony bundle.
  3. If the Symfony route is viable (i.e., we have or will have a Symfony service), adopt natively, self-host assets, add sanitization, and pin hard.
  4. If Laravel is mandatory, budget for a maintained internal adapter package owning: Stimulus registration, Blade component API mirroring VvvebJsType options, upload route, sanitizer, and asset build.

Compatibility

  • Pin the exact version; do not float ^0.1. Add a lockfile review step to the release checklist.
  • Pin CDN asset version independently of the Composer version — self-hosted assets should be a committed, reviewed artifact.
  • Verify PHP 8.1 vs. our runtime floor; verify Symfony version only if a Symfony host exists.
  • Confirm symfony/stimulus-bundle >= 2.9.1 does not pull a conflicting Symfony component set into a Laravel app.

Sequencing

  1. Spike + alternatives comparison → go/no-go.
  2. Security review of stored-HTML and upload paths (blocking gate).
  3. Asset self-hosting and CSP amendment.
  4. Adapter layer (if Laravel) or native integration (if Symfony).
  5. Internal documentation + authoring training.
  6. Production pilot with one content type, feature-flagged.

Operational Impact

Maintenance

  • Highest ongoing cost is the adapter layer, which is entirely ours to own and has no upstream. Budget roughly 10–20% of one engineer during the pilot, tapering to steady-state patching.
  • Pre-1.0 upgrade churn: assume at least one breaking change per minor release until 1.0. Each upgrade requires re-validating form options, plugin registration, and asset wiring.
  • Self-hosted VvvebJs assets create a fork-like relationship with upstream; tracking upstream security fixes becomes a manual responsibility.

Support

  • No commercial support, no SLA. Community issues only, single maintainer. Escalation path is "we fix it ourselves."
  • Internal support burden falls on the adopting team. Content authors will file bugs against the editor (drag-drop quirks, iframe focus issues) that route back to us, not upstream.
  • Documented workaround: none yet — the package is too new for a knowledge base to exist.

Scaling

  • Each editor instance is a full iframe application with its own JS heap. "Multiple editor instances on a single page" is supported but scales poorly — expect memory and responsiveness degradation past a handful of instances. Design authoring UIs around one editor per page.
  • Upload storage scales with our chosen backend (S3/GCS via Flysystem is the right call); the default public/ local path does not scale horizontally and should be avoided on multi-node deployments.
  • CDN-served assets offload bandwidth but introduce a third-party latency dependency on every editor load.

Failure modes

Mode Impact Mitigation
jsDelivr outage / blocked by CSP or corporate proxy Editor fails to load; authoring fully blocked Self-host assets; mandatory, not optional
Stored XSS via authored HTML Account/session compromise, defacement Server-side sanitization on write and render
Malicious upload (SVG, polyglot, oversized) XSS, storage exhaustion, potential RCE via misconfig Magic-byte validation, re-encode images, per-user quota, block SVG or serve from isolated origin
Iframe HTML sync failure on unload Silent content loss on navigation Server-side draft autosave; do not rely on beforeunload sync
Breaking change in a 0.x upgrade Editor breaks in production Exact version pinning; staging validation; changelog review gate
Maintainer abandonment No upstream fixes; frozen dependency Self-hosted assets + small, well-bounded adapter = survivable exit
AI_ASSISTANT data egress Content leaves our boundary unexpectedly Disable the plugin; verify no default activation

Ramp-up

  • If the team is Laravel-centric: high. Symfony Forms, UX bundle conventions, and Stimulus registration are all new concepts. Estimate 2–3 weeks before an engineer is productive in the bundle's internals.
  • If a Symfony-fluent engineer is available: moderate. The form type and admin field are one-liners; the learning curve is the VvvebJs configuration surface (6 plugins × 6 component groups × editor options).
  • Content-author training is light — the drag-drop UI is the point — but authors must understand that the builder produces raw HTML and that styling depends on which component group (e.g., Bootstrap 5) is enabled.
  • Recommend: one engineer owns the integration end-to-end; one backup engineer shadows. Do not distribute ownership of a pre-1.0 foreign-stack dependency across a team.
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.
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast