flarum/core
Flarum is free, open-source forum software built on PHP with a fast, modern frontend. It's lightweight, extensible, and designed for smooth community discussions, offering a clean default theme and a rich extension ecosystem.
Architecture fit — partial, and the framing needs correcting. flarum/core is not a Laravel package in the Composer-installable-into-an-existing-app sense. It is a standalone PHP forum application that consumes Laravel's Illuminate components (Eloquent, database migrations, cache, sessions, mail, validation, container) while shipping its own application kernel, its own JSON:API layer, and a Mithril.js single-page frontend. There is no service provider you register in a Laravel app to get a forum; there is a separate document root that you deploy alongside it. So the honest fit statement is: same language, same ORM, same migration tooling, different application. That is a meaningful adjacency — a Laravel team can read the codebase, write migrations, and reason about Eloquent models on day one — but it is not a "drop into composer require" integration.
Three viable integration postures, in descending order of recommendation:
| Posture | Description | Fit |
|---|---|---|
| Standalone + identity bridge | Deploy on community.example.com, bridge auth via OAuth2/OIDC extension or a custom auth driver, syndicate content into the main app via JSON:API |
Recommended |
| Headless content source | Forum runs standalone; Laravel app pulls threads/posts through /api for SEO pages, digests, or unified search |
Good, low effort |
| Deep in-process integration | Embed Flarum's kernel inside a Laravel app, share sessions/middleware | Do not do this |
Integration feasibility. The JSON:API surface is the lever a TPM should care about most. It is stable, documented, token-authenticated, and expressive enough (filters, includes, pagination, sparse fieldsets) to build a Laravel-side sync job or an internal read model without touching Flarum internals. On the identity side, the auth extension ecosystem (OAuth2, SAML, LDAP) plus the auth-driver interface means single sign-on is a config-and-one-class problem rather than a fork. Extensions are Composer packages declaring type: flarum-extension with an extend.php bootstrapping API — a clean, declarative extension contract, which is the single biggest positive signal for maintainability.
Technical risk. Ranked:
Key questions to resolve before committing:
Stack fit. Requires PHP 8.x (verify the floor against your target minor), MySQL/MariaDB or PostgreSQL, Composer, a webroot pinned to public/, and writable storage/ and public/assets/. It runs fine on the same infrastructure shape as a Laravel app — same runtime, same database engine, same deploy pattern — which means your existing CI, secret management, and backup tooling transfer with minimal adaptation. It does not share a database schema, session store, or queue worker with your Laravel app by default, and deliberately merging those is a trap.
Recommended migration path. Sequence it as an adjacency, not an embed:
/api into a local read model — powers unified search, digests, or "recent discussions" widgets on the main product. Keeps Flarum authoritative for discussion without coupling the two runtimes.Compatibility. The two real compatibility surfaces are the extension API and the frontend build toolchain; both move on major versions. Pin flarum/core to a minor range, pin every extension explicitly, and treat "run composer update" as a change requiring a staging pass. Do not float versions on a production forum.
Sequencing constraint to state plainly: identity before content, content before cutover, and no third-party extension enters the build without a named owner. If step 1 or 2 fails, the cost of exit is near zero — which is precisely why the PoC-first sequence is the right risk posture for a 32.56 opportunity score.
Maintenance. Low steady-state, spiky at upgrades. Routine work is patch releases and extension updates; the expensive work is major-version migrations, where the extension API shifts and every non-bundled extension must be re-validated or replaced. Budget roughly one concentrated engineering pass per major version, plus periodic security-patch cadence — advisories arrive through GitHub, not a commercial channel, so someone must be subscribed to release notifications. The bundled extensions (tags, likes, mentions, markdown, BBCode, emoji, statistics) reduce third-party surface meaningfully; stay inside them wherever possible.
Support. MIT license, no vendor, no SLA. Support is community forum and GitHub issues. That is acceptable for an internal or community-facing property and unacceptable if the forum is a paid-support channel with contractual uptime language. If tier-one support is a requirement, this evaluation should stop here.
Scaling. Comfortable through mid-size communities on a single node; the read path is cache-friendly and the SPA offloads rendering to the client. Watch three things: the search index (native fulltext degrades on large post tables — plan a Meilisearch/Algolia extension before it hurts), asset compilation and cache-busting on deploy (a partial asset rebuild produces white-screen-for-some-users, the single most common post-upgrade incident), and PHP-FPM worker sizing relative to concurrent SPA API calls. Horizontal scale means shared cache/session backing and a load balancer; it does not mean naively adding app nodes against a single database.
Failure modes. Enumerated for runbook purposes:
| Mode | Trigger | Blast radius | Mitigation |
|---|---|---|---|
| Stale frontend assets | Deploy without clearing asset cache | Blank page / mixed JS for returning users | Cache-clear as a mandatory post-deploy step; version-hash assets |
| Extension breakage | Major version bump | Forum down or features silently disabled | Pin versions; staging upgrade pass; extension inventory with owners |
| Search degradation | Unindexed growth past fulltext threshold | Slow or useless search | External search backend; monitor index lag |
| Mail non-delivery | Unconfigured or unauthenticated SMTP | No notifications, broken password resets | Route through authenticated relay; monitor bounce rates |
| Spam wave | Open registration, no filtering | Moderation load, SEO damage | Spam-filter extension, registration throttles, staged trust levels |
| Migration lock | Large-table schema change on upgrade | Extended downtime | Maintenance window; rehearse on a production-sized snapshot |
Ramp-up. Backend is genuinely fast for a Laravel team — Illuminate idioms, Eloquent, migrations, and the extender API are learnable in a few days. Frontend is the real cost: Mithril plus the TypeScript/ES-module extension toolchain is a distinct skill, and it constrains how much UI customization you can absorb without dedicated ownership. Plan for one engineer to hold both the extension and build-toolchain knowledge; that person is a single point of failure and should be named before adoption, not after.
TPM recommendation. Proceed to a two-week standalone PoC plus identity-bridge spike, gated on the key questions above. Cap investment at that stage. Do not commit to deep in-process integration under any circumstances, and do not adopt without resolving who owns Mithril frontend work and who owns each third-party extension. Verify the release cadence directly against GitHub before citing package freshness in any decision record — the timestamp in the supplied data is not trustworthy.
How can I help you explore Laravel packages today?