We’re so excited to introduce the first beta version of Ferron 3 - a new version of a fast, modern, easily configurable web server that is Ferron.
The release focuses on making the configuration more predictable, improving observability (simplifying troubleshooting and debugging) and making Ferron easier to run in real-world environments.
Why Ferron 3?
Even though Ferron 2 worked well for many setups, we have found some problems appearing:
- debugging issues could be unclear
- configuration behavior wasn’t always obvious
- observability was limited when things went wrong
Ferron 3 focuses on addressing those problems directly.
Debug production without guessing
One of the biggest improvements in Ferron 3 is observability.
Ferron now provides:
- structured logs
- Prometheus metrics
- OpenTelemetry (OTLP) support
That means you can not only see when something fails, but also when thing are working as expected.
For example, automated TLS now reports both failures and successful events like certificate issuance and renewal, so you’re no longer left wondering whether everything is working silently in the background.
The goal is simple: When something breaks, you should be able to understand why.
Configuration without surprises
Ferron 3 introduces a more explicit configuration model.
Instead of relying on implicit inheritance and ordering rules, configuration is now structures in a way that makes behavior easier to reason about. What you write is what happens.
This does make some configurations slightly more verbose than Ferron 2, but in return you get:
- clearer intent
- fewer hidden interactions
- more predictable behavior in complex setups
For example, for load balancing with passive health checks, in Ferron 2 you would write this:
example.com {
proxy "http://localhost:3000/"
proxy "http://localhost:3001/"
lb_health_check
}While in Ferron 3, you would write this:
example.com {
proxy {
upstream http://localhost:3000
upstream http://localhost:3001
lb_health_check
}
}In Ferron 3, reverse proxy-related subdirectives are grouped under proxy directive.
Built for real-world workloads
We have tested Ferron 3 against real-world scenarios before the release. While we did it, we have found (and fixed) some issues, such as:
- routing inconsistencies
- reverse proxy edge cases
- TLS handling bugs
- logging and observability gaps
These fixes came directly from running Ferron in an actual production environment.
Ready to run anywhere
Ferron 3 also improves the operation experience. It now includes:
- Docker images
- Linux packages (.deb and .rpm)
- a Windows installer with service support
- cross-platform archive builds
The goal is to make Ferron easy to install and run, no matter what your environment is.
Migrating from Ferron 2
Ferron 3 also introduces a new configuration format, so upgrading requires a migration step.
A migration tool is included with Ferron 3 to help translate Ferron 2 configurations into Ferron 3 ones.
After running the tool, you should review the generated configuration, especially around routing and matching behavior, and validate it before switching over.
For more information about migrating configuration, read the relevant documentation.
Beta status
Please note that this is a beta release.
We have tested Ferron 3 in real-world environments and stabilized it, but you may still experience issues. If you do, feedback is very welcome; it will directly shape the final release.
Try it
- Documentation: https://ferron.sh/docs/v3
- GitHub repo: https://github.com/ferronweb/ferron/tree/develop-3.x
Install Ferron 3 using the installer:
sudo bash -c "$(curl -fsSL https://get.ferron.sh/v3)"