rss-cli 0.2.0

An AI-friendly, cache-backed RSS / Atom / JSON Feed CLI that also runs as an MCP server
Documentation
[package]
name = "rss-cli"
version = "0.2.0"
edition = "2024"
description = "An AI-friendly, cache-backed RSS / Atom / JSON Feed CLI that also runs as an MCP server"
license = "MIT OR Apache-2.0"
repository = "https://github.com/AnderEnder/rss-cli"
homepage = "https://github.com/AnderEnder/rss-cli"
documentation = "https://docs.rs/rss-cli"
readme = "README.md"
keywords = ["rss", "atom", "feed", "cli", "mcp"]
categories = ["command-line-utilities"]

[[bin]]
name = "rss"
path = "src/main.rs"

[lib]
name = "rss_cli"
path = "src/lib.rs"

[dependencies]
anyhow = "1.0.102"
chrono = "0.4.45"
clap = { version = "4.6.1", features = ["derive"] }
clap_complete = "4.6.5"
clap_mangen = "0.3.0"
directories = "6.0.0"
feed-rs = "2.3.1"
futures = "0.3.32"
htmd = "0.5.4"
html2text = "0.17.1"
opml = "1.1.6"
reqwest = { version = "0.13.4", default-features = false, features = ["rustls", "gzip", "charset", "http2"] }
rmcp = { version = "2.2.0", features = ["server", "macros", "transport-io"] }
schemars = "1.2.1"
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.150"
sha2 = "0.11.0"
thiserror = "2.0.18"
tl = "0.7.8"
tokio = { version = "1.52.3", features = ["rt-multi-thread", "macros", "fs", "io-std", "io-util", "signal", "sync", "time"] }
tracing = "0.1.44"
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
url = "2.5.8"

[dev-dependencies]
assert_cmd = "2.2.2"
insta = "1.47.2"
mockito = "1.7.2"
predicates = "3.1.4"
tempfile = "3"

# Optimized release binary. This CLI is I/O-bound (network fetches), so we optimize for a
# small binary rather than raw throughput, and keep full debuginfo in a sidecar file
# (*.dSYM on macOS, *.dwp on Linux) so the shipped binary can be stripped yet stay
# debuggable from a crash dump.
[profile.release]
codegen-units = 1           # one codegen unit: better cross-function opt, smaller binary
debug = "full"              # full debuginfo — emitted to a sidecar (see split-debuginfo)
lto = true                  # fat LTO across all crates (≡ lto = "fat")
opt-level = "s"             # optimize for size (this binary is I/O-bound, not CPU-bound)
panic = "abort"             # no unwinding tables; CLI aborts on panic (bigger win on nightly
                            # with -Zbuild-std-features=panic_immediate_abort)
split-debuginfo = "packed"  # debuginfo -> separate *.dwp/*.dSYM so the binary can be stripped
strip = "symbols"           # strip the shipped binary (debuginfo already lives in the sidecar)

# Fast local iteration on a release-like binary: same size/opt knobs, but incremental
# compilation, no LTO, and many codegen units so rebuilds are quick. NOT for distribution —
# CI ships the `release` profile above. Build with: cargo build --profile release-fast
[profile.release-fast]
inherits = "release"
incremental = true          # reuse prior codegen across rebuilds
lto = false                 # skip the slow whole-program link step
codegen-units = 256         # many units so incremental actually has granularity to reuse