Skip to content

Historical prototype comparison

A, B, and C are historical prototypes preserved for research and benchmarks. D is the current implementation of the extension. The cards compare their approaches and the workloads explored during development. Install the extension to use D; the earlier prototypes are not alternative releases.

Zanzibar-style tuples. Every check is a recursive walk at read time. The design derives nothing, so nothing can drift.

Explored for: Shallow and narrow sharing graphs, frequent team edits, and the smallest design to maintain.

Sharing page, 1M docs1.03 ms
Sharing page, wide teams14.4 ms
Nest a 1,000-member team0.15 ms

Cedar-style policies. The design computes closures at write time. Forbid rules and conditions are first-class.

Explored for: Forbid rules on groups, or conditions that the design evaluates, in year one; text or bigint keys.

Sharing page, 1M docs1.00 ms
Sharing page, wide teams17.8 ms
Nest a 1,000-member team0.62 ms

A typed JSON model that the design compiles to SQL. The design materializes memberships at write time. Reads barely change with the shape.

Explored for: Apps with many reads and wide or deep groups, where nests of teams are rare.

Sharing page, 1M docs0.93 ms
Sharing page, wide teams8.20 ms
Nest a 1,000-member team57.7 ms

First-class rbac_* tables plus OpenFGA-compatible fga_* tables, composed in RLS. It passes the test suite of OpenFGA.

Explored for: Teams that want the model and the API of OpenFGA inside Postgres, next to plain RBAC. Benchmarked, and optimized in two passes.

Sharing page, 1M docs1.29 ms
Sharing page, wide teams26.2 ms
Nest a 1,000-member team0.24 ms

Cedar 4.x policies, entities and templates in PL/pgSQL, beside rbac_* and fga_*; passes Cedar's integration test corpus.

Explored for: Teams that want Cedar policies, with forbid rules, conditions and templates, evaluated inside Postgres next to RBAC and OpenFGA.

p50 latency, 4 pgbench clients, PG 18.6 (docker, optimized). The numbers come from the primary series of the dashboard. The Optimizations page shows the runs before and after the optimization pass. The source is the benchmarks dashboard.

The project later chose per-model tables. Read the decision record for the evidence behind that change, or the prototype guides to reproduce the earlier experiments.