Tech Digest

Category

Feeds, bookmarks and read-it-later: pick for the export, not the reader

Every tool here exists because something else closed. That makes portability the first specification, not the last one, and OPML plus a readable archive format is the whole test.

5 tools profiledMedian idle memory 90 MBLast reviewed

Judge these tools on the way out, not the way in#

Google Reader closed in 2013 and created this entire category. Pocket was shut down by Mozilla in 2025. Omnivore went the same way. Even inside self-hosting, Hoarder renamed itself to Karakeep in 2025 and the old ghcr.io/hoarder-app/hoarder image stopped receiving updates, which is a smaller version of the same event.

So the first specification is not the reading experience. It is what the tool hands back when you leave, and how long that artifact stays readable.

Three answers, in order of durability. OPML is the strongest for feeds: every reader imports it, it is a few kilobytes, and it carries your subscription list and folders. It does not carry read state, filter rules or starred items, which is the right tradeoff, because your feed list is the part you cannot rebuild from memory. Self-contained HTML is the strongest for saved pages: a SingleFile snapshot with inlined assets opens in any browser in ten years with no server. Extracted plain text, which is what wallabag stores and exports as JSON, is smaller, uglier and just as durable.

What is weakest is a proprietary archive bundle that only its own importer can read.

The default#

Miniflux for feeds, linkding for bookmarks. Miniflux is one static Go binary with no plugin API and a maintainer who declines features deliberately, which is why 2.x has been boring for years in the good sense. linkding is one container, one SQLite file, ops load 1, and search results appear before you finish typing. Together they idle at roughly 130 MB, and both have a documented, scriptable export.

The cost is Miniflux's PostgreSQL requirement. There is no SQLite option and there never will be, so a one-container app becomes two containers, a pg_dump in your backup script and a database major-version upgrade to plan for.

There are two situations where that is the wrong call. Three people in the house want their own accounts, and half your feeds publish excerpts only: FreshRSS does per-feed scraping, filter rules and both the Google Reader and Fever APIs from one SQLite container at about 90 MB. You save PDFs, screenshots and images as often as links, and want search across their contents: Karakeep, at three containers and around 700 MB.

The mistakes#

  • No CRON_MIN on FreshRSS. The image starts no refresh cron without it. Nothing errors; new articles simply stop arriving.
  • Leaving Miniflux on LISTEN_ADDR=127.0.0.1:8080. That is the documented default, and inside a container it means your published port connects to nothing. Set 0.0.0.0:8080.
  • Forgetting RUN_MIGRATIONS=1. Without it a new Miniflux starts against an old schema and fails. Set it permanently, and take the dump before the pull, since migrations are forward-only.
  • Copying db.sqlite3 out of linkding. The documentation says outright that this is not transaction safe and can yield a corrupted database. Use manage.py full_backup, which zips the database and the data directory consistently, and open the zip once.
  • A 403 on every linkding login behind nginx. The Origin check fails when the proxy does not forward X-Forwarded-Proto and Host. Fix the headers or set LD_CSRF_TRUSTED_ORIGINS.
  • Turning on all three Karakeep archive options. CRAWLER_FULL_PAGE_ARCHIVE, CRAWLER_FULL_PAGE_SCREENSHOT and CRAWLER_STORE_PDF are off by default because each raises disk use sharply. With all three on, 5,000 bookmarks is tens of gigabytes.
  • Losing the Karakeep admin password. There is no CLI reset. The official answer is stopping the app and running an UPDATE against db.db in sqlite3.
  • Setting wallabag's SYMFONY__ENV__DOMAIN_NAME to a test URL. It is baked into every absolute link, including password reset emails, and changing it later means clearing var/cache too. Its default credentials are wallabag/wallabag, which are in every wordlist.
  • Unbounded retention. FreshRSS keeps articles until you tell it not to. Set a global and per-feed policy before the database gets slow.

