Status and limitations

Status: Alpha — This is an early development release. Not production-ready. APIs and configuration may change.

What works today

The following features are implemented and functional in Ferron 3:

HTTP serving

FeatureModuleNotes
Static file servinghttp-staticroot, compression, ETags, directory listings, MIME types, precompressed sidecar files
Reverse proxyhttp-proxyproxy with load balancing, health checks, connection pooling, keepalive reuse, header manipulation
Forward proxyhttp-fproxyCONNECT method support with optional authentication
Compressionhttp-compressionOn-the-fly gzip, brotli, deflate, zstd based on Accept-Encoding; precompressed sidecar files
Rate limitinghttp-ratelimitToken bucket algorithm keyed on IP, URI, or request header
Headers and CORShttp-headersAdd, remove, replace headers; full CORS preflight handling
URL rewritinghttp-rewriteRegex-based rewrite with last, file, directory options
Basic authenticationhttp-basicauthArgon2, PBKDF2, scrypt password hashes with brute-force protection
Response controlhttp-responseCustom status codes, connection abort, IP block/allow, 103 Early Hints
Response body replacementhttp-replaceString replacement in response bodies with MIME type filtering, once mode, Last-Modified preservation
Variable mappinghttp-mapCreate variables from patterns (exact, wildcard, regex with captures) matched against source variables
HTTP bufferinghttp-bufferRequest and response body buffering with configurable byte limits
HTTP cachinghttp-cacheIn-memory response cache with RFC 9111 semantics, LSCache override, vary headers, private/public cache partitioning
CGI supporthttp-cgiSpawn external interpreters for scripts by extension or cgi-bin directory
FastCGI supporthttp-fcgiBinary protocol with connection pooling and keepalive for PHP-FPM and other FastCGI backends
SCGI supporthttp-scgiBinary protocol for application servers with TCP or Unix socket backends
Forwarded authenticationhttp-fauthForward authentication requests to external identity providers

TLS

FeatureModuleNotes
Manual TLStls-manualCertificate/key paths with environment variable interpolation
ACME automatic TLStls-acmeHTTP-01, TLS-ALPN-01, and DNS-01 challenges with caching and auto-renewal
DNS Providersdns-stalwartDNS-01 challenge support for Bunny, Cloudflare, deSEC, DigitalOcean, DNSimple, Google Cloud, OVH, Porkbun, RFC2136, Route 53, and Spaceship
OCSP staplingocsp-staplerAutomatic OCSP response fetching and stapling
mTLStls-manualClient certificate authentication with configurable trust store
Custom cryptotls-manualCipher suite selection, ECDH curves, TLS version restrictions
Session ticketstls-manualStateless TLS session resumption with automatic key rotation and file-backed persistence

Observability

FeatureModuleNotes
Console loggingobservability-consolelogStructured events to Ferron’s log output
File loggingobservability-logfileAccess and error logs with log rotation support
JSON formattingobservability-format-jsonJSON-serialized access log entries
Text formattingobservability-format-textCombined Log Format or custom text patterns
OTLP exportobservability-otlpLogs, metrics, and traces to OpenTelemetry collectors via gRPC or HTTP. See OTLP observability.
Process metricsobservability-process-metricsCPU and memory metrics from /proc/self/stat (Linux only)
Prometheus metricsobservability-prometheusExports metrics in Prometheus format via HTTP endpoint. See Prometheus metrics.

Admin and runtime

FeatureModuleNotes
Health endpointadmin-apiGET /health200 OK or 503 during shutdown
Status endpointadmin-apiGET /status — uptime, active connections, request count, reload count
Config dumpadmin-apiGET /config — sanitized effective configuration (sensitive fields redacted)
Hot reloadadmin-apiPOST /reload or SIGHUP — graceful configuration reload
io_uringruntimeLinux io_uring support with epoll fallback
PROXY protocolruntimePROXY protocol v1/v2 parsing from HAProxy and similar load balancers

Known limitations

  • Alpha quality — not battle-tested; expect bugs and configuration changes between releases.
  • All modules are compiled into the binary — no runtime plugin loading yet. Every module ships with the default build.
  • Primary testing target is Linux — Windows and macOS receive less coverage and may have edge-case issues.

Experimental features

  • HTTP/3 (QUIC) support — HTTP/3 is available via the protocols h3 directive but is experimental. When enabled, Ferron binds an additional UDP listener on the same port. This feature may change or be removed in future releases. See HTTP host directives for configuration details.

Roadmap

Planned direction for future releases:

  • Dynamically loadable modules (WebAssembly?)
  • Additional observability backends (Jaeger/Zipkin?)
  • More authentication methods (JWT?, OAuth2?)

Upgrading from Ferron 2

Ferron 3 is a complete rewrite. It shares the vision but not the code:

AspectFerron 2Ferron 3
ArchitectureMonolithicModule-driven, pluggable
ObservabilityBasic loggingStructured events with multiple backends
ConfigurationKDL-basedCustom .conf, layered scopes, snippets
ExtensibilityCompile-time modulesRuntime-registered stages and providers
Request ProcessingLinear pipelineDAG-ordered stages with inverse cleanup

Configuration files from Ferron 2 are not yet compatible with Ferron 3. See the configuration syntax page for the new format.

Contributing

Feedback, bug reports, and testing are welcome. When reporting issues, include your configuration file, --verbose output, and steps to reproduce.