No description
Find a file
Jeena 41312f48f3 window: only mark articles as read when navigating away
Previously the sidebar immediately showed an article as read the
moment it was selected, while the server was only notified when
the user moved to the next article.  Align the two: mark the
previous article as read in both the sidebar and on the server
at the same time, when the user navigates away from it.
2026-03-28 22:57:04 +00:00
data build: regenerate window.ui from blueprint 2026-03-22 04:22:21 +00:00
html ui: overhaul sidebar, add content filters and state improvements 2026-03-21 01:13:01 +00:00
src window: only mark articles as read when navigating away 2026-03-28 22:57:04 +00:00
.gitignore app: implement Epics 2–10 2026-03-20 11:57:06 +00:00
.travis.yml Add deploy step 2019-03-31 10:25:10 +02:00
build.rs ui: overhaul sidebar, add content filters and state improvements 2026-03-21 01:13:01 +00:00
Cargo.lock feature: cache article images for offline reading 2026-03-21 01:19:49 +00:00
Cargo.toml feature: cache article images for offline reading 2026-03-21 01:19:49 +00:00
COPYING scaffold: Epic 1 — project scaffold 2026-03-20 11:22:19 +00:00
install.sh data: replace generated SVG icon with original PNG 2026-03-21 12:27:13 +00:00
README.md docs: fix image caching description in README 2026-03-21 12:47:06 +00:00

FeedTheMonkey

Icon

FeedTheMonkey is a desktop client for any server that implements the Greader API.

It doesn't work as a standalone feed reader — it connects to a server to fetch articles and sync read state.

It follows the river of news philosophy: all unread articles appear in a single flat list and are automatically marked as read as you flip through them one by one.

Features

  • River of news: all unread articles in one flat list, auto-marked as read as you flip through them one by one
  • Offline reading: article content and images are cached locally so you can read without a connection
  • Image caching: images are pre-fetched after each reload; can be disabled in preferences and is always skipped on metered connections
  • Offline sync: read/unread state changes made offline are queued and pushed to the server next time you're online
  • Persistent state: the article list, selected article, and scroll position are restored when you reopen the app
  • Dark mode: follows the system color scheme automatically
  • Keyboard navigation: vi-style shortcuts for hands-free reading
  • Zoom: adjustable content zoom, persisted across restarts
  • Fullscreen and toggleable sidebar

When logging in, enter:

  • FreshRSS: https://example.com/api/greader.php
  • Miniflux: https://example.com
  • Other compatible servers: consult your server's documentation for the Greader API endpoint

Dependencies

Runtime

  • GTK 4 (gtk4)
  • libadwaita (libadwaita)
  • WebKitGTK 6 (webkitgtk-6.0)
  • GLib / GIO (glib-2.0, gio-2.0)

On Arch Linux: sudo pacman -S gtk4 libadwaita webkitgtk-6.0

Build

  • Rust toolchain (rustup / cargo)
  • blueprint-compiler — compiles .blp UI files to .ui
  • glib-compile-schemas — compiles GSettings schemas (part of glib2)
  • glib-compile-resources — compiles GResource bundles (part of glib2)

On Arch Linux: sudo pacman -S blueprint-compiler glib2

Building

cargo build --release

The binary is at target/release/feedthemonkey.

Installing

sudo ./install.sh

This installs the binary, icon, desktop entry, and GSettings schema to /usr/local. Set PREFIX to install elsewhere:

sudo PREFIX=/usr ./install.sh

Trivia

This is version 3 of FeedTheMonkey, rewritten in Rust with GTK4 and libadwaita. Version 2 was written in C++ with Qt and QML, and version 1 in PyQt — you can find them in the v2 and v1 branches of this repo.

Screenshot

FeedTheMonkey screenshot

Keyboard shortcuts

Key Action
j or Next article
k or Previous article
Return Open in browser
r Reload
F11 Toggle fullscreen
Ctrl+W Quit
Ctrl++ Zoom in
Ctrl+- Zoom out
Ctrl+0 Reset zoom

License

Copyright 20152026 Jeena

FeedTheMonkey is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.