ernestdefoe / cascade
Cascade — a social-feed theme for Flarum 2. Three-column shell, first-post excerpts and media in the discussion list, and two presets: Wall (cards) and Timeline (hairline rows).
Package info
github.com/ernestdefoe/cascade
Language:Less
Type:flarum-extension
pkg:composer/ernestdefoe/cascade
Requires
- php: ^8.3
- flarum/core: ^2.0
- fof/reactions: ^2.0@beta
- s9e/text-formatter: ^2.0
Requires (Dev)
None
Suggests
- ernestdefoe/mobile-tab: Bottom tab bar on phones. Cascade ships a matching preset instead of implementing a second tab bar.
- ernestdefoe/presence: Fills the 'Online now' widget in the right rail. The widget hides itself when this is not installed.
- flarum/realtime: Live typing indicators inside the conversation modal, and the new-discussions pill in place of core's 'N updates available' banner. Cascade supplies the state and subscription the modal needs; without this extension neither appears.
- flarum/subscriptions: Powers the Following filter in the left rail and the Follow control on the discussion page.
- flarum/tags: Tag chips on every feed row, and the tag list in the left rail. Cascade styles them but does not require them.
- fof/upload: Image attachments are what the feed's media grid renders. Without it, only images embedded in post markdown are picked up.
Provides
None
Conflicts
None
Replaces
None
README
A social-feed theme for Flarum 2. Your discussion list stops being a list of links and becomes a feed: the opening post's text and pictures on the card, reactions, the latest reply, and the whole conversation in a modal over the top of it — without ever leaving the page you were reading.
Warning
This is an early public test build (0.1.x). It works, it is in daily use on one forum, and it is going to have bugs I have not seen. That is exactly why it is out here. Please break it and tell me what broke.
What it actually does
Flarum shows you a title, an avatar, a tag and a reply count. A social feed shows you the post. That one difference is what Cascade is built around.
- The opening post on the card — an excerpt, an image mosaic, the latest reply, all in the discussion list.
- Reactions on the card, with the hover picker you already know: the emoji row unfurls, each one grows under the pointer and names itself, the one you pick lands with a pop. Long-press on touch.
- See more / See less expands the post's text in place — it grows what is there, it does not swap the card for something else.
- The conversation in a modal over the feed. The discussion page still exists (it is the permalink every notification and search result points at) and the modal links to it, but you rarely need it.
- Live typing indicator inside that modal, when
flarum/realtimeis on. - Both rails stay put while the feed scrolls, so navigation and the widgets are always reachable. A rail taller than the window scrolls inside itself.
- Three presets — an admin sets the forum's default, and members can pick their own from their settings page:
Facebook-style (wall) |
Cards on a grey ground, dense chrome, a wide labelled action bar. For forums whose visitors mostly lurk and need the affordance spelled out. |
X-style (timeline) |
No cards. One column between hairlines, a sticky tab strip, a quiet action bar. For busy forums where row count matters more. |
Bluesky-style (stream) |
One column again, but the row separators are inset to the text, the spacing is looser and the actions get pill hovers. Slate ground rather than navy. |
The names in brackets are the stored values and never change; the labels are translatable strings.
Screenshots
Dark
The reaction picker
The conversation modal
The X-style preset
The Bluesky-style preset
On a phone
Install
composer require ernestdefoe/cascade
Then enable Cascade in your admin panel, and pick a preset under its settings.
Requirements
| Flarum | 2.0.0-rc.8 or newer |
| PHP | 8.3+ |
| Required | fof/reactions — Composer pulls it in |
fof/reactions currently has no stable 2.x release, so Composer resolves it at
beta. That needs no special flags: every Flarum 2 install already runs with a
relaxed minimum-stability, because Flarum 2 itself is a release candidate.
Colour
Cascade deliberately adds no accent-colour setting. Your forum already has one under Appearance, and Flarum computes button contrast colours from it at compile time — a second accent would recolour half the page and leave the other half pointing at the old one.
Everything around that accent is a neutral graphite ramp, shared by all three presets. They used to carry their lineage's brand palette as well, which made the resemblance louder than it needed to be and meant three colour systems to keep legible across four theme modes instead of one. The ramp has no hue on purpose: a grey with a cast reads as "almost blue" next to your accent and fights it, while a true neutral leaves the accent as the only colour on the page. Pick whatever accent suits your forum — the presets are told apart by their structure, not their colour.
Extensions it works with
Cascade implements none of these itself. It detects what you have and decorates it; with any of them absent, the matching piece of UI is simply not rendered.
| Extension | What it adds |
|---|---|
fof/reactions |
The reaction control and the hover picker. Required. |
flarum/tags |
Tag pills in the card's meta line — un-floated so you see all of them, not the first one and a half |
flarum/realtime |
The typing indicator in the conversation modal |
fof/upload |
Attachments become the card's image mosaic |
fof/forum-widgets-core |
Side widgets are adopted into Cascade's right rail rather than becoming a fourth column |
ernestdefoe/mobile-tab |
Bottom tab bar on phones |
Settings
Eight, in the extension's own admin page:
- Preset — the forum's default: Facebook-, X- or Bluesky-style
- Let members choose their own — adds a Feed style picker to each member's settings page. Their choice applies to them alone; anyone who leaves it on Use the forum's default follows the setting above. Turn it off to hold the whole forum to one look.
- What each row shows — excerpt and image / excerpt only / title only
- Excerpt length — 40 to 600 characters
- Trending widget — tags ranked by discussions actually started recently,
recomputed hourly (never read from
tags.discussion_count, which drifts) - Hashtag cloud widget — a weighted cloud of the most-used hashtags, sized
by rank rather than raw count so it stays readable however lopsided the
numbers are. Appears only when
ernestdefoe/hashtagsis enabled; Cascade never depends on it. - Hashtags in the cloud — 6 to 60
- Engagement bar — auto / always / hidden
Performance
The thing that makes a feed expensive is putting a whole post in every list row,
and Flarum's core team removed firstPost from the discussion-list endpoint for
exactly that reason (flarum/framework#4788).
Cascade does not put it back.
Instead it eager-loads the relation without serialising it and reads the
stored formatter XML directly — parsed_content, never content (which
unparses) or formatContent() (which renders) — shipping a capped plain-text
excerpt and a handful of image URLs. Reaction counts come from the request-scoped
memo fof/reactions already primes for every row's first post.
Net cost: two eager loads per page of discussions. No migration, no new tables, no extra requests.
Known gaps in 0.1
Being honest about what is not done yet:
- The discussion page is only lightly restyled. The modal is the intended path; the full page still looks close to stock.
- Mobile works but has had less attention than desktop.
- The modal's reply button opens Flarum's real composer rather than an inline comment box.
- The X-style and Bluesky-style presets have had less testing than Facebook-style.
- Only English ships, though every string is translatable — no hardcoded text.
Reporting bugs
Please do. Open an issue, or post on the support forum.
What helps most: your Flarum version, which other extensions are enabled, the preset and colour scheme you were in, and a screenshot.
Licence
MIT. Free, and free to stay free — use it, fork it, ship it in something else.






