Reader icon indicating copy to clipboard operation
Reader copied to clipboard

Reader is simple, small and fast news aggregator written in Rust.

Reader

Reader is simple, small and fast news aggregator written in Rust.

  • Available as a single static binary, no dependencies.
  • Responsive web UI.
  • Multiple sources.
  • Low CPU and memory usage.

screenshot

Features

Supported browsers: latest versions of Chrome, Firefox, Edge, Safari.

  • [x] Web UI
  • [ ] Mobile Web UI
  • [x] Multi-user
  • [x] Categories
  • [x] Read later
  • [x] Option to show only unread posts
  • [ ] Shortcuts
  • [ ] Category & feed management
  • [ ] User management

Sources

  • [x] RSS
  • [x] Atom
  • [ ] Hacker News Best
  • [ ] Twitter

Configuration

Reader can be configured with either Rocket.toml file or environment variables.

Example, which lists all possible configuration parameters and their defaults:

# Rocket.toml
[global]
address = "0.0.0.0"           # ROCKET_ADDRESS
port = 8000                   # ROCKET_PORT

# Path where SQLite database will be created
db_path = "db.sqlite"         # ROCKET_DB_PATH
# SQLite connection pool size
db_pool_size = 10             # ROCKET_DB_POOL_SIZE

# Whether Reader should periodically update all feeds
feeds_update_enabled = true   # ROCKET_FEEDS_UPDATE_ENABLED
# How long to wait between feed updates in minutes
feeds_update_interval = 10    # ROCKET_FEEDS_UPDATE_INTERVAL

# If set to true Reader will look for `fixture.sql` file and apply it to a database.
# As an example, it is used in development to load sample data.
# Alternatively it can be used to add any data you want to a database (i.e. create users).
# !!! Use cautiously !!!
load_fixture = false

Deployment

Check out docs/infrastructure.md on deployment notes.

Development

Requirements:

Optional:

  • insta (nice snapshot review/update workflow)
rustup default nightly
rustup component add rustfmt
cargo install cargo-make

# For user-friendly review of snapshots in integration tests, when they fail.
cargo install cargo-insta

Build process is orchestrated by cargo make. Check Makefile.toml to find out details behind these command.

Build release:

cargo make build

Verify:

cargo make verify

Verify (with automatic formatting and lint fixes):

cargo make fix
# or
cargo make

Notes:

  • Add ROCKET_LOAD_FIXTURE=true environment variable when running with cargo run to load sample data.

License

Licensed under GNU General Public License v3.0.