README.md
Rama develop-3.x · réplica de lectura del repositorio original.
<a href="https://ferron.sh" target="_blank">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="wwwroot/assets/logodark.svg">
<img alt="Ferron logo" src="wwwroot/assets/logo.svg" width="192">
</picture>
</a>
# **Ferron** - a fast, modern web server built for production debugging.
[](https://ferron.sh/docs)
[](https://ferron.sh)
[](https://matrix.to/#/#ferronweb:matrix.org)
[](https://x.com/ferron_web)
[](https://hub.docker.com/r/ferronserver/ferron)
[](https://github.com/ferronweb/ferron)
English | [Polski](./README.pl.md)
## Why Ferron?
Built to set up quickly, behave predictably, and hold up reliably in production.
- **Readable configuration**: set up websites and reverse proxies with a clear, compact config that avoids sprawl and hidden surprises.
- **Automatic TLS**: certificates are issued and renewed automatically. You get clear signals when it works (or doesn't).
- **First-class observability**: see exactly what happened with any request, even without having to do much configuration. Traces cover every layer and link directly to the relevant logs. You can even search for trace IDs inside log files to see what happened in each request.
- **Predictable performance**: fast and consistent under load, right out of the box. No runtime tuning required.
- **Memory-safe**: entire categories of memory-related security holes simply don't exist in Ferron (it's built with [Rust](https://rust-lang.org/)).
- **Reliable in production**: handles messy real-world traffic, upstream failures, and protocol edge cases predictably.
> [!tip]
> Ferron is designed around two core principles: **ease of setup** (get a working config in minutes) and **ease of debugging** (when something goes wrong, find the root cause fast).
## Configuration examples
### Static file serving
```ferron
example.com {
root "/var/www/html"
# If uncommented, directory listing is enabled.
#directory_listing
}
```
### Reverse proxy
```ferron
api.example.com {
proxy http://localhost:8080
}
```
More examples are available in the [configuration documentation](https://ferron.sh/docs/configuration/fundamentals/syntax).
## Installing Ferron (pre-built)
The most convenient way to get started with Ferron is to use the installer script for Linux:
```sh
sudo bash -c "$(curl -fsSL https://get.ferron.sh/v3)"
```
See the full instructions in the [Linux installation documentation](https://ferron.sh/docs/installation/linux/installer).
## Building from source
```sh
git clone https://github.com/ferronweb/ferron -b develop-3.x
cd ferron
git submodule update --init --recursive
cargo build --workspace
```
Run the server:
```sh
cargo run -p ferron -- run -c ferron.conf
cargo run -p ferron -- run -c ferron.conf --verbose # with debug logging
```
Other CLI commands:
```sh
cargo run -p ferron -- validate -c ferron.conf # validate without starting
cargo run -p ferron -- adapt -c ferron.conf # output config as JSON
cargo run -p ferron -- daemon -c ferron.conf --pid-file /var/run/ferron.pid # Unix daemon
```
Run tests and checks:
```sh
cargo test --workspace
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
```
Package Ferron for distribution (requires `just`):
```sh
just package # Archive (.zip for Windows, .tar.gz for Unix)
just package-deb # Debian package
just package-rpm # RPM package
just package-windows # Windows installer
just installer # Linux installer
```
Cross-build optimized binaries for Ferron (see [README for the build files](./cross-build/README.md); available on Linux only):
```sh
just cross-build
```
## Configuration
The full directive reference is in [docs/configuration/](https://ferron.sh/docs/configuration/fundamentals/syntax).
## Contributing
Feedback, bug reports, and testing are welcome. When reporting issues, include your configuration file, `--verbose` output, and steps to reproduce. See [CONTRIBUTING.md](./CONTRIBUTING.md) for setup, checks, and guidelines.
## License
MIT. See `LICENSE` for details.