Ferron 3.0.0-beta.8 released

Published on:

Today, we’re releasing Ferron 3.0.0-beta.8, the eighth beta release of Ferron 3.

This is a smaller, focused release. After several betas centered on observability and reverse proxy resilience, beta.8 turns attention to the configuration format itself — ferron.conf — tightening up a correctness gap and adding syntax that makes writing configuration by hand, or generating it programmatically, noticeably less fiddly.

The default error pages, directory listings, and installation landing page also pick up Ferron’s new brand identity in this release, ahead of it landing everywhere else alongside the 3.0 stable release. More on that below.

Breaking change: unknown escape sequences are now errors

Previously, an escape sequence Ferron’s lexer didn’t recognize — \z, \$, and so on — was silently passed through as-is. In beta.8, this now produces a parse error instead.

This is most likely to affect regex patterns written as quoted strings, since regex syntax uses backslashes for things the config lexer has no reason to know about. If you have configuration relying on the old silent pass-through behavior, the fix is straightforward: switch to a raw string literal (below), which does no escape processing at all.

Raw string literals

New r"..." syntax defines a string with zero escape processing — whatever’s between the quotes is used exactly as written. This is the direct answer to the breaking change above, and it’s most useful for regex:

example.com {
    # Before: relied on unrecognized escapes silently passing through
    match APIV1 {
        request.uri.path ~ r"^/api/v1(?:/|$)"
    }
    
    if APIV1 {
        # ...
    }
}

Raw strings don’t support variable interpolation, which is the trade-off for not needing to think about escaping at all.

Line continuation

A backslash at the end of a line now joins it with the next line, letting long directives span multiple lines instead of forcing everything onto one:

example.com {
    # This is just an example directive
    example_proxy http://localhost:3000 \
      http://localhost:3001
}

Useful for anything with a long list of arguments — upstream lists, header sets, or DNS provider configuration — where a single unbroken line becomes hard to review in a diff.

Optional semicolons

Semicolons can now appear between statements and between host patterns as an optional delimiter. Ferron doesn’t require them — the format is still whitespace/newline-delimited by default — but if you’re generating ferron.conf output from a script or another tool that naturally emits semicolon-terminated statements, you no longer need to strip them out first.

Idiomatic style, and less quoting overall

Documentation now consistently uses what we’re calling the idiomatic ferron.conf style: bare (unquoted) strings wherever possible, bare boolean flags (io_uring rather than io_uring true), raw string literals for regex, and 4-space indentation throughout. None of this is enforced by the parser — it’s a style convention, not a rule — but it’s what you’ll see in the docs and examples going forward.

That style is easier to hit now that bare strings accept a wider character set without needing to be quoted: ., :, *, -, +, /, %, &, ?, and @ can all appear directly in an unquoted value. URLs, paths, and glob-style patterns in particular need noticeably fewer quotes than before.

Default pages get Ferron’s new look

The built-in error pages, directory listings, and installation landing page (wwwroot) have been redesigned to match Ferron’s new brand identity — new mark, new palette, new type — which we wrote about separately: Ferron has a new look.

The short version: the old lightning-bolt-in-a-hexagon mark and high-contrast orange are being replaced with an identity built around Ferron’s actual architecture (thread-per-core scheduling, rendered as three uneven strokes settling into one steady line), a quieter graphite-and-teal palette, and IBM Plex throughout. The full rollout — website, GitHub org, social previews — lands alongside the 3.0 stable release; beta.8’s default pages are the first place you’ll see it in the software itself.

Fixed

Duplicate observability block warningferron doctor was emitting the same warning about duplicate observability blocks more than once per occurrence. It now reports each issue a single time.

Looking ahead

Beta.8 is a smaller release, but the configuration format work closes out a rough edge that’s been sitting since the format was introduced, and the new default pages are a preview of what’s coming with the rest of the brand rollout. Between this and the resilience and observability work over the last several betas, Ferron 3 continues moving toward a release candidate and, eventually, a stable 3.0.

As always, feedback, bug reports, and testing results are welcome.

Full changelog

The complete changelog for Ferron 3.0.0-beta.8 is available in the release notes.

Try it

Install Ferron 3 using the installer:

sudo bash -c "$(curl -fsSL https://get.ferron.sh/v3)"