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

Html Widget Laravel Package

friendsofvictoire/html-widget

A small Symfony bundle that adds an HTML widget to the Victoire CMS, letting editors drop raw HTML, embeds, and custom markup into any widget slot without touching templates.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

The first finding is a category mismatch that must be resolved before any engineering time is spent: despite being filed as a "Laravel/PHP package," friendsofvictoire/html-widget is a Symfony bundle (WidgetHtmlBundle) built for Victoire DCMS, a Symfony-based content management system. It is not a Composer package with a Laravel service provider, and it does not target Laravel's container, Blade, or Eloquent.

Architecturally, the package is a thin content widget: it registers a "HTML" block type with Victoire's widget subsystem so editors can drop raw HTML into a page template, then renders it through Victoire's Twig pipeline. Its value is entirely derived from Victoire's widget registration, business-entity templating, and slot-resolution machinery. Outside that host application, there is essentially no standalone functionality — the bundle is a plugin, not a library.

For a Laravel codebase, this is a non-fit. Adopting it would mean either standing up a Symfony kernel alongside Laravel (dual-framework operational burden) or reimplementing Victoire's widget contracts, at which point the package contributes almost nothing you couldn't write in an afternoon.

Integration feasibility

Low. There is no adapter path that preserves the package's intent. Symfony bundles are autoloaded and bootstrapped via Kernel::registerBundles(); Victoire widgets additionally depend on Victoire's Widget model, view/entity mapping, and Twig namespaced templates. None of that maps onto Laravel's package discovery.

Technical risk

High, and concentrated in provenance rather than code quality:

  • Zero adoption signal. 0 stars, 0 dependents, score 0. No downstream project validates that the package installs, boots, or works against any current dependency set.
  • Likely dormant upstream. FriendsOfVictoire is a small org; Victoire DCMS itself has seen little activity. An abandoned widget bundle inherits every abandoned transitive dependency.
  • Version lock risk. Expect Symfony 2.8/3.x-era constraints in composer.json. On a modern PHP 8.x runtime, resolution will likely fail outright or require --ignore-platform-reqs hacks that shift risk downstream.
  • Security surface. An HTML widget's core function is rendering unescaped editor-supplied markup. That is a deliberate stored-XSS vector. A 0-star package with no security policy, no disclosure channel, and no release cadence is not where you want that vector to live.

Key questions

  1. What does our composer.json actually need — is there any Symfony footprint, or is this purely a Laravel shop?
  2. Is Victoire already in our stack anywhere, or is this a greenfield evaluation?
  3. What is the real requirement: rich text editing, raw HTML embed, or a reusable content block primitive?
  4. Which Symfony/PHP versions does the constraint set permit? (Read composer.json before anything else.)
  5. Who owns patching this if upstream goes silent — and what is the sanitization story (HTML Purifier, DOMPurify, CSP)?

Integration Approach

Stack fit

Poor for Laravel, marginal even for Symfony. If the target application is not Victoire, the package should be rejected at triage. The honest framing for stakeholders: this is not a library we integrate, it is a plugin we would have to host.

Migration path

Recommended path is do not adopt. The functional requirement — "let editors place a sanitized HTML block on a page" — is a small, well-understood problem with mature solutions. A minimal in-house implementation is roughly:

  • A blocks table (or JSON column) with type, payload, order.
  • A Blade partial that renders type: html through a sanitizer (e.g. mews/purifier wrapping HTML Purifier) with an explicit allowlist of tags and attributes.
  • An admin form with a code editor, plus a preview pane.
  • A CSP header restricting script-src so a sanitizer bypass isn't automatically an incident.

That is days of work, fully owned, with a test suite you control. If a Symfony application is genuinely in play, the migration path is instead: verify Victoire version compatibility → pin the bundle to a fork we maintain → treat it as vendored code.

Compatibility

Unverified and likely poor. Confirm before committing: supported Symfony major versions, PHP constraint, Twig version, and whether the widget registration API still matches the Victoire release in use. Any of these failing turns the integration into a fork-and-patch exercise, which changes the cost model entirely.

Sequencing

  1. Triage (½ day): Read composer.json, README, last commit date, open issues. Confirm the Symfony/Victoire dependency. Produce a go/no-go.
  2. Requirement clarification (1 day): Separate "raw HTML embed" from "rich text editor" from "reusable block system." These have different solutions and only one vaguely resembles this package.
  3. Build-vs-buy decision: Given the adoption data, default to build.
  4. If adopting anyway: fork to an internal namespace, pin exact versions, add a sanitization layer, add integration tests that boot the widget, assign a named owner.

Operational Impact

Maintenance

Effectively zero upstream maintenance, which means 100% internal maintenance from day one. The moment we depend on it, we own the code path — including the Twig template, the widget registration, and any Symfony upgrade breakage. Budget for it as internal code, not as a dependency.

Support

No community, no issue triage, no maintainer SLA, no security disclosure process. Any defect becomes our defect with no upstream escalation route. For a component that renders untrusted editor input, the absence of a security response channel is the single biggest operational concern.

Scaling

Runtime cost is negligible — the widget stores and emits a string; rendering is O(1) per block. The scaling risk is not throughput, it is blast radius: an unsanitized HTML block is a persistent injection point. In a multi-tenant or multi-author CMS, one compromised editor account becomes stored XSS against every reader and every admin session. Mitigations (HTML Purifier on write, CSP on read, audit logging on block edits) are mandatory and must be designed in, not bolted on.

Failure modes

  • Composer resolution failure on modern PHP/Symfony — surfaces at install, cheap to detect, blocks the project.
  • Silent widget deregistration after a Symfony or Victoire upgrade — content renders blank with no error. Needs a smoke test.
  • Twig template namespace collision — intermittent, hard to reproduce, typically discovered in staging.
  • Stored XSS — the failure mode with real business consequence. Detectable only via sanitizer tests and CSP violation reporting.
  • Orphaning — upstream repo archived or deleted; if we haven't forked, we lose history.

Ramp-up

High relative to the package's apparent simplicity. A team without Victoire experience must learn its widget model, business-entity templating, and Twig layout conventions before the bundle does anything visible. For a Laravel team, ramp-up is effectively infinite — there is no incremental path to a working integration.

TPM recommendation: Do not adopt. The 0-star / 0-dependent / score-0 profile combined with a framework mismatch and an inherent XSS surface makes this a poor risk-adjusted choice. Scope the underlying need (sanitized content blocks) and build a small owned component on the native 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.
alphabalex/messaging-made-easy
rawphp/warp
shootkiran/merobug
narakode/fineauth
numencode/wn-syncops-plugin
ibnnajjaar/mib-global-pay
ably/pubsub-server
mstfkhazaal/defender
mfonte/base62x
karnoweb/metapilot
tobya/bcsapiwrapper
swalker2/cpanel
vish4395/laravel-translation-manager
morningtrain/economic
teksite/systeminfo-laravel
atomcms/voting
run6/weather
siokas/laravelembeddirectives
adamlien/pkuuids
gilsonsouza/lara-doc-generator