High-throughput NNTP proxy written in Rust.
nntp-proxy sits between NNTP clients and one or more backend servers. It gives you a single local endpoint while handling backend selection, pooling, authentication, optional caching, and metrics in one place.
- Shares multiple backend servers across multiple clients
- Pools and reuses backend connections instead of having every client open its own
- Supports backend auth, outbound TLS, health checks, and connection limits
- Tracks article availability and can optionally cache article bodies
- Runs as one binary:
nntp-proxy
Client-facing connections are plain NNTP only. TLS support is for outbound backend connections, not for the local listener.
Historical benchmark notes are retained in CHANGELOG.md and the archive docs. Treat them as release evidence, not current guarantees. See docs/development.md for the current benchmark workflow.
Hybrid is the default routing mode. per-command and stateful remain available as explicit modes. Details are in docs/operator/runtime-and-routing.md.
devenv shell cargo build --release
cp config.minimal.toml config.toml
./target/release/nntp-proxy --config config.tomlInstall devenv. For automatic activation,
install its native shell hook (for zsh, add eval "$(devenv hook zsh)" to
~/.zshrc) and run devenv allow once in the repository root. You can always
use devenv shell <command> without the hook. Packaging and cross-platform
release commands continue to use Nix; see Development.
Then edit config.toml so [[servers]] points at a real backend and connect your NNTP client to localhost:8119 unless you changed [proxy].port.
MIT