In preview — general availability coming soon

Query all your data
in 3 languages and 9 protocols.
In 5 minutes.

Connect your databases once. Then query them in GraphQL, SQL, or Cypher — from psql, Tableau, Neo4j Browser, or an AI agent. Governance is compiled into the query plan, so there's no way in that goes around it.

Nothing to connect yet? Download and take the demo tour — a sample federation is bundled, so there is nothing to connect first.

# psql speaks to Provisa as if it were Postgres — on port 5439
psql -h localhost -p 5439 -U analyst

# One SQL query, joined across Postgres, Mongo, and Elasticsearch
SELECT c.name, o.total, t.trace_id
FROM customers c
JOIN orders o   ON o.customer_id = c.id
JOIN queries t  ON t.actor = c.email
WHERE o.total > 1000;

One model, three languages — and if you want none of them, generated REST. RLS, masking, and approval are already applied on whichever tab you pick — nothing to remember, and nothing to re-implement per protocol.

Most people start with one of these.

Give an agent your data

An AI agent needs one database, safely.

Point Claude or any MCP client at Provisa instead of the database. The OAuth token maps to a role, so the agent gets the same six governance layers a person does — and no bypass to forget about.

MCP, and the eight other protocols →

A backend for your frontend

One API over sources that don't match.

The app needs Postgres, a document store, and two internal REST services in the same response. Declare the relationships once and the API spans all of them — per-role, filtered, paginated — in whichever shape your client wants: GraphQL/OpenAPI, JSON:API, or gRPC. No BFF service to maintain.

The interfaces, and the Hasura path in →

BI without a warehouse

Tableau over the sources you actually have.

Postgres, Mongo, Elasticsearch, a Google Sheet, an S3 prefix of extracts. Connect the BI tool over JDBC or pgwire and join across all of them — no pipeline, no copy, no warehouse in the middle.

All 53 source types →

Data science, connected

Every dataset the team needs, in Arrow.

Register the sources once and the whole team queries them from pandas, Polars, or DuckDB. Arrow Flight streams record batches columnar all the way out — no row-by-row serialization, nothing materialized server-side while you read — and single-source queries route straight to the driver.

Flight, Airport, and pgwire →

Provision data to other teams

Hand over a result set, not a pipeline.

The consuming team writes SQL and gets it back fast: Arrow streams over Flight, typed gRPC, and — past a row threshold — a presigned S3 URL for multi-GB deliveries instead of a timed-out HTTP response. Kafka carries the change notifications, so they pull the delta rather than the snapshot.

How the governance follows the data →

You describe your data once — sources, tables, relationships, who may see what. Everything else is generated from that one description: the APIs, the legal join paths, the governance, and the audit trail. There is no second place to keep in sync.

We call this an Active Semantic Layer.

Every other semantic layer is a description — a model something else has to honor. This one runs the query, enforces the policy, and writes the audit trail itself, at query time, on every protocol.

Active vs. passive — what the word has to mean

Three languages, one model

GraphQL, Cypher, and SQL all query the same federated model and retarget to any source dialect. Domains carve it into namespaces — a domain is the schema a SQL client sees — and governance applies identically across all three languages: not three integrations, but one.

Read and write

Analytical and transactional flows through the same governed API: cross-source reads fan out through federation; writes and single-source reads route direct to the driver, sub-100ms.

Smart routing

Single-source queries bypass federation entirely. Materialized views record the transform that built them, so queries rewrite transparently onto a fresh MV.

Query interfaces & wire protocols

Write in three languages. Connect over nine protocols.

From columnar Arrow batches streamed over gRPC to plain HTTP JSON — pick the transport your workload actually wants. Each of these exists for a reason: a BI extract is not a dashboard poll is not a service-to-service call, and the right wire for one is the wrong wire for the next. The query language and the wire protocol are independent choices, and the same governance reaches every entry point.

GraphQL

Per-role schemas with field-level visibility, constrained to registered relationships — valid by construction.

SQL

Full SQL over federated data. Single-source queries bypass federation entirely for sub-100ms latency.

Cypher

Graph traversals over the same federated model, under identical governance.

Relational & BI

Tableau, Power BI, DBeaver, psql, and local analytical engines.

  • pgwire — any Postgres client on port 5439; pg_catalog is answered in-memory, so schema browsers just work.
  • JDBC & REST — the BI tools over JDBC; JSON:API 1.1 for applications.
  • Airport (DuckDB) — any DuckDB client attaches Provisa as a database and pushes filters down.

Graph & search

Neo4j Browser and Bloom, plus application-side traversals.

  • Bolt — the Neo4j tools and official drivers run Cypher against the federated graph.
  • GraphQL over HTTP — the same per-role schema every other surface enforces.

