A fast, memory-safe web server written in Rust. https://ferron.sh
Find a file
Dorian Niemiec e2feefcd38 fix: fix compilation errors under Windows due to missing
`set_reuse_port` method
2025-12-06 16:27:29 +01:00
.github Revert "ci: create temporary Ferron 2 Docker image release workflow" 2025-12-03 20:25:28 +01:00
.shiba chore: use cargo shear in the pre-commit hook [skip ci] 2025-10-12 17:38:58 +02:00
.zed chore: add debug task for Zed 2025-11-24 09:56:31 +01:00
assets feat: add initial support for external Ferron modules 2025-07-27 10:30:11 +02:00
blog chore: release Ferron 2.2.1 2025-12-05 18:43:45 +01:00
build-prepare build(build-prepare): add support for external observability backends 2025-12-01 12:50:15 +01:00
dockertest build(deps): bump express in /dockertest/tests/rproxy/backend 2025-12-01 23:10:28 +00:00
docs docs: add a configuration example for reverse proxying with intact 2025-12-05 16:45:31 +01:00
ferron fix: fix compilation errors under Windows due to missing 2025-12-06 16:27:29 +01:00
ferron-common chore: release Ferron 2.2.1 2025-12-05 18:43:45 +01:00
ferron-dns-builtin chore: release Ferron 2.2.1 2025-12-05 18:43:45 +01:00
ferron-load-modules chore: release Ferron 2.2.1 2025-12-05 18:43:45 +01:00
ferron-modules-builtin chore: release Ferron 2.2.1 2025-12-05 18:43:45 +01:00
ferron-observability-builtin chore: release Ferron 2.2.1 2025-12-05 18:43:45 +01:00
ferron-passwd chore: release Ferron 2.2.1 2025-12-05 18:43:45 +01:00
ferron-precompress chore: release Ferron 2.2.1 2025-12-05 18:43:45 +01:00
ferron-yaml2kdl chore: release Ferron 2.2.1 2025-12-05 18:43:45 +01:00
ferron-yaml2kdl-core chore: release Ferron 2.2.1 2025-12-05 18:43:45 +01:00
packaging build: allow packaging RPM packages on architectures other than the 2025-10-31 16:55:37 +01:00
smoketest build: format and fix the PowerShell scripts [skip ci] 2025-10-10 12:27:35 +02:00
website Merge branch 'develop-2.x' into 2.x 2025-12-05 18:47:48 +01:00
wwwroot fix: replace corrupted favicon for Ferron default page 2025-10-26 17:39:52 +01:00
.dockerignore chore: ignore ferron.kdl and copy a configuration from another file instead [skip ci] 2025-10-10 17:23:22 +02:00
.gitignore build: add RPM package build files 2025-10-30 14:56:04 +01:00
build.ps1 chore: ignore ferron.kdl and copy a configuration from another file instead [skip ci] 2025-10-10 17:23:22 +02:00
Cargo.lock chore: update Monoio 2025-12-06 12:29:20 +01:00
Cargo.toml chore: ignore ferron-observability-builtin crate in cargo shear 2025-11-30 12:03:49 +01:00
CODE_OF_CONDUCT.md chore: change email domain to "ferron.sh" 2025-09-10 16:08:44 +02:00
COMPILATION.md docs: add more examples for observability backend support in compilation 2025-12-01 12:57:19 +01:00
CONTRIBUTING.md chore: remove some remnants of the old domain name 2025-11-24 13:29:43 +01:00
Cross.toml build: use non-interactive apt frontend 2025-10-11 15:02:02 +02:00
Dockerfile build: optimize Dockerfiles for better caching 2025-10-12 12:39:08 +02:00
Dockerfile.alpine build: optimize Dockerfiles for better caching 2025-10-12 12:39:08 +02:00
Dockerfile.debian build: fix missing target directory for Debian-based Dockerfiles 2025-10-12 13:02:18 +02:00
Dockerfile.test build: fix missing target directory for Debian-based Dockerfiles 2025-10-12 13:02:18 +02:00
ferron-build.yaml feat: add support for OTLP logs 2025-11-27 18:24:23 +01:00
ferron-docker.kdl fix: fix flipped access and error log filenames in the default server 2025-09-28 12:57:47 +02:00
ferron-packages.kdl chore: refine the comments in the packages Ferron configuration 2025-10-22 19:48:26 +02:00
ferron-release.kdl feat: add support for non-host global configurations 2025-07-14 09:06:43 +02:00
ferron-test.kdl chore: ignore ferron.kdl and copy a configuration from another file instead [skip ci] 2025-10-10 17:23:22 +02:00
LICENSE chore: update the copyright text in LICENSE 2025-03-01 23:27:01 +01:00
Makefile build: add RPM package build files 2025-10-30 14:56:04 +01:00
MODULES.md docs: add mention about the example observability backend support in 2025-12-01 23:18:14 +01:00
README.md build: add RPM package build files 2025-10-30 14:56:04 +01:00
renovate.json chore: configure Renovate 2025-10-19 15:38:52 +02:00
rustfmt.toml chore: configuire the maximum line width in rustfmt and format Rust 2025-07-15 18:08:35 +02:00
SECURITY.md chore: remove some remnants of the old domain name 2025-11-24 13:29:43 +01:00

