fof/split
A Flarum moderation extension that lets staff split selected posts from an existing discussion into a new thread. Choose the posts to move, set the new discussion's title and tags, and keep conversations organized without deleting or manually recreating content.
Framing correction (important for scoping): fof/split is not a Laravel package. It is a Flarum extension — a Composer package that plugs into Flarum's extension API, which itself is built on Laravel/Illuminate components (illuminate/support, illuminate/database, illuminate/validation). It is not installable into a Laravel application, and it exposes no service provider, facade, or config file for a Laravel host. Everything below treats it as a PHP/Composer dependency inside a Flarum forum, which is the only architecture it fits.
Architecture fit. The extension adds a single moderation capability: take one or more posts out of an existing discussion and move them into a brand-new discussion, with the split posts re-parented and the original discussion left intact. Architecturally this is the right shape for the problem — it is a thin orchestration layer over core Discussion/Post models plus a frontend control in the post stream (Flarum's Mithril-based UI). It does not introduce its own tables, entities, or persistence layer, which keeps the integration surface small and the coupling to core high-but-shallow. That is the correct trade-off for a workflow utility: it will break on major core upgrades rather than silently drift.
Integration feasibility. High, with the usual caveats. Install is composer require fof/split, enable via php flarum extend, run migrations (none expected of consequence), clear cache. Authorization is expected to follow Flarum's policy/gate model, so the main configuration work is a permission matrix (who may split posts) rather than code. The realistic integration effort is measured in hours, not weeks, for a team already running Flarum.
Technical risk. Low blast radius, moderate longevity risk:
Key questions to resolve before committing:
flarum/core constraint does the current release declare, and does it cover our pinned core version (1.x vs 2.x)?Stack fit. Fits a standard Flarum deployment: PHP 8.x, MySQL/PostgreSQL/SQLite via Illuminate, Composer-managed extensions, asset compilation through Flarum's frontend. No additional infrastructure, no background workers, no external services. For a Laravel shop, the code will read as familiar — Eloquent models, event subscribers, policy classes — which lowers the review cost materially.
Migration path.
composer.json; do not float. Record the resolved tag and its flarum/core constraint.Compatibility. Low conflict risk given the absence of schema changes, but the real compatibility question is coexistence with other FoF extensions commonly deployed alongside it (tags, approval, sticky, discussions). Test the combined set, not the extension in isolation. The frontend control is injected into the post stream, which is the most likely place for UI collisions with other post-stream modifications.
Sequencing. Treat this as a two-track rollout: technical (pin → staging → edge-case validation → production enable behind permission) and organizational (write the moderator runbook → train → announce). Do not enable the permission for all moderators on day one; pilot with two or three, watch for the failure modes below, then widen. If the package fails validation, the fallback is a 1–2 day internal build or a vendored fork — the codebase is small enough that "replace" is a genuine option, which caps the downside of the whole decision.
Maintenance. The maintenance burden is dominated by core upgrade compatibility, not by bug fixing. Budget an explicit re-validation task each time flarum/core moves a major version. Because the codebase is small and MIT-licensed, the standing posture should be: consume upstream while it is maintained, fork on first sign of abandonment. Vendoring cost is low enough that this is a controlled risk rather than a dependency gamble.
Support. The feature is moderator-facing, so support load is user-facing, not infrastructure-facing. Expect questions about "where did my post go" — the split creates a new discussion and moderators need a consistent way to leave a redirect/notice. Publish a short runbook: when to split, how to name the new discussion, whether to leave a pointer in the original thread, and how to reverse a mistake. Reversal is the weak spot — confirm whether an undo path exists or must be done manually.
Scaling. Negligible steady-state cost: splits are rare, human-initiated, and bounded. The only scaling concern is a single large operation on a very long discussion — a multi-thousand-post move can be a long transaction with lock contention on a busy forum. Mitigate by confirming the operation is transactional and, if not, by restricting splits on very large discussions or scheduling them off-peak.
Failure modes to instrument:
Ramp-up. For an engineer: half a day to read the extension end-to-end and confirm the side-effect checklist above; roughly a day to validate in staging. For moderators: a one-page runbook and a 15-minute walkthrough. Total organizational lift is small — which is the honest read on this package. It is a narrow, well-shaped utility with real but bounded value; the decision it deserves is not "is this strategic" but "is a 1–2 day adopt-and-fork-check cheaper than building it ourselves," and at this scope the answer is almost always yes, provided the data-integrity questions in the Technical Evaluation are answered before production enablement.
How can I help you explore Laravel packages today?