High-performance data

Columnar streaming, microservices, zero-serialization ML.

  • Arrow Flight — Arrow record batches over gRPC, columnar all the way out. Accepts GraphQL or SQL.
  • gRPC model API — a .proto generated from your schema; typed query and insert RPCs per table.
  • WebSocket & SSE — subscriptions stream change events: Postgres native, MongoDB native, CDC, or polling.

AI & automation

Agentic tool calls and LLM-driven query generation.

  • MCP server — agents query your governed data as tools. The OAuth token maps to a role, so agents get no bypass.
  • Natural language — NL→SQL, Cypher, or GraphQL powered by Claude, with a validation loop before anything runs.
Every interface in detail
The Query Language Explorer: a GraphQL query with its live Semantic SQL and Cypher translations in side panels.
Write a GraphQL query; see its live Semantic SQL and Cypher translations, then jump into either editor.

Active, query-time governance

Six layers. Every language. Every transport.

You do not configure any of this to get started — one source and a role is enough. It matters later, when the project you started alone has to survive an auditor: governance is applied uniformly, there is no query path that bypasses it, and adding a source, column, or relationship applies every layer automatically.

Query in GraphQL · SQL · Cypher, over any of the nine protocols
  1. 0

    Introspection filtering

    Schema browsers only ever see what the role is allowed to see.

  2. 1

    Public access

    Anonymous surface is explicit, never accidental.

  3. 2

    Domain access

    Roles reach only the domains registered to them.

  4. 3

    Row-level security

    Per-table, per-role WHERE injection — inherited recursively.

  5. 4

    Column visibility & masking

    Regex, constant, or truncate masking with role-based bypass.

  6. 5

    Predicate guard & approval

    Pre-execution ABAC hook over webhook, gRPC, or unix socket.

Plan out One compiled plan, policy already inside it — plus the audit row

All six are applied while the query is compiled, not checked against a policy list afterwards. What executes is already the governed query — so there is no version of it that could have run ungoverned.

Relationships are governed too. A JOIN or a graph traversal is legal only if it matches a registered, approved relationship — so people and agents can roam the model freely while every path stays inside what policy sanctioned. It's a per-role flag: trusted roles can turn it off.

How each layer works

Data sources

53 source types through one API.

Graph and RDF sources are first-class, not adapters. Register REST, GraphQL, gRPC, WebSocket, or RSS endpoints as governed tables — federated joins across API and relational sources work transparently.

  • PostgreSQL
  • MySQL
  • MongoDB
  • Cassandra
  • Elasticsearch
  • Neo4j
  • SPARQL
  • Kafka
  • Snowflake
  • Databricks
  • BigQuery
  • Fabric
  • ClickHouse
  • DuckDB
  • Google Sheets
  • CSV / Parquet
  • Excel · DOCX · PPTX
  • SharePoint
  • Splunk
  • S3 · FTP · SFTP
  • REST APIs
  • GraphQL APIs
  • gRPC APIs
  • RSS · WebSocket
See all 53 source types

Auto-indexing file crawler

Point it at a location. Get a catalog of the data hiding in it.

One of the 53 behaves unlike the other fifty-two: you register a location, not a table. It walks the tree recursively, introspects every data file it finds, and catalogs each one as an available table — the shared drive nobody has mapped, the S3 prefix of extracts, the SharePoint site a department has been running on for years.

  1. 1

    Point

    A local or network folder, an S3 bucket, a SharePoint site, an HDFS path, or an HTTP, FTP, or SFTP host — one location, not one table.

  2. 2

    Crawl

    It walks the tree to whatever depth you allow, converts documents that hold tables into data, and reads the schema out of each one.

  3. 3

    Register

    You pick which of the discovered tables to register — and they land under the same six governance layers as everything else.

Crawls
  • Local & network folders
  • S3
  • SharePoint
  • HDFS
  • HTTP(S)
  • FTP · FTPS · SFTP
Reads
  • CSV · TSV
  • JSON
  • Parquet
  • Arrow
  • YAML
  • Excel
  • Word
  • PowerPoint
  • HTML
  • XML
  • Markdown
What it crawls, and what else registers
The federated model explored as a live graph: domain and node labels, relationship types, and variable-length traversals across sources.
The same federated model, explorable as a live graph — domains, node labels, and relationships across every source.

Derived data & your existing stack

Declare the analytics layer. Publish it.

Declared datasets, not pipelines

A pipeline is a program that ran; to audit one you read code. Declare the dataset instead and the definition is the record — column-level lineage, the data version consumed, the rules that produced it. No orchestration DAG.

Feeds the catalog you bought

