// STC fragment retrieved from forge archives
// Status: COMPILED — Machine spirit: SOMEWHAT COOPERATIVE
// classification: personal-forge · date: 2026 · language: rust
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.
you give it some rss/atom feed urls, it fetches em, and then you can either:
vox-relay list if youre not
feeling the TUIblogroll.html page that matches this site's
terminal vibe. drop it into your neocities build folder, deploy, and suddenly
your website has a living feed of indie web posts. this is honestly the whole
reason i built itit 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.
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.
→ 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)