Tech Digest

Migration

Replace Feedly with a reader you host

This is the easiest migration on the site and the one people most often do badly, because OPML carries your subscriptions and none of your reading history.

Last reviewed

What is the best self-hosted alternative to Feedly?

FreshRSS if you want filter rules, several users and full-content scraping for feeds that publish excerpts. Miniflux if you want a reader you never think about again. The biggest thing you give up is discovery: Feedly's search index of millions of feeds has no self-hosted equivalent, so finding new sources becomes a manual job of hunting for feed URLs.

Feeds are the one category where the open format actually works. OPML has been portable since 2000, every reader imports it, and you can move a thousand subscriptions in about ninety seconds. That is exactly why people underestimate the parts that do not move.

What you are actually giving up#

Discovery. Feedly indexes millions of feeds and lets you search them by topic, keyword or site name. Type "self-hosting" and you get sources. Neither FreshRSS nor Miniflux has any of that: you paste a URL, and if you do not have a URL you go looking through someone's blogroll. Over a year this changes what you read, and not for the better. If finding new sources is how you use Feedly, that is a real loss and no feature on this page compensates for it.

AI filtering. Feedly Leo deduplicates near-identical stories, mutes topics, and prioritizes by relevance. FreshRSS has filter rules and, since 1.29.0 in May 2026, a bundled LLM classification extension for auto-tagging, which is closer than it used to be but still a manual ruleset rather than a trained model. Miniflux has keyword filters and nothing else, on purpose.

Polling freshness. Feedly polls popular feeds from its own infrastructure at high frequency, so a breaking story arrives in minutes. Your reader polls on a schedule you set. Miniflux defaults to a 60 minute POLLING_FREQUENCY and a BATCH_SIZE of 100 feeds per interval, so with 400 feeds and defaults a given feed is checked roughly every four hours regardless of any per-feed setting you chose. That is fixable by raising BATCH_SIZE, and it is not obvious until you notice everything is stale.

Non-RSS sources. Feedly turns newsletters, Reddit, YouTube channels and Twitter accounts into feeds for you. Some of that you can reproduce with public RSS endpoints, some needs a bridge service, and some of it is simply gone.

Get your data out first#

  1. Open https://feedly.com/i/opml, or from the web app use Settings then OPML.
  2. Download the .opml file. It contains your feed URLs and your folder names, encoded as nested <outline> elements.
  3. Open it in a text editor and count: grep -c 'xmlUrl' feedly.opml. That number is the only thing that will survive.

What is not in that file: read and unread state, starred articles, Boards, notes, highlights, article tags, Leo priorities, per-feed polling preferences and the "read later" pile. There is no separate export that brings those, so treat anything saved in Feedly as something to move by hand now or lose. If you have a Board you care about, open each item and save it to wallabag or linkding before you cancel. That is tedious and it is the only route.

Also worth doing before you migrate: prune. Import is a good moment to notice that 200 of your 400 feeds have not published since 2022. Both readers show a last-published date per feed, and both will happily keep polling dead domains forever.

Which one to run#

The choice is not about features in the usual sense, it is about whether you want a reader you tune or a reader you ignore. FreshRSS is a PHP app with an extension directory and a large settings surface, and it invites fiddling; that is a feature if you follow excerpt-only feeds and need CSS-selector scraping to get the article body, and a liability if you do not. Miniflux is one static Go binary whose author refuses features on principle, which is why 2.x has been boring for years in the best sense. FreshRSS vs Miniflux has the side by side.

Your situationRunWhy
Several people, each with their own feeds and unread countsFreshRSSReal multi-user with per-user accounts, feeds and filter rules
Many feeds publish excerpts and you want the full textFreshRSSPer-feed scraping with CSS selectors, plus full-content extensions
You want to install it once and never open the settings againMinifluxNo plugin API, no themes, no scraping rules, nothing to tune
You already run PostgreSQL for something elseMinifluxOne more database rather than one more stack
You are on shared PHP hosting or a LAMP boxFreshRSSRuns on SQLite in one container, or on your existing MariaDB
Reading is only half of it and you archive articlesMiniflux plus wallabagIt saves into wallabag in one keystroke rather than pretending to archive
You want feeds on a dashboard, not in a readerGlanceOne Go binary and a YAML file, 25 MB, no reader at all

What the migration actually costs#

  • 20 to 40 minutes to stand up either one. FreshRSS is one container with a /var/www/FreshRSS/data volume and CRON_MIN set. Miniflux is two containers, and there are three variables that decide whether it works at all: LISTEN_ADDR=0.0.0.0:8080 because the documented default binds to the container's own loopback, RUN_MIGRATIONS=1 so schema changes apply on boot, and CREATE_ADMIN=1 on first start.
  • 5 minutes to import the OPML.
  • 1 to 2 hours over the following week: refiling folders, killing dead feeds, tuning per-feed intervals, and setting up a phone client.
  • Ongoing: almost nothing, with one exception. Set an article retention policy immediately. Both keep articles until you tell them not to, and with full-content scraping enabled on a few dozen busy feeds the database grows steadily and SQLite in particular gets slow before it gets alarming.

