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
Detailed comparison

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
Detailed comparison

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
Detailed comparison

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
Not measured separately: its REST layer is PostgREST, so the PostgREST figures are the ones that apply.
Detailed comparison

Feature Comparison

Feature
Postrust
PostgRESTHasuraPostGraphileSupabase
LanguageRustHaskellHaskellTypeScriptPlatform
REST APIYesYesRESTified endpointsNoYes (PostgREST)
GraphQLBuilt inNoBuilt inBuilt inVia extension
SubscriptionsLISTEN/NOTIFYNoYesLISTEN/NOTIFYRealtime service
PermissionsRoles + RLSRoles + RLSMetadataRoles + RLSRoles + RLS
Setup before first queryNoneNoneTrack tablesNoneNone
Custom routes in-processAxum, needs rebuildNoActionsPluginsEdge Functions
Schema customisationNoNoMetadataPlugin systemNo
RuntimeStatic binaryBinaryContainerNode.jsManaged / stack
AWS LambdaNative crateContainerContainerEject to serverlessNo
Self-hostedYesYesYes (v2 OSS)YesYes (full stack)
LicenseMITMITApache 2.0 (v2)MITApache 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.

Ready to try Postrust?

Get started in minutes with our quick start guide.

Get Started