Enforcer

OpenFGA alternatives

OpenFGA is a solid Zanzibar implementation. The reason people look elsewhere is almost always the same one, and it is structural rather than a missing feature.

The dual-write problem

To answer anything, a relationship engine needs a copy of your data. Every time your application creates a project or adds a member you write it twice, once to your database and once to the permissions store. If those disagree, your permissions are wrong and nobody finds out until someone sees something they should not. AuthZed's own CTO names this as the first pain point of the model, so it is not a competitor talking point.

If your problem genuinely is a sharing graph, that cost is worth paying and you should stay. If it is not, you are paying it for nothing.

The options

OptionModelStrengthTrade-off
SpiceDB / AuthZedRelationshipMore mature toolingIdentical sync cost
CerbosPolicy, YAMLNo sync, stateless, self-hostList filtering is weak
Open Policy AgentPolicy, RegoUbiquitous in infraRego is hard to debug
Permit.ioPolicy plus gatewayUI, MCP gatewayStill syncs
WorkOS FGARelationship plus rolesSign-in includedResources live in their system
EnforcerPolicy over a resolved callerNo sync; identity includedNo list filtering

The honest split

Keep a relationship engine if you need to answer "list every document this person can see" across an arbitrary sharing graph. That is what Zanzibar was designed for.

Move if your real question is whether this person, in this tenant, with this role and this verification status, may take this action within these limits, and you need to prove afterwards why it was allowed. That is what Enforcer answers, and it does it without a second copy of your data.

Last updated 2026-09-11. Enforcer is identity and authorization in one system, for applications and AI agents. Docs at docs.instruxi.dev.