1
0
Fork 0
mirror of https://github.com/ferronweb/ferron.git synced 2026-04-15 02:04:05 -07:00
A fast, memory-safe web server written in Rust. https://ferron.sh
  • Rust 94.6%
  • Shell 2.7%
  • PowerShell 0.9%
  • Dockerfile 0.7%
  • CSS 0.4%
  • Other 0.7%
Find a file
Dorian Niemiec 060b85e319
Merge pull request #606 from ferronweb/dependabot/github_actions/develop-2.x/docker/login-action-4.1.0
build(deps): bump docker/login-action from 4.0.0 to 4.1.0
2026-04-10 09:11:33 +02:00
.github build(deps): bump docker/login-action from 4.0.0 to 4.1.0 2026-04-08 11:59:17 +00:00
.shiba Merge branch 'develop-2.x' into 2.x 2026-02-10 16:19:11 +01:00
.zed test: add initial partial E2E test suite rewrite 2026-03-24 09:17:16 +01:00
assets chore: use darker link color for light mode for better accessibility 2026-02-14 19:13:27 +01:00
build build(deps): bump toml in /build/prepare 2026-04-08 11:59:59 +00:00
configs docs: reorganize the Ferron documentation file structure 2026-02-16 16:18:26 +01:00
docs chore: release Ferron 2.7.0 2026-03-27 14:56:57 +01:00
e2e build(deps): bump path-to-regexp in /e2e/images/backend 2026-03-28 19:27:20 +00:00
ferron chore: update dependencies to latest versions 2026-04-09 09:12:28 +02:00
ferron-common build(deps): bump hyper from 1.8.1 to 1.9.0 2026-04-01 14:22:27 +00:00
ferron-dns-builtin chore: update dependencies to latest versions 2026-04-09 09:12:28 +02:00
ferron-load-modules chore: release Ferron 2.7.0 2026-03-27 14:56:57 +01:00
ferron-modules-builtin perf: add compression quality level to static file serving for gzip and 2026-04-06 17:45:09 +02:00
ferron-observability-builtin build(deps): bump hyper from 1.8.1 to 1.9.0 2026-04-01 14:22:27 +00:00
ferron-passwd chore: release Ferron 2.7.0 2026-03-27 14:56:57 +01:00
ferron-precompress chore: release Ferron 2.7.0 2026-03-27 14:56:57 +01:00
ferron-yaml2kdl chore: release Ferron 2.7.0 2026-03-27 14:56:57 +01:00
ferron-yaml2kdl-core chore: release Ferron 2.7.0 2026-03-27 14:56:57 +01:00
installer chore(installer): add LTS option in install for preparation for Ferron 2 2026-03-26 20:43:15 +01:00
manualtest fix: don't rewrite Host header in reverse proxy for plaintext HTTP 2026-02-25 10:57:45 +01:00
packaging fix: suppress some stderr in RPM post hook 2026-03-14 09:52:10 +01:00
smoketest test: fix smoke test reverse proxy header settings 2026-03-10 06:32:47 +01:00
wwwroot chore: slightly refresh Ferron logo 2026-03-15 09:18:07 +01:00
.dockerignore chore: remove the old dockertest E2E test suite 2026-03-24 15:12:46 +01:00
.gitignore test: add initial partial E2E test suite rewrite 2026-03-24 09:17:16 +01:00
.rumdl.toml chore: add documentation linting in Git hooks and GitHub Action workflow 2026-02-01 06:42:29 +01:00
AGENTS.md docs: create AGENTS.md file for AI coding agents 2026-03-26 15:42:52 +01:00
build.ps1 feat: add initial support for vibeio async runtime 2026-03-22 07:32:20 +01:00
Cargo.lock chore: update dependencies to latest versions 2026-04-09 09:12:28 +02:00
Cargo.toml Revert "fix: use patched tm-wheel crate" 2026-03-24 21:09:05 +01:00
CHANGELOG.md fix: fix 403 instead of 404 responses for non-existent paths when URL 2026-03-27 16:40:39 +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 the old dockertest E2E test suite 2026-03-24 15:12:46 +01:00
CONTRIBUTORS.svg chore: update contributors [skip ci] 2026-03-18 09:51:55 +00:00
Cross.toml build: fix ARM64 cross-compilation for tcmalloc 2026-03-22 10:34:55 +01:00
Dockerfile build: fix Dockerfiles that utilize musl libc to compile tcmalloc 2026-03-22 14:44:53 +01:00
Dockerfile.alpine build: fix Dockerfiles that utilize musl libc to compile tcmalloc 2026-03-22 14:44:53 +01:00
Dockerfile.debian chore: move build directories into a new build directory 2026-02-12 10:25:40 +01:00
Dockerfile.test chore: move build directories into a new build directory 2026-02-12 10:25:40 +01:00
ferron-build.yaml feat: add DNSimple DNS provider 2026-03-14 10:04:27 +01:00
LICENSE chore: update the copyright date in the license 2026-01-01 11:30:12 +01:00
Makefile feat: add initial support for vibeio async runtime 2026-03-22 07:32:20 +01:00
MODULES.md docs: add mention about the example observability backend support in 2025-12-01 23:18:14 +01:00
README.md docs: reorganize the Ferron documentation file structure 2026-02-16 16:18:26 +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, modern, and easily configurable web server with automatic TLS


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

Why Ferron?

  • High performance - thoroughly optimized for speed with support for high concurrency.
  • Memory-safe - built with Rust, which is a programming language that can offer strong memory safety guarantees.
  • Automatic TLS - automatic SSL/TLS certificate acquisition and renewal with Let's Encrypt integration.
  • Easy configuration - simple, intuitive configuration with sensible, secure defaults and comprehensive documentation.
  • Extensibility - modular architecture for easy customization.
  • Powerful reverse proxy - advanced reverse proxy capabilities with support for load balancing and health checks.

Installing Ferron from pre-built binaries

The easiest way to install Ferron is installing it from pre-built binaries.

Below are the different ways to install Ferron:

Configuration examples

Basic static file serving

// Example configuration with static file serving. Replace "example.com" with your domain name.
example.com {
    root "/var/www/html" // Replace "/var/www/html" with the directory containing your static files
}

Basic reverse proxying

// Example configuration with reverse proxy. Replace "example.com" with your domain name.
example.com {
    proxy "http://localhost:3000/" // Replace "http://localhost:3000" with the backend server URL
}

More examples

You can find more configuration examples for common use cases in the Ferron documentation.

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 configs/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)
make installer # Build installers for Ferron 2

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

REM Build installers for Ferron 2
powershell -ExecutionPolicy Bypass .\build.ps1 Installer

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.

Below is a list of contributors to Ferron. Thank you to all of them!

Contributor list

License

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