One registration publishes to OpenMetadata, DataHub, Collibra, Atlan, Apache Atlas, and OpenLineage — with lineage stitched on business identity, so re-platforming doesn't reset it.

Every value has an address

Governed values resolve over REST or MCP at a semantic address, optionally as of a point in time. Physical URIs are refused, so a citation can't leak a location.

Enterprise-ready

Airgap-ready. Installs from your own Artifactory.

The embedded profile ships the entire runnable system — precompiled UI and all — as a single Python wheel. Regulated and airgapped orgs already trust Artifactory-as-PyPI, so there's no new supply chain to approve: no Docker registry to mirror, no JVM, no root.

  • SQLite control plane + embedded DuckDB engine — no Docker, no daemon
  • Bring your own engine: Trino, Databricks, Snowflake, Postgres, ClickHouse, Oracle — one env var
  • Reproducible and hash-pinned; passes the same CVE gate as every wheel

Locked-in ecosystems become replaceable execution engines

Your model, semantics, and governance live above the infrastructure, not inside it. Swap the engine — embedded to Trino to your warehouse; new CTO, switch it to Databricks — and the queries and policies don't change. Re-point a table from Oracle to Postgres and consumers never see it move.

We don't lock you in either: your model is portable declarative config, and the SQL it compiles is yours to read, export, and keep.

The full argument — including domains as products, config promotion, and the compute bill

Get Provisa

Download and run in 5 minutes.

Signed desktop installers for every OS, or pip install the embedded runtime. The whole working system runs on your desktop in about five minutes — no Docker, no JVM, no cluster. Launch it and pick the guided demo: a sample federation is already bundled, so you can run SQL, GraphQL, and Cypher over it before you connect anything of your own. Preview builds; join the list for the general-availability release. A hosted SaaS tier is coming — the same runtime, run for you.

Business Source License 1.1. Non-production use is free for everyone, with no time limit — evaluate it for as long as you like. Production use is also free for organizations under 100 people and under $1M revenue in the prior tax year; larger organizations need a commercial license to run it in production — get in touch. Each release converts to GPL v2-or-later four years after it ships.

Or install from PyPI

The whole runnable system — precompiled UI included — as a single wheel. Airgap-ready over an Artifactory PyPI mirror: no Docker, no JVM, no root.

Deploy anywhere

From a laptop to a cluster — same platform.

Desktop installers

Signed macOS, Windows, and Linux installers — each with a one-click demo build that boots a sample stack.

Python wheel

pip install "provisa[embedded]" — the whole system, precompiled UI included. Airgap-ready.

Kubernetes · Helm

A production chart deploys the control plane, workers, and engine — scale the federation tier horizontally.

Cloud & VM · Terraform

Modules for AWS, Azure, and GCP stand up a VM or cluster deployment end to end.

Questions

Frequently asked

Is Provisa a database, or does it replace my warehouse?

Neither. Provisa is a semantic and governance layer that runs on an engine you choose — Trino, DuckDB, ClickHouse, Postgres, Snowflake, Databricks, BigQuery, or the embedded Trino-compatible engine in the box. Your warehouse becomes a replaceable execution engine rather than the place your semantics live.

Why that matters
How is this different from Starburst or Denodo?

Starburst is a query engine; Provisa sits above one and can use Starburst as its engine. Denodo is the closest comparison — same category, different center of gravity: Provisa adds GraphQL and Cypher as peers to SQL, nine wire protocols including pgwire and Bolt, engine choice, and a deployment that starts at one pip install.

Provisa and Starburst
I'm on Hasura v2. Can I migrate?

Yes. Point the converter at your Hasura v2 metadata directory and it emits a Provisa config: sources, tables, per-role permissions as row-level security, relationships, remote schemas, actions, event triggers, and cron triggers. Anything it can't map cleanly is reported as a warning rather than dropped.

The migration path
Can AI agents query my data safely?

An MCP server — stdio and remote Streamable HTTP — exposes governed tables as tools. The OAuth token maps to a role, so every agent call passes the same six governance layers as a human query, and traversals are limited to registered relationships. Agents get no bypass and there's no second policy to keep in sync.

How governance applies
Does it work in an airgap?

The embedded profile ships the entire runnable system, precompiled UI included, as a single Python wheel. Regulated orgs already trust Artifactory-as-PyPI, so there's no Docker registry to mirror, no JVM, and no root required. Builds are reproducible and hash-pinned.

What happens to my model if I stop using Provisa?

You keep it. Provisa is a handful of primitives — domains, tables, relationships, masking, views — compiled deterministically. The model is portable declarative config held in git, and the SQL it compiles is yours to read and export. The semantics you write don't die with the tool.

Our position on lock-in

Describe your data and govern it in the same act.

One governed path for analytical, application, and human data movement.