Skip to main content

Crate feather_reader

Crate feather_reader 

Source
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 — the community.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.
SessionRegistry
In-memory session registry: opaque random session-id → Session.

Constants§

USER_AGENT
The User-Agent FeatherReader identifies itself with when fetching feeds.
VERSION
The crate version — surfaced for the server’s --version / health output.