A tiny RSS aggregator built for Raspberry Pi Zero and up, running 32-bit
Raspberry Pi OS (Bullseye / Bookworm Lite or Desktop). Runs happily on a
Pi Zero W with 512 MB RAM — Tkinter for the UI, feedparser for parsing,
and a JSON file on disk for feed storage.
- Add feeds by pasting a URL — no OPML importer, no cloud sync, no telemetry.
- Refresh button force-refetches every feed (bypassing ETag / If-Modified-Since caching) so it really pulls fresh content; the background timer still does polite conditional GETs every 15 minutes.
- Full-text articles — when a feed only ships an excerpt, the app
fetches the article URL on click and runs Readability-style extraction
(via
readability-lxml, à la FiveFilters Full-Text RSS) to pull the main body. Cached back toarticles.jsonso it happens once per article. - Article list with title, source, published-at, and an inline preview pane.
- Image thumbnails are downscaled and compressed to keep RAM use flat.
- Notification chime is a tiny bundled WAV (~2 KB) played via
aplay. - Reader-mode preview strips scripts and inline styles for a clean read.
- Feed store lives in
~/.feedmesomepi/feeds.json; article cache inarticles.json— delete either to reset.
git clone https://github.com/eagnespuerto/FeedMeSomePi.git
cd FeedMeSomePi
./setup.shsetup.sh installs the two system packages the app needs
(python3-tk, python3-pil.imagetk), sets up a virtualenv, installs
feedparser + requests, and drops a desktop entry into
~/.local/share/applications/ so FeedMeSomePi shows up under
Internet in the PiOS menu. On a Pi Zero the whole thing takes a
couple of minutes.
Click Internet → FeedMeSomePi in the PiOS menu, or from a terminal:
./run.shOr, if you prefer to activate the venv yourself:
. .venv/bin/activate
python3 rss_aggregator.pyPaste a feed URL into the box at the top and hit Add. If the URL is a
site homepage rather than a feed, the app tries the common autodiscovery
paths (/feed, /rss, /atom.xml, and <link rel="alternate"> tags in
the HTML) before giving up.
./uninstall.shLeaves the venv, saved feeds, and article cache in place. Delete the
repo directory and ~/.feedmesomepi/ for a full wipe.
Pi Zero (single-core ARM11, 512 MB) sets the ceiling. Everything in this repo is chosen to fit under it:
- Tkinter ships with Raspberry Pi OS — no Qt/GTK download, no Electron.
- JSON storage — no SQLite dependency; the feed list is tiny.
- Text-only article cache — parsed article metadata (title, summary
text, link, published, seen) is persisted to
~/.feedmesomepi/articles.jsonso the app opens with content instantly and background refresh is delta-only. Audio enclosures and full-size images are never stored; thumbnails live separately as small JPEGs. - Compressed assets — thumbnails are resized to 96×96 with PIL and cached to disk; the notify sound is a mono 8-bit WAV.
- Background refresh runs on a single worker thread with a cap on
concurrent requests so we don't thrash the CPU.
ETag/If-Modified-Sinceconditional GETs avoid re-downloading unchanged feeds altogether.
MIT — see LICENSE.