Why self-host a database tool like Teable
Airtable-style hosted tools share three structural limitations: your data lives on third-party servers, pricing scales with users or rows, and direct SQL access is often locked behind higher tiers.
Teable removes all three. Installed on your VPS, it creates its own PostgreSQL tables — not a UI wrapper around an existing database, but a schema you own and can query with any SQL client. Real-time updates use WebSockets: multiple collaborators edit the same table without pressing F5. And because it is AGPL-3.0, no data row leaves your infrastructure.
What you get with self-hosted Teable
- PostgreSQL-native storage — your tables live in your own database, accessible via SQL or any BI tool.
- Real-time collaboration — simultaneous editors, changes visible instantly without refresh.
- Multiple views — Grid, Kanban, Gallery and Form on the same dataset, no data duplication.
- Auto-generated REST API — every table immediately exposes a REST API with an access token, usable in n8n, Zapier or your own code.
- Formula engine — 100+ functions (SUM, IF, LOOKUP, CONCATENATE…) for computed fields and cross-table references.
- Granular permissions — viewer, editor or owner roles per workspace, per base or per table.
- AGPL-3.0 licence — no telemetry, no cloud account, data 100% on your VPS.
Deployment architecture
Teable runs on your VPS with three Docker containers:
- teable-db: PostgreSQL 15.4, named volume teable-db for persistence.
- teable-cache: Redis 7.2.4 with AOF persistence and password authentication.
- teable: the application server (Next.js + NestJS), listening on port 3000 loopback, exposed by nginx with HTTPS.
The PUBLIC_ORIGIN variable anchors the instance's public URL — ServOrbit injects it automatically from the subdomain or custom domain you configured. BACKEND_SESSION_ORIGIN_CHECK_ENABLED=false ensures compatibility with the nginx reverse proxy. All images are pinned to exact versions for reproducible deployments.
Teable vs NocoDB vs Grist: which one to pick
The three tools in the ServOrbit catalogue cover slightly different needs:
- NocoDB connects to an existing database (PostgreSQL, MySQL…) and wraps it in a collaborative spreadsheet UI. Use it when you already have a schema and want to add an interface.
- Grist uses a Python-formula document model. Its calculations are more powerful than a standard spreadsheet, ideal for analysts.
- Teable creates its own PostgreSQL tables from scratch and focuses on real-time visual collaboration. It is the closest to the Airtable experience, with the advantage of SQL portability.
All three can run on separate VPS instances if your needs require it.
First deployment on ServOrbit
From your ServOrbit client area, open Marketplace → Databases → Teable and confirm the order. ServOrbit provisions a VPS, installs Docker and starts the three containers. You receive a notification when the instance is ready with the access URL.
Navigating to that URL shows Teable's registration page — the first account you create becomes the workspace owner. There is no preset admin account: you choose your credentials at install time. Click New Base, name your base, define your tables and start inviting collaborators.
Using the auto-generated REST API
Every Teable table automatically exposes a REST API. To use it, open Settings → API Tokens in the Teable interface and generate an access token. The API follows standard REST conventions:
GET /api/table/{tableId}/record
POST /api/table/{tableId}/record
PATCH /api/table/{tableId}/record/{recordId}
DELETE /api/table/{tableId}/record/{recordId}Connect this API directly to n8n, Zapier or your own backend application to trigger data updates, import form responses or sync records with other services.
Updating and maintaining Teable
To update Teable, edit the Docker recipe to point to the new image tag (ghcr.io/teableio/teable:<new-tag>) and restart:
docker compose pull
docker compose up -dTeable runs its PostgreSQL schema migrations automatically on startup — your data in the teable-db volume is preserved. Check the GitHub releases page for the latest tag before updating.