




3366 Members
OpenFGA is a CNCF Incubating project for building relationship-based access control systems. Originally developed by Auth0/Okta and donated to the CNCF, OpenFGA moved to Incubating status on October 28, 2025. Teams evaluating OpenFGA often compare it with other fine-grained authorization tools to find the right fit for their architecture.
This post covers OpenFGA alternatives, including other Zanzibar-inspired systems, general-purpose policy engines, and control planes that abstract multiple engines. For background on FGA concepts, see What is Fine-Grained Authorization.
According to the OpenFGA documentation, OpenFGA is a scalable authorization system inspired by Google's Zanzibar paper. It uses Relationship-Based Access Control (ReBAC), which allows developers to implement Role-Based Access Control and provides additional capabilities for Attribute-Based Access Control through Contextual Tuples and Conditional Relationship Tuples.
Key features per the OpenFGA docs include:
OpenFGA is Apache 2.0 licensed and vendor-neutral under CNCF governance.
OpenFGA alternatives fall into two main categories:
Relationship-based systems model access through relationships between users and resources. These include OpenFGA, SpiceDB, and Ory Keto.
Policy-based systems evaluate rules against attributes of users, actions, and resources. These include OPA, Cerbos, and Cedar.
Some tools, like Permit.io, act as control planes that can use either approach depending on your model.
SpiceDB is the most Zanzibar-faithful open source implementation, developed by AuthZed. It uses a schema language close to Google's original paper and provides strong consistency guarantees through ZedTokens.
According to AuthZed's documentation, SpiceDB differentiates through its consistency controls. ZedTokens let you specify that a read must be at least as fresh as a given write, preventing the "New Enemy Problem" where a recently revoked permission still appears valid in a stale cache.
| Aspect | OpenFGA | SpiceDB |
|---|---|---|
| License | Apache 2.0 | Apache 2.0 |
| Schema language | OpenFGA DSL | SpiceDB schema (closer to Zanzibar) |
| Consistency | MINIMIZE_LATENCY or HIGHER_CONSISTENCY | Configurable ZedTokens |
| Watch API | Not documented | Yes, for cache invalidation |
| Managed offering | Auth0 FGA | AuthZed Cloud |
SpiceDB requires more operational expertise to self-host, typically needing PostgreSQL or CockroachDB and Kubernetes experience. AuthZed Cloud offers managed deployment.
Sources: SpiceDB docs, AuthZed OpenFGA alternatives
Cerbos takes a different approach: it is a stateless policy engine that stores no permissions itself. You run the PDP as a sidecar, keep policies as YAML in Git, and ship attributes with each check.
According to the Cerbos documentation, the PDP evaluates policies using CEL (Common Expression Language) conditions. This approach works well for attribute-heavy authorization where relationships are simpler.
| Aspect | OpenFGA | Cerbos |
|---|---|---|
| Authorization model | Relationship-based (ReBAC) | Policy-based (ABAC) |
| Policy language | OpenFGA DSL | YAML with CEL conditions |
| State | Stateful (stores relationships) | Stateless (no stored data) |
| ListObjects | Native graph query | Query planner API for database filters |
| Self-hosted | Yes | Yes, Apache 2.0 |
Cerbos is a strong choice when your authorization logic is conditional and attribute-heavy. For complex relationship graphs with nested groups and derived roles, a Zanzibar-style system like OpenFGA or SpiceDB is usually a better fit.
Sources: Cerbos docs, Cerbos pricing
Open Policy Agent is a CNCF graduated project and a general-purpose policy engine. It uses Rego, a declarative policy language, and can be applied to Kubernetes admission control, cloud compliance, CI/CD pipelines, and application authorization.
OPA is flexible but does not natively store relationships like OpenFGA. You can preload data through bundles, fetch data during evaluation, or include it in the request. This flexibility requires more configuration to achieve ReBAC patterns.
| Aspect | OpenFGA | OPA |
|---|---|---|
| Authorization model | ReBAC (native) | RBAC/ABAC (native), ReBAC (with data) |
| Policy language | OpenFGA DSL | Rego |
| Scope | Application authorization | General-purpose policy |
| Relationship storage | Built-in | External (bundles or fetch) |
| CNCF status | Incubating | Graduated |
OPA is widely adopted for infrastructure policies. For application-level fine-grained authorization with complex relationships, you often pair OPA with a data layer or use a system designed for ReBAC.
Sources: OPA docs, CNCF OPA page
Cedar is a policy language developed by AWS and accepted to the CNCF Sandbox on October 8, 2025. AWS Verified Permissions provides Cedar as a managed service.
Cedar emphasizes readability and determinism. It supports formal verification, allowing you to prove properties about your policies. According to the Cedar documentation, Cedar is designed for attribute-based access control with clear, predictable evaluation.
| Aspect | OpenFGA | Cedar/AVP |
|---|---|---|
| Authorization model | ReBAC | ABAC |
| Policy language | OpenFGA DSL | Cedar |
| Formal verification | No | Yes |
| Self-hosted | Yes | Cedar engine only; AVP is managed |
| Cloud integration | Auth0/Okta | AWS native |
Cedar works well for teams on AWS who want attribute-based policies with formal verification. For relationship-heavy models, OpenFGA or SpiceDB are more natural fits.
Sources: Cedar docs, CNCF Cedar page
Permit.io is an authorization-as-a-service control plane that generates policy for multiple engines, including OPA (Rego) and Cedar. It abstracts the underlying policy engine and provides a policy editor, API, Terraform provider, GitOps, and embeddable UI components.
As shared in our docs, Permit supports RBAC, ReBAC, ABAC, and PBAC in a single service. The control plane runs in Permit's cloud, and decisions run in a managed Cloud PDP or self-hosted Edge PDPs using OPAL for real-time policy and data sync.
| Aspect | OpenFGA | Permit.io |
|---|---|---|
| Type | Open source engine | Managed control plane |
| Policy generation | OpenFGA DSL | Rego (OPA) or Cedar |
| Access models | ReBAC (native ABAC via conditions) | RBAC, ReBAC, ABAC, PBAC |
| Self-hosted decisions | Yes | Edge PDP (Apache 2.0) |
| End-user UI | Not included | Permit Elements |
Most teams end up picking a side. OPA and Cedar give you policy as code: rules you can review, test, and version like any other code. OpenFGA and SpiceDB give you policy as graph: Zanzibar-style relationship tuples that answer "can this user see this folder because of that team" well. Permit combines both. You model relationships and derived roles as a graph, and you express conditions, attributes, and exceptions as Rego or Cedar policy, all through one API and one policy store. You don't have to run a graph authorization service beside a separate policy engine and build the sync between them yourself.
The Permit Nexus PDP is a ground-up rewrite of our decision point, now in early access. It keeps the authorization graph on local disk in embedded SurrealDB, receives changes over a durable NATS stream, and has OPA evaluate policy with no network hop in the decision path. As shared on the Nexus page, measured October 9, 2026 on a beta build:
Those numbers put Nexus in the performance range teams look for from OpenFGA or SpiceDB for relationship checks, and deeper ReBAC chains add very little. We haven't published a head-to-head benchmark against OpenFGA or SpiceDB, so treat these as Nexus measurements and run your own workload before relying on any vendor's figures. The bigger difference is operational. Self-hosting OpenFGA or SpiceDB means you operate and tune the datastore, replicas, and caching yourself (Auth0 FGA and AuthZed Cloud take some of that off your plate, as a separate hosted service). With Nexus, the control plane handles sync and each PDP heals itself from its stream. And because Nexus runs as a container beside your service, the network round trip to the decision point shrinks to a local call on the same host, or effectively zero.
Permit.io adds a policy editor for non-engineers, embeddable UI components for end-user access management, and a unified API across multiple access models. The open source components (Edge PDP, OPAL, cedar-agent) are Apache 2.0 licensed.
As shared on our pricing page and payment portal, the Community tier is free with up to 1,000 MAU, 20 tenants, 3 environments, and 14 days of audit log retention. Pro and Enterprise tiers are MAU-based, with Enterprise adding unlimited usage, compliance support, and on-prem deployment.
Sources: Permit.io docs, Permit.io pricing, OPAL
| System | Model | Language | Self-hosted | Managed |
|---|---|---|---|---|
| OpenFGA | ReBAC | OpenFGA DSL | Yes (Apache 2.0) | Auth0 FGA |
| SpiceDB | ReBAC | SpiceDB schema | Yes (Apache 2.0) | AuthZed Cloud |
| Cerbos | ABAC | YAML/CEL | Yes (Apache 2.0) | Cerbos Hub |
| OPA | General | Rego | Yes (Apache 2.0) | Styra DAS |
| Cedar | ABAC | Cedar | Engine only | AWS AVP |
| Permit.io | Multi-model | Rego or Cedar | Edge PDP (Apache 2.0) | Permit Cloud |
Use OpenFGA or SpiceDB when:
Use Cerbos or OPA when:
Use Cedar when:
Use Permit.io when:
Yes. OpenFGA is Apache 2.0 licensed and free to self-host. Auth0/Okta offers a managed service called Auth0 FGA with a free evaluation tier and paid Enterprise plans.
Both are Zanzibar-inspired. SpiceDB provides configurable consistency through ZedTokens and has a schema language closer to Google's original paper. OpenFGA is a CNCF Incubating project with vendor-neutral governance. SpiceDB requires more operational expertise to self-host.
OpenFGA supports some ABAC scenarios through Contextual Tuples and Conditional Relationship Tuples. For heavily attribute-based logic, a policy engine like Cerbos, OPA, or Cedar may be a more natural fit.
If your access model follows relationships (user owns document, user is member of team, team has access to folder), use a Zanzibar-style system. If your access model is based on attributes and conditions (user is in region X, resource is classified Y, action is during business hours), use a policy engine.
Yes. Some teams use Permit.io's control plane, which generates policy in Rego or Cedar and supports RBAC, ReBAC, and ABAC models. Others run OpenFGA for relationship checks and OPA for additional policy rules.

Co-Founder / CEO at Permit.io