flarum/framework
Flarum is a free, open-source forum platform built on a Laravel-style PHP backend with a modern JavaScript frontend. Its fast, extensible architecture offers a clean REST API and a rich extension system, making it easy to launch and customize a beautiful community forum.
Architecture fit
The first thing a TPM must correct in the framing: flarum/framework is not a Laravel package, and it cannot be composer required into a Laravel application. It is a standalone, opinionated forum application whose "framework" package is the core runtime that Flarum's own extensions are built against. It consumes selected Illuminate and Symfony components (container, database layer, validation, HTTP kernel concepts), so Laravel engineers will recognize ~60% of the idioms, but it ships its own bootstrap, its own CLI (php flarum, not Artisan), its own service-provider/extender model, and its own JSON:API layer. Treating this as a library to embed is the single most expensive misconception available here.
The realistic architectural position is an adjacent deployable, not a dependency: a second PHP application on the same infrastructure, joined to the Laravel product at three seams only — identity (SSO), data (JSON:API + webhooks/events), and presentation (link-out or reverse-proxy under a subdomain/path).
Integration feasibility
Technical risk
Key questions
Stack fit Strong at the infrastructure layer, weak at the application layer. Flarum runs on the same PHP 8.2/8.3 + PHP-FPM + Nginx + MySQL + Redis substrate a Laravel team already operates, so marginal infra cost is near zero. Composer, PHPUnit, Pint-adjacent tooling and CI patterns carry over. What does not carry over: Artisan, Eloquent models, Blade, Laravel's queue/scheduler semantics, and Laravel's authorization layer.
Migration path Do not migrate into Flarum's schema directly. Sequence:
| Phase | Scope | Gate to proceed | Est. |
|---|---|---|---|
| 0 — Prove | Standalone Flarum in staging, OIDC SSO against Laravel as IdP, one seed user cohort | SSO round-trips cleanly; logout and deprovisioning work | 2–3 wks |
| 1 — Bridge | JSON:API read integration (topic/post count, latest activity surfaced in the Laravel product); webhook-driven notification fan-out to the Laravel queue | Notifications deliver < 60s p95; no write path yet | 3–4 wks |
| 2 — Write & import | Historical content import as a one-way job against JSON:API (not SQL); write actions from product into forum | Import is idempotent and re-runnable; no schema coupling | 4–6 wks |
| 3 — Harden | Version pin policy, upgrade runbook, backup/restore rehearsal, GDPR erase path across both stores | Restore drill passes; DSR completes end-to-end | 2–3 wks |
Compatibility
composer update on the forum as a change-managed event, not a routine.community.example.com. Path-based mounting introduces asset and routing edge cases for the SPA that are not worth the elegance.Sequencing Identity first, always. Every subsequent phase assumes a single user identity across both systems; deferring SSO means retrofitting user mapping into imported content later, which is the most common way these projects stall. Defer writes until reads are stable, and defer the historical import until the content model is settled — importing into a schema that 2.0 will reshape is rework by design.
Maintenance You are now operating two PHP applications with coupled PHP runtime requirements but decoupled release cadences. Budget 0.15–0.25 FTE ongoing for a single-instance forum: core minor upgrades quarterly, extension compatibility checks each cycle, dependency security patching, and asset rebuilds. The 2.0 transition is a discrete project (est. 3–5 weeks including extension replacement), not a maintenance task — plan it, don't absorb it.
Support MIT license, no commercial vendor, no SLA. Support is the community forum and GitHub issues, with best-effort response. For anything user-facing and revenue-adjacent, that means your team is tier 1. Escalation paths for a broken SSO extension at 2am are: read the extension source, or disable it. Staff accordingly, and prefer core functionality over extensions in any user-critical path.
Scaling PHP-FPM horizontal scaling works; the forum is stateless behind Redis for cache/session. Realistic ceilings: comfortable to low hundreds of thousands of posts with tuned caching; beyond that, search latency and topic-list rendering degrade, and you are into Elasticsearch-style external indexing and read replicas. The SPA's client-side payload grows with extension count — keep the extension surface minimal for both security and performance reasons. Multi-region is not a supported story; single-region with backups is the honest posture.
Failure modes
| Failure | Blast radius | Detection | Mitigation |
|---|---|---|---|
| SSO extension breaks on upgrade | Total login outage for forum | Synthetic login probe | Feature-flag forum login; fallback local auth documented, time-boxed |
| Core upgrade breaks an extension | Partial feature loss, possible fatal | Staging soak 1 week | Version pinning; extension inventory with owners |
| Forum DB corruption / bad migration | Content loss | Daily backup + restore drill | Point-in-time recovery; restore rehearsed in Phase 3 |
| Webhook/notification path silently stops | Users miss activity; no error surfaced | Queue depth + last-event-age alert | Dead-letter queue; reconciliation job against JSON:API |
| Spam / abuse wave | Moderation load, SEO damage | Rate anomaly alert | Moderation tooling and rate limits configured before launch |
| Abandonment after 18 months | Content stranded in a niche schema | — | Export path validated at Phase 2; keep JSON:API export in CI |
Ramp-up A competent Laravel engineer becomes productive in Flarum core in roughly 1–2 weeks, and productive in the Extender/extension model in 3–4 weeks. The learning curve is not steep but it is non-transferable — that knowledge is single-purpose and leaves with the engineer. Recommend two engineers cross-trained, and a written runbook covering upgrade, rollback, SSO recovery and restore. Frontend work inside Flarum requires Mithril, which is a genuinely separate skill from Vue/React and should be scoped as such rather than assumed.
TPM recommendation: pursue this as a standalone, SSO-bridged community annex on the existing PHP/MySQL substrate. Reject any proposal that frames it as a Laravel package to embed, that shares the Laravel database, or that requires the forum to own identity. Underwrite only core APIs, pin versions, and fund the 2.0 upgrade as a line item now rather than discovering it.
How can I help you explore Laravel packages today?