{"id":50943386,"url":"https://github.com/oernster/meridian","last_synced_at":"2026-06-17T17:08:15.031Z","repository":{"id":361777177,"uuid":"1255597394","full_name":"oernster/meridian","owner":"oernster","description":"MMSP/RSS/Atom feed client","archived":false,"fork":false,"pushed_at":"2026-06-11T16:25:01.000Z","size":5310,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-11T18:13:45.276Z","etag":null,"topics":["atom","mmsp","rss"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oernster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-01T02:09:11.000Z","updated_at":"2026-06-11T16:43:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oernster/meridian","commit_stats":null,"previous_names":["oernster/meridian"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/oernster/meridian","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oernster%2Fmeridian","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oernster%2Fmeridian/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oernster%2Fmeridian/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oernster%2Fmeridian/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oernster","download_url":"https://codeload.github.com/oernster/meridian/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oernster%2Fmeridian/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34457745,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atom","mmsp","rss"],"created_at":"2026-06-17T17:08:14.304Z","updated_at":"2026-06-17T17:08:15.024Z","avatar_url":"https://github.com/oernster.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg width=\"128\" height=\"128\" alt=\"meridian\" src=\"https://github.com/user-attachments/assets/e2ef5ef9-1ed9-4faf-9a8f-4af483072e59\" /\u003e Meridian\n\nA desktop feed reader and subscription manager built on the [MMSP](https://oernster.github.io/MMSP-Spec/) protocol. Supports RSS, Atom, podcast feeds, and YouTube channels with a native Qt Quick UI.\n\n\u003cimg width=\"1273\" height=\"824\" alt=\"{F5AE63FD-C41B-4D47-A1F4-7B81C19FE493}\" src=\"https://github.com/user-attachments/assets/c6565996-d66f-4df7-a26b-5691c2ee32f4\" /\u003e\n\n## Installation\n\n### Pre-built releases\n\nDownload the latest installer for your platform from the [Releases page](https://github.com/oernster/meridian/releases).\n\n### Run from source\n\n```bash\n# 1. Create and activate a virtual environment\npython -m venv venv\nvenv\\Scripts\\activate        # Windows\nsource venv/bin/activate     # macOS / Linux\n\n# 2. Install dependencies\npip install -r requirements.txt\n\n# 3. Run\npython -m meridian.main\n```\n\nOr, if installed as a package:\n\n```bash\npip install -e .\nmeridian\n```\n\n### Linux — Flatpak\n\n```bash\n# Build (requires flatpak and flatpak-builder)\n./build_flatpak.sh\n\n# Install the generated bundle\nflatpak install --user meridian.flatpak\n\n# Run\nflatpak run uk.codecrafter.Meridian\n\n# Uninstall and remove all build artefacts\n./cleanup_flatpak.sh\n```\n\n### macOS — DMG\n\n```bash\n# Build (requires macOS with Xcode command-line tools)\npython builddmg.py\n\n# The DMG will be written to dist/Meridian-\u003cversion\u003e.dmg\n# Open it, drag Meridian.app to Applications, then launch from Spotlight or Launchpad.\n```\n\nSee [DEVELOPMENT.md](DEVELOPMENT.md) for Python version requirements, dev tooling, and how to run the test suite.\n\nSee [ARCHITECTURE.md](ARCHITECTURE.md) for the full project structure and design.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/architecture.svg\" alt=\"Meridian clean architecture: UI, Application, Domain, Infrastructure, with dependencies pointing inward to a pure Domain\" width=\"860\"\u003e\n\u003c/p\u003e\n\n## Sample Feeds\n\nA `feeds_export.json` file is included in the repository with a curated set of RSS, Atom, and MFEED subscriptions ready to import.\n\nTo load them:\n\n1. Launch Meridian\n2. Open **File \u003e Import Feeds...**\n3. Select `feeds_export.json` from the repository root\n\nAll feeds will be added and begin polling immediately.\n\n## Features\n\n- Subscribe to RSS, Atom, podcast, and YouTube feeds\n- Feed discovery by topic: search for candidate feeds via feedsearch.dev, preview results, subscribe individually or in bulk\n- Per-feed filter expressions (MMSP Appendix A ABNF); filter dialog shows existing terms as toggleable rows\n- Background polling with conditional GET and rate-limit backoff\n- Bulk feed management with select-all checkboxes\n- Import / export subscriptions as JSON\n- Catppuccin Mocha / Latte theme toggle; preference persists across restarts\n- Full-text `content:encoded` rendering for article feeds\n- Full keyboard navigation throughout: every control reachable and operable without a mouse; Enter and Space activate focused items; Left/Right navigate between buttons and dialog footer actions; amber focus ring on all focusable controls; Escape closes open drawers and dialogs\n\n## Single-device by design\n\nMeridian is deliberately a single-device application. It does not sync your subscriptions or read state to a cloud account or between machines, and it has no server component. This is a design choice, not a missing feature: the MMSP protocol it is built on is pull-only and treats read state as a client concern, so Meridian keeps all of that state local to the machine it runs on.\n\nTo move your subscriptions to another machine, use the File menu to export your subscriptions to a `feeds_export.json` file, then **File \u003e Import Feeds...** on the other machine. JSON export/import is the migration path; it is not live sync, and read state does not transfer.\n\n## License\n\nLGPL-3.0. See [ARCHITECTURE.md](ARCHITECTURE.md) for third-party licence notes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foernster%2Fmeridian","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foernster%2Fmeridian","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foernster%2Fmeridian/lists"}