Provisa / Coming from Hasura
Where the v2 idea kept going.
Instant, per-role, metadata-driven APIs over your own databases was the right idea. Provisa takes it further rather than sideways — same premise, more languages, more ways in, and governance that holds on all of them. Bring your metadata with you: the converter reads a Hasura v2 metadata directory and emits a Provisa config, tables, permissions, relationships, remote schemas, actions, and triggers included.
One command
# Read a Hasura v2 metadata directory, write a Provisa config
python -m provisa.hasura_v2 ./hasura/metadata -o provisa.yaml
# Validate without writing, map schemas onto domains, override connections
python -m provisa.hasura_v2 ./hasura/metadata --dry-run
python -m provisa.hasura_v2 ./hasura/metadata --domain-map public=sales billing=finance
What converts
- Sources — Postgres, Citus, MySQL, MS SQL, and BigQuery connections map to Provisa sources.
- Tables and columns — with per-role select permissions becoming column visibility.
- Row permissions — Hasura boolean expressions convert to SQL row-level security rules.
- Relationships — object and array relationships become registered, governed relationships.
- Remote schemas — mapped to GraphQL remote sources.
- Actions — HTTP-handler actions become webhooks; others land as function placeholders.
- Event triggers and cron triggers — carried across as event and scheduled triggers.
- Roles and rate limits — preserved as Provisa roles.
Anything the converter can't map cleanly is reported as a warning rather than silently dropped, so the gaps are a list you work through, not a surprise you find in production.
What you keep
A per-role GraphQL API over your database, generated from metadata, with permissions enforced at query time. That model was right, and Provisa keeps it: per-role schemas, field-level visibility, cursor pagination, aggregates, and Apollo Automatic Persisted Queries. No new modeling universe to learn first, no rewrite as the price of admission.
What you gain
| Hasura v2 | Provisa | |
|---|---|---|
| Query languages | GraphQL | GraphQL, SQL, and Cypher over the same schema |
| Ways in | HTTP GraphQL | pgwire, Bolt, Arrow Flight, gRPC, JDBC, REST, WebSocket, Airport, MCP |
| Sources | Relational databases, plus remote schemas | 52 source types — graph, RDF, files, SharePoint, Splunk, and API endpoints as governed tables |
| Analytics | Aggregates over the source | Cross-source federation and layered materialized views with recorded transforms |
| AI access | — | An MCP server where the OAuth token maps to a role, so agents inherit the same governance |
| Deployment | Container | Desktop installer, a single wheel for airgaps, Helm, or Terraform |
On staying put
Provisa is a handful of primitives compiled deterministically — domains, tables, relationships, masking, views. Your model is portable declarative config and the SQL it compiles is yours to read and export, so the next migration, whenever it comes and wherever it goes, starts from a file you already own.