FreshRSS vs Miniflux decides the reader question properly. Replace Feedly and Replace Pocket are the migration paths, including the OPML and CSV import steps. Then Backing up a running database for the Miniflux dump, and Backups that actually restore for proving the archive opens.

Every feeds tool we profile#

Sorted by operational load, lightest commitment first. Every row links to a full profile with the resource numbers, the upgrade traps and the restore path.

ToolOps loadIdle RAMLicenceIdentityBackup shape
linkding1, Set and forget90 MBMITNative OIDCSQLite backup
FreshRSS2, Light90 MBAGPL-3.0Native OIDCSQLite backup
Karakeep3, Moderate700 MBAGPL-3.0Native OIDCSQLite backup
Miniflux3, Moderate40 MBApache-2.0Native OIDCPostgres dump
wallabag3, Moderate180 MBMITAuth proxy onlySQLite backup

Profiles#

Head to head in this category#

Leaving a cloud service in this category#

Questions#

FreshRSS or Miniflux?

Miniflux if you want to stop thinking about your reader: one static Go binary, no plugin API, and a maintainer who refuses features on purpose. The cost is PostgreSQL, which is the only supported database, so a one-container app becomes two containers and a real dump-and-restore procedure. FreshRSS if you want configurability: SQLite in one container at about 90 MB, both the Google Reader and Fever APIs so essentially every mobile client works, and extensions that scrape full article text from excerpt-only feeds. Those extensions are third-party PHP in your process and are what breaks on upgrade.

What happens to my subscriptions if the reader shuts down?

If you exported OPML, nothing much: every reader here imports it and you are back in ten minutes. OPML carries your feed list and folder structure and nothing else, so read state, per-feed filter rules and starred items do not travel. That is fine, because the feed list is the part you cannot rebuild from memory. Schedule the export rather than intending it: both FreshRSS and Miniflux export OPML from the UI, and a monthly copy into the same place as your other backups costs a few kilobytes.

Why have my FreshRSS feeds stopped updating?

You almost certainly did not set CRON_MIN. The Docker image only starts its internal refresh cron when that variable is present, so without it FreshRSS looks perfectly healthy, logs nothing alarming, and simply stops showing new articles until someone triggers a refresh by hand. Set CRON_MIN=1,31 and confirm the last refresh time moves on the admin page. If you are on Miniflux instead, the equivalent surprise is batching: POLLING_FREQUENCY is 60 minutes and BATCH_SIZE is 100, so 400 feeds get checked roughly every four hours.

linkding or Karakeep?

linkding is one container, one SQLite file, about 90 MB, and it does tags, search and optional local HTML snapshots. Karakeep is three containers (app, Meilisearch, a headless Chrome), roughly 700 MB idle, and adds full-text search across the content of saved pages, PDF and image saving, and optional LLM tagging that needs either an OpenAI key or a separate Ollama host with around 5 GB of RAM or VRAM for a 7B-class quantized model. Choose Karakeep only if you save screenshots and PDFs as often as links.

Is wallabag still maintained?

Stable and slow, not abandoned. The last release was 2.6.14 in October 2025 and there has been no release since, so the published Docker image is roughly a year old as of September 2026. There is daily activity on master, mostly dependency maintenance, and wallabag 3.0 with its Symfony rebuild has still not landed years after it was announced. It works, it has mobile apps and browser extensions, and 2.6.14 specifically added Pocket CSV import. If a year between releases is unacceptable to you, that is a fair reason to look elsewhere.

What should I use now that Pocket is gone?

Mozilla shut Pocket down in 2025, and there are two shapes of replacement. wallabag is the direct one: it fetches the page, extracts the readable text, and keeps it, with EPUB, MOBI and PDF export and per-tag feeds for e-readers. Karakeep is the maximalist one: it stores the text plus a screenshot, a full-page archive and a PDF, which is the difference between kilobytes and several megabytes per saved item. Both import Pocket exports. Whichever you pick, turn on a scheduled JSON or archive export straight away.

Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.