You now personally maintain: one container, one database, and a backup. On FreshRSS that is the data/ directory plus extensions/, taken with the container stopped or via sqlite3 .backup rather than a live file copy. On Miniflux it is a pg_dump and literally nothing else, because Miniflux keeps no local state at all. Backing up a running database covers why the live copy is the trap.

What breaks and how to tell early#

  • Phone reading. Set up a client on day one. Point it at your instance from mobile data, not from your home Wi-Fi, or you will discover in week three that your reader only works at home.
  • Offline. Neither server does offline. Your client does, or it does not. Test it in airplane mode with a full unread list.
  • Sharing an article with someone. Feedly gave you a public URL. Your instance is private, so sharing means sending the original link, which is usually fine, or exposing a filtered feed publicly, which is a proxy configuration job.
  • Browser extensions. Feedly's "subscribe to this site" button has partial equivalents. FreshRSS ships a bookmarklet and there are community extensions; Miniflux has a bookmarklet too. Neither is as smooth.
  • Silent staleness. This is the failure mode that actually loses people. A reader that stops refreshing looks identical to a quiet news week. Put an uptime check on the instance and, better, check the last-refresh timestamp weekly for the first month.

The point of no return#

Feedly's free tier keeps working, so unlike a shutdown you can take your time. Cancel Pro when:

  1. You have read exclusively from your own instance for two full weeks, including a week where you were busy and did not want to fiddle with anything.
  2. Your phone client works from outside your network.
  3. You have restored a backup onto a second machine and seen your feed list appear. Export an OPML from your own instance on a schedule too: it is the format-independent escape hatch, and it costs one cron line.
  4. Anything you had saved in a Feedly Board is now somewhere else.

The test that matters is the third one. A feed reader is low stakes right up to the moment you have curated 600 sources over four years and the disk dies.

Next#

If saving articles is half of what you used Feedly for, Replace Pocket covers the read-later side properly, including the difference between archiving and bookmarking. Check the whole category in Feeds, and read Backups that actually restore before you import.

Questions#

FreshRSS or Miniflux?

FreshRSS when you want to tune things: per-feed filter rules, CSS-selector scraping for excerpt-only feeds, several user accounts, and an extension system. Miniflux when you want the opposite: one static Go binary, a feature list the author actively refuses to extend, and nothing to configure. The catch is inverted from what people expect. FreshRSS runs on SQLite in one container, while Miniflux requires PostgreSQL and there will never be a SQLite option.

Does OPML carry my read articles and saved items?

No. OPML is a list of feed URLs and folder names. Read and unread state, starred or saved articles, Feedly Boards, notes, highlights, tags and any Leo priority rules are not in the file and there is no other export that brings them. Plan to arrive at an empty reader with every article marked unread, and mark all as read on day one.

Why are my feeds not updating?

On FreshRSS the answer is almost always CRON_MIN. The Docker image only starts its refresh cron if you pass that variable, so leave it unset and the app looks healthy, logs nothing and quietly stops showing new articles. Set CRON_MIN=1,31 and confirm the last refresh time moves on the admin page. On Miniflux, check POLLING_FREQUENCY and BATCH_SIZE instead, because the scheduler only queues a batch of feeds per interval.

Can I still read on my phone?

Yes, and this is where self-hosted feed reading is genuinely strong. FreshRSS serves both the Google Reader API and the Fever API, so nearly every client already works. Miniflux has its own REST API plus Fever support, with FluxNews, Miniflutt, Microflux, Fleuron and Lire built against it, and NetNewsWire, NewsFlash, Read You, RSS Guard and Newsboat all speak Miniflux. You do need the server reachable from your phone.

How do I get full articles from feeds that only publish a summary?

FreshRSS does it natively with per-feed CSS selectors and full-content extensions, which is the single strongest reason to pick it. Miniflux refuses that job by design and instead hands articles off, with one-keystroke saves into wallabag, linkding, Pinboard or Shaarli. Decide which model you want before you install, because it is the actual difference between the two.

How much does a feed reader cost to run?

FreshRSS idles at about 90 MB in one container and its own README benchmarks 150 feeds and 22,000 articles on a Raspberry Pi 1. Miniflux is 40 MB, but you have to add PostgreSQL beside it, which wants 150 MB or more with default settings, so the total is higher despite the smaller app. Both are cheaper than a Feedly Pro subscription within the first month.

Sources#

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