COGITATOR :: /projects/vox-relay
> open_stc_fragment --designation=vox-relay

// STC fragment retrieved from forge archives

// Status: COMPILED — Machine spirit: SOMEWHAT COOPERATIVE


⚙ vox-relay

// classification: personal-forge · date: 2026 · language: rust

rust cli rss tui indie-web

ok so heres the thing. i like reading blogs. rss is great actually, its like the one part of the old web that survived the enshittification. but every rss reader is either a browser thing (boring) or some electron app that eats half your ram. i wanted something that lives in the terminal and looks cool. like, phosphor-green-text-on-black, vim-keys, the whole deal.

also i run a neocities site (youre looking at it lol) and i wanted a page that shows recent posts from my internet friends without me having to copy-paste links every week. so i built this.

what it actually does

you give it some rss/atom feed urls, it fetches em, and then you can either:

it tracks what youve read in a sqlite db so you dont see the same posts over and over. the db lives at ~/.config/vox-relay/state.db and the feed config is a toml file at ~/.config/vox-relay/feeds.toml. nothing fancy, just files in your config dir.

// what it looks like when you use it
$ vox-relay fetch
  blamensir  3 posts fetched
  espy.world  1 posts fetched
  sadgrl  5 posts fetched
Fetched 3 feeds — 9 new posts.

$ vox-relay read
// TUI opens. j/k to browse, space to mark read, q to quit.

$ vox-relay export --dir ../website_build/blogroll/
Blogroll exported to ../website_build/blogroll/blogroll.html

// now your neocities site has a blogroll page. neat.

tech stack (bc people always ask)

rust. i wanted to learn it and this seemed like a good excuse. uses clap for the CLI (derive macros are kinda magic), ureq for http (minimal, no async bc rss feeds dont need that), feed-rs for parsing the xml slop that rss/atom feeds send (this crate is doing the omnissiah's work honestly), ratatui + crossterm for the TUI (colors match this site's stylesheet exactly), and rusqlite for state tracking. plus serde, toml, chrono, the usual suspects.

things i might add later

get it / see the code

→ browse the source   (syntax-highlighted, right here on this site)

if you somehow have the source already (hi future me reading this):

// build and run
$ cd vox-relay
$ cargo build --release
$ ./target/release/vox-relay --help

// add some feeds
$ vox-relay add "blamensir" https://blamensir.neocities.org/feed.xml
$ vox-relay add "espy" https://espy.world/feed.xml

// fetch em and read
$ vox-relay fetch
$ vox-relay read

→ cd ..   (back to all STC fragments)

>