fomo
A personal newsreader.
Features
- Subscribe to RSS, Atom, and JSON feeds
- Read articles in a clean, distraction-free interface
- Manually mark articles as read, without doom-scrolling
- Bookmark articles for later
- Fetch feeds regularly while releasing new articles only at scheduled times
- Dark mode for those late-night reading sessions
- Self-hosted: no ads, no tracking, no paywalls
- No JavaScript: just server-rendered HTML
Usage
Use the docker image from ghcr.io/cugu/fomo:latest,
mount a custom configuration file to /app/fomo/config.json,
mount a volume to /app/fomo/data to store the database,
set the FOMO_PASSWORD environment variable to set the password for the service,
and expose the service on port 8080, e.g.:
docker run -d \
-p 8080:8080 \
-v ./config.json:/app/fomo/config.json \
-v ./fomodata:/app/fomo/data \
-e FOMO_PASSWORD=yourpassword \
ghcr.io/cugu/fomo:latest
Configuration
The configuration file is a JSON file with the structure shown below.
[!WARNING]
Comments are not allowed in the JSON file, they are only shown here for clarity.
{
// URL where the service is hosted
"base_url": "http://localhost:8080",
// Port to listen on
"port": 8080,
// How often to fetch feeds (defaults to 60 minutes)
"fetch_interval_minutes": 60,
// Times when fetched articles become visible
"release_times": [
7,
16
],
// List of feeds to subscribe to
"feeds": {
// simple RSS feed
"xkcd.com": {
"type": "rss",
"url": "https://xkcd.com/rss.xml"
},
// lobste.rs feed with custom type
"lobste.rs": {
"type": "lobsters"
},
// rss feed, with fetching of the linked content
"news.ycombinator.com": {
"type": "rss",
"url": "https://hnrss.org/frontpage?points=200",
"fetch_link_content": true
}
}
}
release_times uses whole hours in the server's local timezone. Automatically fetched articles remain hidden
until the next configured release time, when all waiting articles become visible. If no release times are configured,
automatic fetching is disabled. Manual feed fetches and articles ingested by URL are visible immediately.
For backwards compatibility, update_times is accepted as a deprecated alias for release_times. If both are
configured, release_times takes precedence.
Screenshots
List of articles

Article view
