Quickstart
Run Rowkai locally, build the services, start the fullstack demo, and create your first branch.
Documentation
These docs cover the fastest local setup path, the Rowkai architecture, the control plane API, and Kubernetes deployment. The core idea stays the same throughout: one system for multitenant Postgres, built-in GraphQL, blazing-fast branching, and security built into the operating model.
Run Rowkai locally, build the services, start the fullstack demo, and create your first branch.
Understand compute and storage separation, branch trees, timelines, Pageserver, WAL, and GraphQL-ready computes.
Use the control plane to create tenants, timelines, branches, and computes through a clean JSON API.
Deploy Rowkai on Kubernetes with S3-backed storage and optional Cloudflare-friendly GraphQL ingress.
Quickstart
Rowkai combines PostgreSQL, Go services, branching workflows, and a local admin UI. The fastest path is to build the PostgreSQL distribution with the Rowkai storage manager, build the Go services, then start the fullstack demo script.
./configure --prefix=/usr/local/pgsql \
--with-openssl --with-libcurl
make -j$(nproc)
make install DESTDIR=.local-install
cd controlplane
go build -o bin/controlplane ./cmd/controlplane/
go build -o bin/pageserver ./cmd/pageserver/
go build -o bin/walservice ./cmd/walservice/
cd ..
scripts/rowkai-fullstack-demo start
This starts the control plane, pageserver, WAL service, a default tenant and timeline, a compute node, and the admin UI.
Architecture
Rowkai uses a Neon-style storage and compute split. PostgreSQL computes are disposable and stateless. The Pageserver owns page storage and reconstruction. The WAL service handles durable WAL ingestion. The control plane manages tenants, timelines, branches, computes, and provisioners.
This model is what makes Rowkai a real system for multitenant Postgres instead of a pile of scripts. You can isolate important tenants, branch live state quickly, expose GraphQL on the compute you care about, and reason clearly about promotion paths.
API Reference
The default local base URL is http://127.0.0.1:9090. All request and response bodies use JSON, and errors
return a JSON payload with an error field.
GET /status for health and statsGET /tenants and POST /tenants for tenant managementGET /tenants/{tenantId}/timelines for timeline listingPOST /tenants/{tenantId}/timelines/{timelineId}/branches for branchingPOST /tenants/{tenantId}/timelines/{timelineId}/compute for compute creationcurl -X POST http://127.0.0.1:9090/tenants \
-H "Content-Type: application/json" \
-d '{"name": "my-project"}'
curl -X POST \
http://127.0.0.1:9090/tenants/TENANT_ID/timelines/TIMELINE_ID/branches \
-H "Content-Type: application/json" \
-d '{"name": "feature-branch"}'
Kubernetes
The Kubernetes deployment path is built for teams that want Rowkai as a real tenant platform. The base deployment covers the control plane, Pageserver, WAL service, and compute provisioning. Optional Cloudflare-friendly ingress can expose the control plane and per-compute GraphQL over HTTP.
rowkai namespace and S3 credentials secret.kubectl apply -k deploy/k8s/
--k8s-graphql-ingress-base-domain=gql.rowkai.example.com
--k8s-graphql-ingress-class=nginx
--k8s-graphql-cluster-issuer=letsencrypt-prod
--k8s-graphql-external-dns-target=<your-ingress-lb-hostname>
--k8s-graphql-cloudflare-proxied=true
Standard Kubernetes Ingress is for HTTP and HTTPS endpoints like the control plane and GraphQL. Raw PostgreSQL TCP traffic
should use a LoadBalancer, Cloudflare Tunnel, or another TCP-capable edge strategy.
Need Help
If you are building a secure multitenant Postgres system with GraphQL and fast branching, we can help with architecture, rollout shape, and production planning.