Snakeway v0.8.0
Highlights
New work_stealing server-level config option
See the Server Block reference for more details.
See the Server Block reference for more details.
config init TemplatesYou can now generate a fully structured configuration directory using built-in templates:
snakeway config init ./my-proxy --template=httpbin
Available templates:
minimal -- Barebones starting pointhttpbin -- Working reverse proxy exampledev -- Full-featured development setupGenerated structure:
my-proxy/ ├── device.d/ ├── ingress.d/ └── snakeway.hcl
This makes onboarding easier and removes guesswork when starting a new deployment.
config dump and config checkBoth commands now support consistent output formats using --format:
snakeway config check /etc/snakeway --format=json
snakeway config dump /etc/snakeway --format=hcl --repr=runtime
Supported formats:
hcljsonyamlYou can inspect either:
--repr=spec (your configuration files)--repr=runtime (internal resolved state)This improves automation, CI validation, and debugging workflows.
The include section has been standardized.
Old:
include {
devices = "devices.d/*.hcl"
ingress = "ingress.d/*.hcl"
}
New:
include {
devices = "device.d/*.hcl"
ingresses = "ingress.d/*.hcl"
}
Changes:
devices.d/ → device.d/ingress → ingressesIf upgrading, update both your snakeway.hcl and directory names.
The Identity device now exposes two configurable limits:
identity_device = {
max_x_forwarded_for_length = 1024
max_user_agent_length = 2048
}
These were previously hard-coded. Both are range validated and applied during parsing, improving safety against oversized or malicious headers.
Runtime logging is now controlled via environment variables:
RUST_LOGSNAKEWAY_LOG_DIRTOKIO_CONSOLEStructured observability remains available via the
structured_logging_device.
Spec and
Config typesInternal CLI modules moved from cli::conf to cli::config.
User-facing commands remain unchanged.
Snakeway now uses an internal HCL serializer that:
Many configuration fields now use:
#[serde(skip_serializing_if = "Option::is_none")]
This keeps generated configurations clean and avoids emitting default values unnecessarily.
Header mutation APIs are now gated behind the wasm feature.
They are only available when WASM support is enabled.
rust-embedEmbedded config templates have been removed.
Templates are now generated programmatically at runtime, reducing binary
size and improving clarity.
If upgrading:
In snakeway.hcl:
devices.d/ → device.d/include block to use ingressesIn your Identity device config file:
max_x_forwarded_for_lengthmax_user_agent_lengthNew built-in Network Policy device (L7 allow/deny by client identity)
network_policy_device to enforce CIDR-based allow/deny decisions at the HTTP layer.New built-in Request Rate Limiting device (L7)
request_rate_limiting_device to cap request volume per client over a rolling time window.Listener-level connection controls
bind block, so you can enforce them before requests even reach
routing/devices.WASM tooling renamed and clarified
Docs overhaul focused on “how to operate Snakeway”
/configuration/devices/*.Config scaffolding and templates
snakeway config init uses embedded templates to generate a starter config directory (useful for first-run setup
and repeatable environments).Config dump improvements
snakeway config dump supports emitting both “spec” (as-written config) and “runtime” (lowered internal
representation) to help debug what Snakeway actually loaded.Routing and service spec ergonomics
Dependency upgrades that matter to operators
Tests and fixtures refreshed
If you are upgrading from v0.5.4:
bind configuration (connection
filter / connection rate limiting).devices.d/.