#Nauthera's difference
Nauthera's difference is where the client lives: its operator turns an OIDCClient
manifest into a registered client, delivers a secret the server generated and keeps only
as a digest, and reports a client changed elsewhere as Drifted instead of overwriting it.
Nauthera is pre-1.0, in a design-partner program: its signed server and operator images and its Helm chart are public on the GitHub Container Registry, and teams can apply for one of five design-partner seats to pilot it with direct support. The source is private. The tools below are past their 1.0; for a production deployment
before Nauthera's, pick one of them.
Each row about another tool names the release that was current on November 4, 2026, and
links where the fact was read that day; a link to a repository's default branch is that
branch as it was on that day. Two pages go further:
Keycloak and Nauthera, criterion by criterion, and
Keycloak with Terraform, or an operator, one client through
both workflows.
#Prior art, and where Nauthera differs
The client resource is part of the provider itself, not an add-on to one; the server
generates each secret, keeps only its digest, and the operator writes it into a Secret, so
no secret is supplied by hand or kept in a state file; and a client changed outside the
operator is reported as Drifted and left alone until someone restores it.
Others declare clients as custom resources too:
- Ory Hydra Maester watches
oauth2clients.hydra.ory.sh/v1alpha1 resources and
writes each client's ID and secret into a Secret. Its README says it "is developed by
the Ory community and is not actively maintained by Ory core maintainers"
(README; latest tag
v0.0.42, May 25, 2026).
- Crossplane provider-keycloak manages Keycloak clients as
openidclient.keycloak.crossplane.io resources, generated with Upjet from the Keycloak
Terraform provider (README;
v3.2.3, October 19, 2026).
- truvity/zitadel-operator, a third-party operator for Zitadel, declares
OIDCApp
resources and writes client_id and client_secret into a Secret
(pkg.go.dev; v0.21.0,
September 6, 2026).
- Keycloak's own operator added
KeycloakOIDCClient and KeycloakSAMLClient
resources as an experimental feature in 26.7.0 and promoted them to preview in 26.8.0
(release notes,
Managing clients; Keycloak 26.8.1).
#Side by side
#Runtime and database
| Tool | Runtime and database |
|---|
| Nauthera | The server is one static Go binary in a scratch image for amd64 and arm64, running as non-root on a read-only root filesystem with every Linux capability dropped, and so is the operator. It runs on PostgreSQL, with Redis for any production issuer, and sends no telemetry. |
| Keycloak 26.8.1 | Java: the server image runs OpenJDK 21 (release notes, 26.6.0). Its sizing guide starts from 1,250 MB of memory per pod (sizing). PostgreSQL, MySQL, MariaDB, Oracle, Microsoft SQL Server and others, which you provision yourself (databases, operator). |
| Dex v2.46.1 | Storage in etcd, Kubernetes custom resources, SQLite3, PostgreSQL or MySQL; SQLite3 "is not appropriate for real workloads" (storage). |
| authentik 2026.8.5 | PostgreSQL only, since Redis was removed in 2025.10 (2025.10 notes). Docker Compose needs at least 2 CPU cores and 2 GB of RAM (Compose install). |
| Ory Hydra v26.2.0 | Binaries of 5 to 15 MB "without system dependencies"; PostgreSQL, MySQL or CockroachDB (README). |
| Zitadel v4.20.1 | PostgreSQL 14 or later (README). |
#Protocols
| Tool | Protocols it serves to applications |
|---|
| Nauthera | OAuth 2.0 and OpenID Connect, with PKCE, pushed authorization requests and DPoP. It does not serve SAML, SCIM provisioning, user import or token exchange (RFC 8693); users sign in through OpenID Connect providers, GitHub, LDAP or Active Directory, or with an account of its own. Nauthera is not OpenID Certified. |
| Keycloak 26.8.1 | OpenID Connect and OAuth 2.0, and two that Nauthera does not serve: SAML 2.0 (keycloak.org) and, since 26.8.0, a SCIM API (release notes). |
| Dex v2.46.1 | OpenID Connect: it "uses OpenID Connect to drive authentication for other apps" (README). |
| authentik 2026.8.5 | Providers for OAuth 2.0 and OpenID Connect, and for what Nauthera does not serve: SAML, LDAP, RADIUS, outbound SCIM, a proxy, remote access, SSF and WS-Federation (providers); SSF needs authentik Enterprise (pricing). |
| Ory Hydra v26.2.0 | OAuth 2.0 and OpenID Connect, certified by the OpenID Foundation, its README says (README). |
| Zitadel v4.20.1 | OpenID Connect, and two that Nauthera does not serve: SAML and a SCIM 2.0 server (README). |
#Where users sign in from
| Tool | Accounts and upstream providers |
|---|
| Nauthera | Its own accounts, with passwords, passkeys and TOTP; upstream OpenID Connect providers and GitHub, each an IdentityProvider; LDAP or Active Directory by password bind, an LDAPDirectory. An upstream provider must have a public address (air-gapped identity). |
| Keycloak 26.8.1 | Its own accounts; brokering to OpenID Connect providers, social login, and LDAP and Active Directory federation; and two sources Nauthera does not offer, SAML providers and Kerberos (server admin guide). |
| Dex v2.46.1 | Connectors for LDAP, GitHub, GitLab, OpenID Connect, OAuth 2.0, Google, Microsoft, SAML 2.0 and others, each marked stable, beta or alpha; the SAML connector is not maintained, marked "Unmaintained and likely vulnerable to auth bypasses" (README). A local password database is optional (local connector). |
| authentik 2026.8.5 | Its own accounts, and sources for LDAP and OAuth, and for three Nauthera does not offer: Kerberos, SAML and SCIM (sources). |
| Ory Hydra v26.2.0 | None of its own: it "connects to your existing identity provider through a login and consent app" that you build (README). |
| Zitadel v4.20.1 | Its own accounts, with passkeys and MFA; LDAP and enterprise identity providers (README). |
#Administration
| Tool | How it is administered |
|---|
| Nauthera | An admin dashboard per organization shows its clients, identity providers, users, sessions, audit log and threat signals, and manages users (create, invite, suspend, block, delete, password resets), their roles and sessions. Clients are declared as resources rather than edited there. Beside it, an admin REST API described by OpenAPI. |
| Keycloak 26.8.1 | An Admin Console, and an Account Console where users manage their own sign-in (server admin guide). |
| Dex v2.46.1 | Its configuration file, and a gRPC API that is off by default and has no authentication "beyond TLS client auth" (API). The docs describe no admin console. |
| authentik 2026.8.5 | An admin interface, "a visual tool for the creation and management of users and groups, tokens and credentials" (docs). |
| Ory Hydra v26.2.0 | Headless: a "standalone OAuth 2.0 and OpenID Connect server without user management", with no login pages of its own (README). |
| Zitadel v4.20.1 | The Management Console, "the web-based Dashboard UI designed to facilitate the management and administration of ZITADEL resources and settings" (Console). |
#OAuth clients as Kubernetes resources
| Tool | How a client is declared, and what keeps it true |
|---|
| Nauthera | An OIDCClient (nauthera.io/v1alpha1), the intended way to register your own applications' clients; dynamic registration is for software others deploy. The server mints the secret and keeps a hash; the operator writes it into a Secret. A client changed elsewhere is reported as Drifted, not undone, until the manifest changes or the resource is annotated nauthera.io/restore (operator). |
| Keycloak 26.8.1 | KeycloakOIDCClient and KeycloakSAMLClient (k8s.keycloak.org/v2alpha1), a preview behind the client-admin-api:v2 feature. You supply the secret, and the operator "does not detect external changes and will overwrite them" (Managing clients). KeycloakRealmImport creates a realm and never updates it (realm import). |
| Dex v2.46.1 | Static clients in the configuration file, or the gRPC API; its custom resources are storage that "aren't meant to be consumed by end users" (storage). |
| authentik 2026.8.5 | Blueprints: YAML files, mounted from a directory, fetched from an OCI registry or kept in authentik's database, each applied in one transaction and rescanned every 60 minutes by default (blueprints); the Helm chart mounts them from ConfigMaps or Secrets (chart values, 2026.8.5). authentik records each blueprint instance's status (successful, warning, error) itself, not on a resource in the cluster (models.py). |
| Ory Hydra v26.2.0 | Hydra Maester v0.0.42, a community add-on: OAuth2Client resources (hydra.ory.sh/v1alpha1), with the ID and secret written into a Secret (Maester README). |
| Zitadel v4.20.1 | Zitadel's own Terraform provider 3.8.7, which keeps a generated secret in state (application_oidc); truvity/zitadel-operator v0.21.0, a third party's, declares OIDCApp resources (pkg.go.dev). |
#License
| Tool | License |
|---|
| Nauthera | Apache-2.0 for the core is planned; the software has no public license today. |
| Keycloak 26.8.1 | Apache License 2.0 (LICENSE.txt). |
| Dex v2.46.1 | Apache License 2.0 (LICENSE). |
| authentik 2026.8.5 | MIT, apart from the authentik/enterprise directory, which has its own license (LICENSE); some features need authentik Enterprise (pricing). |
| Ory Hydra v26.2.0 | Apache License 2.0; an Ory Enterprise License and the managed Ory Network are offered beside it (README). |
| Zitadel v4.20.1 | AGPL-3.0 since v3.0 (announcement, March 13, 2025), with Apache License 2.0 and MIT exceptions for some directories (README). |
#Release and project
| Tool | Where it stands |
|---|
| Nauthera | Nauthera is pre-1.0, in a design-partner program: its signed server and operator images and its Helm chart are public on the GitHub Container Registry, and teams can apply for one of five design-partner seats to pilot it with direct support. The source is private. |
| Keycloak 26.8.1 | Four minor releases a year (release updates); an incubating project of the Cloud Native Computing Foundation since April 10, 2023 (cncf.io). |
| Dex v2.46.1 | A sandbox project of the Cloud Native Computing Foundation since June 25, 2020 (cncf.io); releases on GitHub. |
| authentik 2026.8.5 | Released October 21, 2026, with calendar versions (releases). |
| Ory Hydra v26.2.0 | Released March 20, 2026 (releases); Hydra Maester is "not actively maintained by Ory core maintainers" (Maester README). |
| Zitadel v4.20.1 | Released November 3, 2026 (releases). |
#When Nauthera fits best
- Your apps ship as manifests (Helm, Argo CD, Flux), and each team owns its clients
beside its Deployment.
- No client secret in Git or a state file: the server generates it and keeps a digest,
and the operator writes the Secret.
- A tenant per issuer: each organization has its own discovery document, keys, users,
sessions and audit log.
- Current OAuth security without plugins: DPoP, pushed authorization requests, signed
request objects, and PKCE with S256 required by default.
- A small, auditable footprint: one static Go binary in a
scratch image, and a
hash-chained audit log with signed checkpoints.
| Tool | The better choice when |
|---|
| Keycloak 26.8.1 | You need SAML 2.0, Kerberos or SCIM, which Nauthera does not support; LDAP user federation; an account console for users; or a Cloud Native Computing Foundation project with four minor releases a year (server admin guide; cncf.io; release updates). Keycloak and Nauthera goes through it criterion by criterion. |
| Keycloak with Terraform 5.10.0 or Crossplane v3.2.3 | You already run Terraform and Keycloak: the provider manages realms, flows, mappers and identity providers as well as clients, and keeps a secret out of state with the write-only client_secret_wo (provider docs). Keycloak with Terraform, or an operator follows one client through both. |
| Dex v2.46.1 | You only federate existing identities, such as a GitHub organization, LDAP or Google, into Kubernetes, Argo CD or Grafana, and want no user database of your own; or you need kubectl login, which Dex documents (Kubernetes guide). |
| authentik 2026.8.5 | You want many protocols from one deployment: OIDC, and SAML, LDAP, RADIUS, outbound SCIM, a proxy and remote access, which Nauthera does not serve (providers). |
| Ory Hydra v26.2.0 | You want a headless OAuth 2.0 and OpenID Connect server behind a login and consent app you build yourself, on top of a user system you already have (README). |
| Zitadel v4.20.1 | You want SaaS-style multi-tenancy, with instances, organizations and projects, and SAML and a SCIM 2.0 server, neither of which Nauthera has (README). |
The operator page compares the approach with Terraform and Ansible in general:
Why a Kubernetes operator.
#Where Nauthera stands
What its code has today: OAuth 2.0 and OpenID Connect
with PKCE, pushed authorization requests and DPoP-bound tokens; organizations, each its
own issuer; sign-in with passkeys, TOTP, upstream OpenID Connect providers, GitHub and
LDAP or Active Directory; a hash-chained audit log with signed checkpoints; an admin dashboard; and the operator, which
reconciles OIDCClient, Organization, IdentityProvider, Branding, LDAPDirectory and BrokerMembership. It emits no groups claim, so applications map roles
by email or another claim it does emit. Standards lists every
specification, and
Existing identity providers covers
running it beside the provider you have.