Features

Everything you need,
nothing you don't.

MMSP-native from the ground up, with full compatibility for every major feed format you already use.

MFEED and MMSP native

Parses MFEED (MMSP JSON format) natively. Enforces MMSP/1.0 User-Agent, conditional GET (ETag / Last-Modified) and the 300 s poll floor per the spec. Read the spec →

Feed discovery

Search new feeds by topic via feedsearch.dev. 46 category autocomplete, result cap selector (10 to 200) and bulk subscribe with a confirmation dialog.

Filter expressions

Per-feed MMSP Appendix A ABNF filters. The filter dialog surfaces existing terms as toggleable rows - no syntax knowledge required for common cases.

Background polling

Conditional GET with ETag and Last-Modified. Rate-limit backoff, 300 s poll floor. Async asyncio scheduler - zero CPU when no feeds are due.

Catppuccin themes

Mocha (dark) and Latte (light) with a single toggle. Theme preference persists across restarts. Amber focus ring on every focusable control.

Full-text rendering

content:encoded preferred over description so full article HTML is shown where available. Media player for podcast and video items built in.

Full keyboard navigation

Every control reachable without a mouse. Tab wraps cleanly end-to-end. Enter, Space, Left, Right all wired. Escape closes drawers and dialogs.

Import and export

Full subscription round-trip via JSON. A curated feeds_export.json ships with the repo so you can bootstrap a reading list in seconds.

Bulk feed management

Select-all checkboxes, bulk remove, per-feed filter, edit and delete from the subscription manager. In-place list removal preserves scroll position.

Single-device by design

No account, no cloud, no server. Your subscriptions and read state stay on your machine. JSON export/import moves them between machines - the migration path, not live sync.

Architecture

A reference client, built like one

A reference client has to be exemplary or the spec it implements loses authority. So MMSP polling semantics sit behind a pure domain, inside a four-layer architecture, UI to Application to Domain with Infrastructure implementing inward. AST tests and 100% branch coverage run on every build, so the behaviour the spec mandates is behaviour the code cannot structurally violate.

Meridian clean architecture: UI, Application, Domain, Infrastructure, with dependencies pointing inward to a pure Domain