fof/drafts
FoF Drafts adds draft support to Flarum, letting users save discussions and posts as private drafts and return to finish them later. Drafts stay visible only to their author, with sensible permissions and seamless integration into the composer workflow.
What this actually is. Despite being filed under "Laravel/PHP package," fof/drafts is a Flarum extension, not a standalone Composer library. It runs inside a Flarum host application and depends on Flarum's extension bootstrapping, its Eloquent-backed models, migrations, policy/permission system, and frontend asset compilation (Mithril/JS). It inherits Laravel idioms (service providers, Eloquent, migrations, middleware) but is not installable or useful outside a Flarum forum. Evaluate it as a forum feature module, not as a reusable PHP dependency.
Architecture fit. Good, if and only if Flarum is already your forum platform. The extension adds a Draft model scoped to user + discussion, a serializer, API endpoints, and a frontend autosave layer that persists content server-side and mirrors state in the browser. It is additive: one migration, no core schema mutation, no monkey-patching of core classes. That is the cleanest possible footprint for a Flarum feature extension, which keeps blast radius small and rollback cheap (disable extension, drop table).
Integration feasibility. Low effort. composer require fof/drafts, enable via admin or php flarum extension:enable fof/drafts, run migrations, configure the draft-autosave interval and group permissions in the admin panel. There is no external service, no credential, no queue worker, and no cron dependency. A competent Flarum operator completes this in under an hour including staging verification.
Technical risk. The functional risk is low; the supply-chain risk is the real item.
Key questions to resolve before approval.
composer.json constraint match our pinned Flarum version?Stack fit. Requires an existing Flarum 1.x host on PHP 8.1+ with MySQL/MariaDB, PostgreSQL, or SQLite. Install is Composer-native and fits the same dependency workflow as the rest of the Flarum extension set — no separate build pipeline, no container, no sidecar. If we are not already on Flarum, this package is irrelevant and the conversation should be about forum platform selection instead.
Migration path. Straightforward, with one caveat: the migration adds a drafts table and the extension registers new API routes. On a forum with existing content, expect a fast, additive migration with no backfill. The real migration work is policy, not schema — deciding which groups get draft permissions and what the autosave cadence should be so we do not surprise users with unexpected write behavior.
Compatibility. Two axes to pin. First, Flarum version: verify the extension's declared constraint against our exact core version, and check the changelog for the last two Flarum minors. Second, extension-set interaction: draft persistence touches the discussion composer, so any other extension that modifies the composer (mentions, uploads, markdown editors, rich-text plugins) is a candidate for conflict and must be smoke-tested together, not in isolation.
Sequencing.
Maintenance. Low recurring cost. The extension has no external dependencies to rotate and no scheduled jobs to monitor. The maintenance burden is version-tracking: every Flarum core upgrade becomes a compatibility checkpoint, and because the package is community-maintained, there is no vendor SLA telling us when a compatible release lands. Budget a recurring line item for "verify drafts extension against each Flarum upgrade" rather than assuming it rides along.
Support. No commercial support. Our engineers own first-line triage. Given the small codebase, a mid-level PHP engineer can read the whole extension in an afternoon, which substantially de-risks the absence of a support contract. Mitigation: pin the version in composer.json, and vendor a fork under our org if upstream goes quiet — the MIT license permits this and the surface area is small enough to make it credible.
Scaling. The load is per-editor write traffic on the drafts table, not read fan-out. Autosave cadence multiplied by concurrent composers gives the write rate; at typical forum concurrency this is trivial, but a short autosave interval on a large forum with many simultaneous composers is the one place this could show up as database pressure. The table grows with drafts per user and is not self-limiting — plan an index on user/discussion and a periodic cleanup of stale drafts. No horizontal scaling concerns; it scales with the database like everything else in Flarum.
Failure modes.
Ramp-up. Minimal for operators — admin panel configuration, no new tooling. For engineers, roughly half a day to read the extension and understand its model and routes, plus the same again for the composer hook if we ever need to patch it. Documentation for end users is a short help-desk note on where drafts live and how long they persist. Overall: a low-cost, low-risk, low-differentiation feature whose main operational demand is that someone explicitly owns upgrade compatibility — name that owner before enabling it.
How can I help you explore Laravel packages today?