How Postrust Compares
See how Postrust stacks up against other PostgreSQL API solutions. Choose the right tool for your needs.
vs PostgREST
The project that established the idea. Written in Haskell, REST only.
Their Strengths
- Years of production use
- Large community
- Excellent documentation
Their Limitations
- No GraphQL
- No subscriptions
- Logic lives in SQL
Measured
- REST, point lookup
- 4.0x
- requests/second
- 44,324 vs 10,958
- memory, after the benchmark
- 17.1 MB vs 51.0 MB
vs Hasura
A GraphQL platform with permissions modelled as metadata.
Their Strengths
- Per-field permissions
- Multiple data sources
- Event triggers and console
Their Limitations
- Tables must be tracked first
- A platform to operate
- Heavier footprint
Measured
- GraphQL, single row by primary key
- 3.3x
- requests/second
- 32,146 vs 9,650
- memory, after the benchmark
- 17.1 MB vs 202.5 MB
vs PostGraphile
GraphQL from your schema, built to be reshaped. V5 plans with Gra*fast*.
Their Strengths
- Deeply extensible
- Relay support
- TypeScript plugins
Their Limitations
- No REST surface
- Needs a Node runtime
Measured
- GraphQL, single row by primary key
- 2.3x
- requests/second
- 32,146 vs 14,127
- memory, after the benchmark
- 17.1 MB vs 215.3 MB
vs Supabase
A backend platform. Its REST layer is PostgREST.
Their Strengths
- Auth, storage and realtime included
- Managed hosting
- Generous free tier
Their Limitations
- A platform, not a server
- Less control when self-hosted
Feature Comparison
| Feature | Postrust | PostgREST | Hasura | PostGraphile | Supabase |
|---|---|---|---|---|---|
| Language | Rust | Haskell | Haskell | TypeScript | Platform |
| REST API | Yes | Yes | RESTified endpoints | No | Yes (PostgREST) |
| GraphQL | Built in | No | Built in | Built in | Via extension |
| Subscriptions | LISTEN/NOTIFY | No | Yes | LISTEN/NOTIFY | Realtime service |
| Permissions | Roles + RLS | Roles + RLS | Metadata | Roles + RLS | Roles + RLS |
| Setup before first query | None | None | Track tables | None | None |
| Custom routes in-process | Axum, needs rebuild | No | Actions | Plugins | Edge Functions |
| Schema customisation | No | No | Metadata | Plugin system | No |
| Runtime | Static binary | Binary | Container | Node.js | Managed / stack |
| AWS Lambda | Native crate | Container | Container | Eject to serverless | No |
| Self-hosted | Yes | Yes | Yes (v2 OSS) | Yes | Yes (full stack) |
| License | MIT | MIT | Apache 2.0 (v2) | MIT | Apache 2.0 |
Feature rows describe what each tool does today, with the condition in the cell where one applies. The figures on the cards above are one scenario each; every scenario, including those where the gap is narrowest, is on the comparison pages. All of them come from scripts/bench-compare.sh, on AMD EPYC 9255 24-Core Processor with each component pinned to its own cores. Ratios are a comparison of whole designs rather than of HTTP layers, and PostgREST's carry roughly ±10% from its own run-to-run spread.