Skip to content

Self-host FreshRSS

updated Sep 2026prices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →

A free, self-hosted RSS aggregator — fast, themeable, and extensible, with built-in scraping for sites that dropped their feeds. Owns your reading, ad-free.

Key facts

CategoryRSS reader
LicenseAGPL-3.0
StackPHP
Min RAM256 MB
Official imageyes
Measured idle RAM16 MB
Difficulty
Our recommendation

Pick FreshRSS when you want a full-featured web reader — themes, extensions, built-in scraping for pages that dropped their feed, a Google Reader-compatible API for mobile apps — on the smallest possible box: upstream says its "requirements are really low" and it "should run on most shared host servers". It is AGPL-3.0 PHP; the official image is Apache + PHP with SQLite by default and PostgreSQL 10+ or MariaDB 10.6+/MySQL 8+ as options. If you would rather have a single Go binary with no extensions and no scraping, Miniflux is the opinionated alternative — but it makes Postgres mandatory.

What you need

  • Any VPS with at least 256 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# FreshRSS — official Docker README "Quick run" (rolling :edge channel; :latest is the versioned release)
# CRON_MIN is off by default — without it feeds never refresh on their own
docker run -d --restart unless-stopped --log-opt max-size=10m \
  -p 8080:80 \
  -e TZ=Europe/Paris \
  -e CRON_MIN=1,31 \
  -v freshrss_data:/var/www/FreshRSS/data \
  -v freshrss_extensions:/var/www/FreshRSS/extensions \
  --name freshrss \
  freshrss/freshrss:edge
# open http://SERVER_IP:8080 to complete the installation in the web UI

What you take on

FreshRSS is easy to run and easy to run wrong; the Docker README names the traps:

non-negotiableFeeds do not refresh on their own. The built-in cron is off by default — "CRON_MIN: (default is disabled)" — and our snippet does not set it, so nothing updates until you add -e CRON_MIN=1,31 (the README's example) or run app/actualize_script.php from a host cron. The script will not refresh any feed more than once every twenty minutes, so scheduling it more often is wasted.
non-negotiableFirst visit runs the web installer; there is no default account. Finish it in the browser, or drive it with the FRESHRSS_INSTALL and FRESHRSS_USER env vars, which take CLI arguments for cli/do-install.php and user creation.
non-negotiable1.30.0 (September 2026) is a breaking security release: it "disallow[s] access to local networks such as 127.0.0.1 by default". If you pull feeds from other services on your LAN or Docker network, allow them under System configuration or with INTERNAL_HOST_ALLOWLIST; * restores the old behaviour and upstream labels it unsafe.
non-negotiableBehind a reverse proxy set TRUSTED_PROXY to the proxy's ranges and, for sub-path hosting, send X-Forwarded-Prefix. Mobile apps need two switches: the admin option "Allow API access (required for mobile apps)" and a separate per-user API password set in each profile — check /api/ → "Check full server configuration" before blaming the app.
non-negotiable:latest is "the latest versioned release" and :edge is the rolling git branch; our snippet pulls untagged, i.e. latest, though upstream's 1.30.0 notes recommend edge for faster security patches. The 256 MB floor is our estimate — FreshRSS publishes no RAM figure, only the "really low" statement.

An alternative to

Head-to-head

More self-hosted tools

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.