rws
Static file web server written in Rust. Supports HTTP/3, HTTP/2, and HTTP/1.1. HTTP/3 and HTTP/2 require a TLS certificate; without one the server falls back to plain HTTP/1.1 automatically.
Install
This installs the rws binary with HTTP/3, HTTP/2, and TLS support included.
Run
Plain HTTP/1.1
Starts on http://127.0.0.1:7878 by default. Place your files in the working directory and open the URL in a browser.
HTTPS + HTTP/2 + HTTP/3
Generate a self-signed certificate for local development:
Start the server with the certificate:
Open https://127.0.0.1:7878 in a browser. The server listens on the same port for both TCP (HTTP/1.1 and HTTP/2 via ALPN) and UDP (HTTP/3 via QUIC). HTTP/2 and HTTP/3 are negotiated automatically — no extra configuration needed.
For a public domain, obtain a certificate from Let's Encrypt.
Custom address and port
See CONFIGURE for all configuration options (env vars, config file, command-line flags).
Build from source
The binary is at target/release/rws.
To build with HTTP/2 only (no QUIC/HTTP/3):
To build HTTP/1.1 only (smallest binary, no TLS):
Features
- HTTP/3 over QUIC (UDP) — negotiated via
Alt-Svc - HTTP/2 with ALPN negotiation alongside HTTP/1.1 on the same TCP port
- TLS via rustls (aws-lc-rs backend, no OpenSSL)
- CORS — allowed for all origins by default, fully configurable
- HTTP Range Requests — partial file serving and multi-range responses
- HTTP Client Hints
X-Content-Type-Options: nosniffandX-Frame-Optionsheaders- Symlink resolution
.htmlextension inference —/pageservespage.html;/dirservesdir/index.html- No caching headers — files are always served fresh
- Request/response logging to stdout
Further reading
- CONFIGURE — all configuration options
- FAQ — common problems and solutions
- DEVELOPER — building, testing, and contributing
- src/README.md — module-level documentation