Ferron logo

Ferron - a fast, memory-safe web server written in Rust

Static Badge Website Chat X (formerly Twitter) Follow Docker Pulls GitHub Repo stars


Features

  • High performance - built with Rusts async capabilities for optimal speed.
  • Memory-safe - built with Rust, which is a programming language offering memory safety.
  • Extensibility - modular architecture for easy customization.
  • Secure - focus on robust security practices and safe concurrency.

Components

Ferron consists of multiple components:

  • ferron - the main web server.
  • ferron-passwd - a tool for generating hashed passwords, which can be copied into the web server's configuration file.
  • ferron-precompress - a tool for precompressing static files for Ferron.
  • ferron-yaml2kdl - a tool for attempting to convert the Ferron 1.x YAML configuration to Ferron 2.x KDL configuration.

Ferron also consists of:

  • build-prepare - internal tool for preparation when building Ferron with modules.
  • ferron-common - code common for Ferron and its modules.
  • ferron-dns-builtin - built-in Ferron DNS providers.
  • ferron-load-modules - functions for loading Ferron modules.
  • ferron-modules-builtin - built-in Ferron modules.
  • ferron-yaml2kdl-core - the core library behind the ferron-yaml2kdl tool.

Building Ferron from source

You can clone the repository and explore the existing code:

git clone https://github.com/ferronweb/ferron.git
cd ferron

You can then build and run the web server using Cargo:

cargo run --manifest-path build-prepare/Cargo.toml
cd build-workspace
cargo update # If you experience crate conflicts
cargo build -r --target-dir ../target
cd ..
cp ferron-test.kdl ferron.kdl
target/release/ferron

You can also, for convenience, use make:

make build # Build the web server
make build-dev # Build the web server, for development and debugging
make run # Run the web server
make run-dev # Run the web server, for development and debugging
make smoketest # Perform a smoke test
make smoketest-dev # Perform a smoke test, for development and debugging
make package # Package the web server to a ZIP archive (run it after building it)
make package-deb # Package the web server to a Debian package (run it after building it)
make package-rpm # Package the web server to an RPM package (run it after building it)

Or a build.ps1 build script, if you're on Windows:

REM Build the web server
powershell -ExecutionPolicy Bypass .\build.ps1 Build

REM Build the web server, for development and debugging
powershell -ExecutionPolicy Bypass .\build.ps1 BuildDev

REM Run the web server
powershell -ExecutionPolicy Bypass .\build.ps1 Run

REM Run the web server, for development and debugging
powershell -ExecutionPolicy Bypass .\build.ps1 RunDev

REM Perform a smoke test
powershell -ExecutionPolicy Bypass .\build.ps1 Smoketest

REM Perform a smoke test, for development and debugging
powershell -ExecutionPolicy Bypass .\build.ps1 SmoketestDev

REM Package the web server to a ZIP archive (run it after building it)
powershell -ExecutionPolicy Bypass .\build.ps1 Package

You can also create a ZIP archive that can be used by the Ferron installer:

make build-with-package

Or if you're on Windows:

powershell -ExecutionPolicy Bypass .\build.ps1 BuildWithPackage

The ZIP archive will be located in the dist directory.

You can also cross-compile the web server for a different target:

# Replace "i686-unknown-linux-gnu" with the target (as defined by the Rust target triple) you want to build for
make build TARGET="i686-unknown-linux-gnu" CARGO_FINAL="cross"

It's also possible to use only Cargo to build the web server, although you wouldn't be able to use external modules:

cargo build -r
./target/release/ferron

For compilation notes, see the compilation notes page.

Modules

If you would like to develop Ferron modules, you can find the Ferron module development notes.

Server configuration

You can check the Ferron documentation to see configuration properties used by Ferron.

Contributing

See Ferron contribution page for details.

License

Ferron is licensed under the MIT License. See LICENSE for details.