3.1.0 Release Notes
This page summarizes the major changes introduced after v3.0.0. The stable release is listed first, followed by the release-candidate fixes and the principal beta milestones.
Nauthilus 3.1.0 makes native Go plugins a production-ready extension surface, adds privacy-aware GeoIP and reputation intelligence, hardens OIDC, SAML, MFA, cache, and plugin boundaries, and improves authentication-path observability and latency. It also completes mixed passkey/security-key support and reliable MFA self-service continuations.
3.1.0
Released on August 3, 2026.
This stable release promotes v3.1.0-rc.11 without additional code changes after the final release candidate. Use it as the stable 3.1 upgrade target for deployments on the 3.0 line.
Added
Native Go plugin platform
- A versioned
pluginapi/v1contract now covers plugin loading, registration, configuration, reload lifecycle, capabilities, request snapshots, policy facts, subject sources, backends, hooks, obligations, and detached post-actions. - Capability-oriented host services provide bounded access to configuration, logging, metrics, tracing, HTTP, Redis, LDAP, mail, connections, credentials, and supervised background work.
- Native extensions can participate in the same policy and runtime exchange used by Lua integrations without receiving mutable server internals.
- Bundled reference plugins cover GeoIP, Have I Been Pwned, and ClickHouse workflows, including signature verification and image-build integration.
Privacy and reputation intelligence
- GeoIP processing adds local country, city, ASN, organization, prefix, registry, allocation, and routability data without requiring a remote lookup for every request.
- Redis-backed reputation and free network-intelligence feeds expose policy-safe subject facts for IP, ASN, country, and shared-egress decisions.
- Shared-egress brute-force controls can combine request behavior with reputation evidence instead of penalizing every user behind the same address equally.
- ClickHouse analytics include bounded GeoIP, reputation, policy-decision, failed-login, and latency context.
Observability
- HTTP and gRPC authentication response latency is measured at comparable outer transport boundaries with bounded protocol and outcome labels.
- Authority RPC completion and response-boundary latency metrics separate client-visible work from detached post-actions.
- Post-action latency, native plugin module selection, and trace ownership are observable without extending synchronous authentication timing.
Security
Identity Provider and MFA
- OIDC client authentication, token audience/type handling, device authorization, introspection, and configured PKCE boundaries fail closed.
- Public Authorization Code clients continue to require PKCE with
S256; confidential clients can opt in withrequire_pkce: true. - SAML federation controls, request validation, attribute release, and sensitive assertion output were tightened.
- MFA assurance is enforced at sensitive boundaries, while recovery-code, TOTP, and WebAuthn self-service operations preserve the account-bound step-up continuation.
- WebAuthn ceremonies retain authenticator attachment, transport, and extension metadata so platform passkeys and roaming security keys can coexist under one RP policy.
Runtime and data boundaries
- Sensitive configuration, authentication, SAML, hook, trace, log, metric, and error output is filtered more consistently.
- Lua SQL, LDAP, ClickHouse, decompressed HTTP body, async hook, client, and native plugin boundaries now apply explicit size, ownership, and failure controls.
- Password-derived cache and plugin values use the canonical lowercase 64-character SHA-256 digest. Only integration-specific bounded exports, such as the established ClickHouse field, shorten a validated digest.
- Authentication caches use collision-safe full hashes and re-evaluate request-local controls instead of reusing mutable response state.
Changed
Compatibility and performance
- The Go module path is
github.com/croessner/nauthilus/v3; native plugins must use the v3pluginapi/v1import path and be rebuilt for the exact Nauthilus release toolchain and dependency graph. - Declarative policy evaluation, snapshot exchange, password-history loading, post-action scheduling, and GeoIP processing avoid unnecessary clones and synchronous work.
- Backend references used by gRPC deployments are opt-in, and copied IdP backend lookup contexts cannot mutate client responses.
- LDAP health checks share the normal LDAPS/StartTLS CA, SNI, and client-certificate setup while remaining transport-only probes.
Upgrade Notes
- Rebuild every native Go plugin against
github.com/croessner/nauthilus/v3/pluginapi/v1and the exact 3.1.0 toolchain and module graph. Do not reuse a.sobuilt for another Nauthilus binary. - Keep plugin signature verification fail closed in production and provision the configured verification keys before enabling modules.
- Review native plugin capabilities and module selectors; grant only the host services each module actually needs.
- If a confidential OIDC client must use PKCE, add
require_pkce: trueand verifyS256end to end. Public clients remain PKCE-mandatory. - Re-test passkey and security-key registration/login policies after the upgrade, especially attachment, resident-key, user-verification, extension, and transport handling.
- Update consumers of password-derived plugin values to accept the canonical 64-character lowercase SHA-256 form. Validate before deriving an integration-specific short field.
- Revalidate LDAP health checks with the same CA, SNI, StartTLS/LDAPS, and mTLS settings used by normal backend connections.
- Compare authentication latency by transport and outcome after rollout; detached post-action time is intentionally reported separately from the client-visible boundary.
See Native Go Plugins, the Go Plugin Developer Guide, OIDC Configuration, and MFA Assurance Policy for the frozen 3.1 contracts.
3.1.0-rc.11
Released on August 3, 2026.
Fixed
- Native Lua-context representations are preserved across plugin runtime bridges so brute-force and RBL controls cannot panic on normalized values.
- Account-bound WebAuthn rename requests survive one-time MFA step-up and execute only after the fresh browser session is established.
- Focused panic, continuation, and single-save browser regressions cover the final self-service path.
3.1.0-rc.10
Released on August 2, 2026.
Fixed
- Expired MFA self-service sessions are distinguished from invalid IdP flows so users can recover safely.
- Passkey rename submissions use browser-native form handling with localized redirects.
- Step-up and rename persistence are covered by focused handler and browser tests.
3.1.0-rc.9
Released on August 2, 2026.
Fixed
- Configured authenticator selection is applied consistently to WebAuthn registration and login ceremonies.
- Browser attachment, extension, and transport metadata is preserved with stored credentials.
- Regression coverage verifies mixed platform-passkey and roaming-security-key policies.
3.1.0-rc.8
Released on July 27, 2026.
Security
google.golang.org/grpcwas updated to 1.82.1 and the vendored dependency set was refreshed and revalidated.
3.1.0-rc.7
Released on July 26, 2026.
Security
- OIDC clients can set
require_pkce: true; authorization requests for those clients are rejected unless they use PKCE withS256. - Mandatory PKCE for public clients remains unchanged.
3.1.0-rc.6
Released on July 23, 2026.
Fixed
- LDAP health probes share CA, SNI, client-certificate, LDAPS, and StartTLS configuration with normal LDAP connections.
- Health checks remain explicitly transport-only and preserve connection close semantics.
3.1.0-rc.5
Released on July 20, 2026.
Fixed
- Copied IdP backend lookup contexts disable response mutations.
- The shared plugin response boundary is guarded before any Gin writer access.
3.1.0-rc.4
Released on July 17, 2026.
Added
- HTTP and gRPC authentication response latency uses comparable outer transport boundaries, bounded labels, and millisecond-focused histogram buckets.
3.1.0-rc.3
Released on July 16, 2026.
Added
- Authority RPC completions and client-visible response latency are measured before detached post-actions are released.
3.1.0-rc.2
Released on July 15, 2026.
Fixed
- Declarative policy allowlists preserve dotted usernames after Viper map-key expansion.
- The RBL soft allowlist is exposed through the native configuration schema.
3.1.0-rc.1
Released on July 15, 2026.
This release candidate consolidated the 3.1 beta line for stable validation and made gRPC backend references explicitly opt-in.
Beta Milestones
The 3.1 beta line was intentionally iterative. The milestones below identify the compatibility and operational boundaries most relevant to upgrades; later candidates include all earlier beta work.
Native plugins and module compatibility
v3.1.0-beta.1introduced GeoIP reputation facts and ClickHouse enrichment.v3.1.0-beta.5required signed bundled GeoIP plugins in stable images.v3.1.0-beta.8moved the Go module path and generated contracts togithub.com/croessner/nauthilus/v3.v3.1.0-beta.20throughv3.1.0-beta.34completed native policy producers, action/post-action parity, runtime exchange, dependency handling, subject-source cache behavior, debug selection, and detached trace continuity.v3.1.0-beta.48throughv3.1.0-beta.51completed prerequisite contracts, Lua parity, subject dependencies, and LDAP worker-pool routing.
Security and identity continuity
v3.1.0-beta.12closed security findings across sensitive output, OIDC/SAML, MFA, decompression, Lua, database, and plugin boundaries.v3.1.0-beta.13throughv3.1.0-beta.19repaired OIDC reentry, introspection, MFA step-up state, forced enrollment, localization, and WebAuthn registration continuations.
Performance, privacy, and analytics
v3.1.0-beta.23throughv3.1.0-beta.44reduced password-history, cache, policy, snapshot, and GeoIP overhead; separated detached post-action latency; and added privacy-aware network/reputation signals.- Native and Lua ClickHouse paths converge on the same validated analytics schema and derive the established eight-character
password_hashfield only from the canonical full digest.