anomaly/markdown-field_type
Anomaly Markdown Field Type provides a Markdown-powered field for Laravel Streams, enabling editors to write Markdown content in entries and render it cleanly. It extends Streams field types with a familiar, lightweight authoring experience.
What it is. anomaly/markdown-field_type is a single-purpose addon for the Anomaly Labs Streams Platform (the engine behind PyroCMS 3.x). It registers a markdown field type so that a stream assignment can store raw Markdown in a database column and render it as HTML in the admin UI and front end. It is not a general-purpose Laravel package — it has no standalone value outside a Streams/PyroCMS install.
Architecture fit. The addon follows the platform's expected contract: a service provider extending FieldTypeServiceProvider that declares a slug (markdown) and binds a FieldType implementation, plus an input view (textarea/editor), an output presenter, optional config fields (e.g. height, default value), and publishable assets for the editor JS/CSS. This is idiomatic for Streams — the fit is high if and only if our application is already a Streams/PyroCMS application. Fit against a conventional Laravel app (Nova, Filament, Livewire, Blade forms) is effectively zero; nothing here is reusable without a rewrite.
Integration feasibility. Low-to-moderate. The mechanical steps are simple — Composer require, register the addon, publish assets, assign the field type to a stream — but the surrounding dependency graph is the constraint. Streams-era addons target Laravel 5.x (roughly 5.1–5.5) and PHP 5.6/7.0/7.1. If our platform is pinned to those versions, integration is a same-day job. If we are on Laravel 8+, the addon will not install, and modernizing it means porting the field type, replacing the editor asset bundle, and swapping the Markdown renderer — at which point we are writing our own addon.
Technical risk.
parsedown, cebe/markdown, or similar) is likely pinned to an old minor line, which may itself carry known advisories.public/ can desync from the package version on deploy, producing a silently broken editor with no server-side error.Key questions for the technical owner.
Stack fit. This is a yes/no gate, not a sliding scale. Green light only for a Streams Platform application on a compatible Laravel/PHP pair. Any other context — standard Laravel with Blade, Inertia, a headless API — should be declined; the effort to adapt exceeds the effort to implement a Markdown field directly with league/commonmark in an afternoon.
Migration path. Assume a brownfield PyroCMS install. Steps: pin the package to an exact version in composer.json; install in a disposable environment first; run addon:install/publish assets; assign the field type to a staging stream; author content with representative Markdown (tables, code fences, embedded HTML, images); inspect the rendered output and the sanitized output side by side; then promote. If existing textarea or wysiwyg fields hold content, treat conversion as a separate data task — Markdown is not a lossless target for rich-text HTML, and tables/embeds degrade.
Compatibility. Three axes must be confirmed before sequencing: framework version (Laravel 5.x), PHP version (≤7.x), and Streams Platform major version. Any mismatch is a hard stop, not a workaround. Also confirm the admin theme's asset stack — an old editor bundle may conflict with a newer jQuery or CSP policy.
Sequencing.
htmlpurifier or an allowlist) regardless of the package's default.text field rendered through a first-party Str/CommonMark helper — so the field type is removable without a content migration.Maintenance. Effectively self-maintained. With 3 stars and 0 dependents, we are the maintainers. Budget a small but recurring allowance for dependency bumps, PHP upgrades, and security patches to the renderer — and treat the fork as the canonical source, with the upstream repo as a historical reference only. Do not expect upstream fixes for anything.
Support. No vendor, no SLA, no community forum. Internal documentation becomes the entire support surface. The realistic failure mode is not "vendor goes away" — it already has — but "the one engineer who understood the addon leaves." Mitigate with a short runbook covering install, asset publish, render path, and rollback.
Scaling. Negligible concern. Rendering cost is per-request Markdown parsing, linear in content length, and cacheable. If rendering happens on every page view, add response or fragment caching. The database footprint is a plain text column, which scales exactly as well as any other.
Failure modes to watch.
symfony/* tree, eventually blocking unrelated upgrades.Ramp-up. Low for a developer already fluent in Streams addon conventions; the field type is small and readable. Higher for a generalist — the platform's service-provider and stream-assignment idioms are undocumented outside the PyroCMS docs, and there is no sample app to learn from. Estimate half a day for someone on the platform, two to three days for someone learning it cold.
Recommendation. Conditional proceed, scoped to existing Streams/PyroCMS installs only, gated on the compatibility check and a mandatory XSS review — and only after forking to an internally owned namespace and confirming content is stored as raw Markdown. For any other Laravel application, decline and build a first-party Markdown field against a maintained parser.
How can I help you explore Laravel packages today?