Expand description
FeatherReader — a minimalist, atproto-native RSS/Atom feed reader.
Your feed subscriptions live in your own atproto PDS
(via the open community.lexicon.rss.* community lexicon), so your reading
list follows you across any compatible reader — you own your data, not the
app. Minimalist by design.
This crate ships as a single server binary (featherreader) plus this small
library, which declares the module tree and the shared types the binary and
its subsystems build on. The heavy lifting lives in sibling modules:
config— env-driven runtime configuration (FEATHERREADER_*).lexicon— thecommunity.lexicon.rss.*record schemas (subscription, folder, saved, readState) as serde types.store— the per-DID SQLite cache + read-state working copy (sqlx, runtime queries).feed— polite fetching (conditional GET, backoff), feed-rs parsing, and ammonia sanitization.atproto— the atproto identity + PDS record layer (subscriptions, folders, saved, batched read-state sync). Live repo writes go through the OAuth confidential-client sidecar (atproto::SidecarClient).web— the axum router + askama server-rendered views.
Status: experimental / pre-1.0. See https://feather-reader.com.
Modules§
- atproto
- The atproto identity + PDS record layer.
- config
- Runtime configuration for the FeatherReader server.
- feed
- Feed fetch → parse → sanitize → store pipeline.
- lexicon
- Serde types for the
community.lexicon.rss.*atproto record schemas. - net
- Hardened outbound HTTP for untrusted, user-supplied feed URLs.
- store
- SQLite persistence layer (via
sqlx, runtime queries). - web
- The axum web layer — server-rendered HTML + a dash of htmx, no SPA.
Structs§
- AppState
- Shared application state handed to every axum handler.
- Session
- One logged-in identity, resolved from the OAuth sidecar and keyed by DID.
- Session
Registry - In-memory session registry: opaque random session-id →
Session.
Constants§
- USER_
AGENT - The
User-AgentFeatherReader identifies itself with when fetching feeds. - VERSION
- The crate version — surfaced for the server’s
--version/ health output.