- Fixed 4 broken markdown links (bad relative paths in See Also sections) - Corrected n8n port binding to 127.0.0.1:5678 (matches actual deployment) - Updated SnapRAID article with actual majorhome paths (/majorRAID, disk1-3) - Converted 67 Obsidian wikilinks to relative markdown links or plain text - Added YAML frontmatter to 35 articles missing it entirely - Completed frontmatter on 8 articles with missing fields Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
95 lines
2.7 KiB
Markdown
95 lines
2.7 KiB
Markdown
---
|
|
title: "FreshRSS — Self-Hosted RSS Reader"
|
|
domain: opensource
|
|
category: alternatives
|
|
tags: [freshrss, rss, self-hosting, docker, privacy]
|
|
status: published
|
|
created: 2026-04-02
|
|
updated: 2026-04-02
|
|
---
|
|
# FreshRSS — Self-Hosted RSS Reader
|
|
|
|
## Problem
|
|
|
|
RSS is the best way to follow websites, blogs, and podcasts without algorithmic feeds, engagement bait, or data harvesting. But hosted RSS services like Feedly gate features behind subscriptions and still have access to your reading habits. Google killed Google Reader in 2013 and has been trying to kill RSS ever since.
|
|
|
|
## Solution
|
|
|
|
[FreshRSS](https://freshrss.org) is a self-hosted RSS aggregator. It fetches and stores your feeds on your own server, presents a clean reading interface, and syncs with mobile apps via standard APIs (Fever, Google Reader, Nextcloud News). No subscription, no tracking, no feed limits.
|
|
|
|
---
|
|
|
|
## Deployment (Docker)
|
|
|
|
```yaml
|
|
services:
|
|
freshrss:
|
|
image: freshrss/freshrss:latest
|
|
container_name: freshrss
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8086:80"
|
|
volumes:
|
|
- ./freshrss/data:/var/www/FreshRSS/data
|
|
- ./freshrss/extensions:/var/www/FreshRSS/extensions
|
|
environment:
|
|
- TZ=America/New_York
|
|
- CRON_MIN=*/15 # fetch feeds every 15 minutes
|
|
```
|
|
|
|
### Caddy reverse proxy
|
|
|
|
```
|
|
rss.yourdomain.com {
|
|
reverse_proxy localhost:8086
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Initial Setup
|
|
|
|
1. Browse to your FreshRSS URL and run through the setup wizard
|
|
2. Create an admin account
|
|
3. Go to **Settings → Authentication** — enable API access if you want mobile app sync
|
|
4. Start adding feeds under **Subscriptions → Add a feed**
|
|
|
|
---
|
|
|
|
## Mobile App Sync
|
|
|
|
FreshRSS exposes a Google Reader-compatible API that most RSS apps support:
|
|
|
|
| App | Platform | Protocol |
|
|
|---|---|---|
|
|
| NetNewsWire | iOS / macOS | Fever or GReader |
|
|
| Reeder | iOS / macOS | GReader |
|
|
| ReadYou | Android | GReader |
|
|
| FeedMe | Android | GReader / Fever |
|
|
|
|
**API URL format:** `https://rss.yourdomain.com/api/greader.php`
|
|
|
|
Enable the API in FreshRSS: **Settings → Authentication → Allow API access**
|
|
|
|
---
|
|
|
|
## Feed Auto-Refresh
|
|
|
|
The `CRON_MIN=*/15` environment variable runs feed fetching every 15 minutes inside the container. For more control, add a host-level cron job:
|
|
|
|
```bash
|
|
# Fetch all feeds every 10 minutes
|
|
*/10 * * * * docker exec freshrss php /var/www/FreshRSS/app/actualize_script.php
|
|
```
|
|
|
|
---
|
|
|
|
## Why RSS Over Social Media
|
|
|
|
- **You control the feed** — no algorithm decides what you see or in what order
|
|
- **No engagement optimization** — content ranked by publish date, not outrage potential
|
|
- **Portable** — OPML export lets you move your subscriptions to any reader
|
|
- **Works forever** — RSS has been around since 1999 and isn't going anywhere
|
|
|
|
---
|