friendsofvictoire/markdown-widget
A Laravel package that renders Markdown content inside dashboard widgets, letting you format widget text with headings, lists, links, and other Markdown syntax instead of raw HTML.
Architecture fit: poor — category mismatch. Despite being tagged as a PHP package, friendsofvictoire/markdown-widget is not a Laravel package. It is a Symfony bundle (WidgetMarkdownBundle) belonging to the Victoire DCMS ecosystem, a Symfony-based content management system. It has no ServiceProvider, no config/*.php, no facade, and no publishable assets in the Laravel sense. Instead it registers a widget type through Victoire's widget registry and Symfony's DI container tagging system — a mechanism Laravel's container does not implement. It also assumes Twig as the rendering layer, Doctrine as the persistence layer, and Victoire's own widget/editor contracts. None of these are portable to a Laravel application without replacing the framework underneath.
Integration feasibility: effectively zero as-is. The realistic work is not "wire up the package" but "reimplement the widget" — a markdown-to-HTML renderer plus a block/field type registered with whatever content model the target app uses. The actual value in the package is thin: a markdown text field rendered through a Twig template. That is a few dozen lines of application code, not a dependency.
Technical risk: high, concentrated in abandonment.
Key questions for the requesting team:
rel/noopener, protocol filtering) already handled elsewhere in the stack?Recommendation: do not integrate. This is not a dependency decision; it is a build decision.
Stack fit: none. Victoire is a full Symfony CMF-adjacent CMS. Laravel shares Symfony components (HttpFoundation, Console, Routing) but not the framework contracts this bundle relies on — no bundle extension class loading, no compiler passes, no tagged-service widget registry, no Victoire Widget entity model. There is no adapter layer that makes a Victoire widget render inside a Laravel view without pulling in Victoire itself, which would mean running two frameworks.
Recommended substitute — build on the maintained primitive:
| Need | Recommended approach |
|---|---|
| Markdown → HTML | league/commonmark (the same CommonMark engine most of the PHP ecosystem, including Laravel-adjacent tooling, standardizes on) |
| Laravel ergonomics | A thin wrapper: Blade directive/component, a cast or accessor, a validation rule |
| Editor field / block type | Implement natively against your own content model (e.g., a markdown column plus a form component), or use an existing block-editor package |
| Sanitization | league/commonmark's HtmlFilterExtension, or an explicit allowlist sanitizer at render time |
This yields the same feature with a maintained upstream, PHP 8 compatibility, and an active security response channel.
Migration path: not applicable. There is no prior Laravel integration to migrate from. If a Victoire/Symfony system is the source of truth, the migration is a content migration: export widget instances, map the markdown body to the new field, and re-render at read time. Scope that as a data project, not a library swap.
Compatibility: assume incompatible until proven otherwise. Before spending any engineering time, verify in a throwaway branch: does composer require friendsofvictoire/markdown-widget resolve against the target PHP/Laravel versions at all? Expect a dependency conflict on Symfony/Twig constraints. A failed composer require is the cheapest possible kill signal — run it first.
Sequencing if pursued anyway (not advised):
Step 4 is the tell: if the honest plan includes "fork and own it," the correct decision was to write the twenty lines yourself.
Maintenance: unbounded and unowned. Abandoned since 2016 with no maintainer means every future PHP/Laravel upgrade is a manual patch exercise against code you did not write. There is no upgrade path, no changelog, no issue triage. The total cost of ownership is a rewrite plus the interest on having deferred it.
Support: none. No upstream maintainer, no community, no dependents to observe. Incident response for a rendering bug or security issue is entirely internal, with no ability to escalate or wait for a fix. For a content-rendering component touching user input, that is the wrong risk posture.
Scaling: not a meaningful concern here. Markdown rendering is CPU-cheap and stateless; it will not be your bottleneck. If throughput matters, cache rendered HTML per content revision rather than optimizing the renderer. The scaling risk is organizational, not technical: a single unmaintained component in the content pipeline becomes a recurring audit finding.
Failure modes to expect:
Ramp-up: negative value. A new engineer must learn Victoire's widget model, an obsolete Symfony bundle structure, and the 2016 dependency graph — knowledge that transfers to nothing else in the estate. The equivalent knowledge for league/commonmark is broadly useful and documented.
Verdict for the roadmap: reject the dependency. File the underlying requirement — "markdown authoring and safe rendering for content fields" — as a small, well-understood build task against a maintained parser, and budget the sanitization review explicitly. If a Victoire system is genuinely in scope, raise it as a cross-framework content migration decision for architecture review rather than treating it as a package evaluation.
How can I help you explore Laravel packages today?