NocoDB turns a database into a smart spreadsheet. Teams get Airtable-like grid, kanban, gallery, calendar and form views, while the data lives in a real SQL database you control. It can create its own database, or connect to an existing MySQL or PostgreSQL database and give non-developers a friendly interface to it, complete with auto-generated REST APIs and webhooks.
Use cases
- Lightweight internal tools: inventories, CRMs, content calendars, request trackers.
- A friendly admin UI over an existing app database, for support or ops staff.
- Collecting data with forms, then working with it in shared views.
- Prototyping data models before building a custom app.
Install with Docker and PostgreSQL
# /opt/nocodb/compose.yaml
services:
nocodb:
image: nocodb/nocodb:latest
restart: unless-stopped
ports:
- "127.0.0.1:8080:8080"
environment:
NC_DB: "pg://db:5432?u=nocodb&p=change-me-db&d=nocodb"
NC_AUTH_JWT_SECRET: "change-me-long-random"
NC_PUBLIC_URL: "https://data.example.com"
NC_DISABLE_TELE: "true"
volumes:
- ./data:/usr/app/data
depends_on: [db]
db:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_USER: nocodb
POSTGRES_PASSWORD: change-me-db
POSTGRES_DB: nocodb
volumes:
- ./postgres:/var/lib/postgresql/data
cd /opt/nocodb && docker compose up -d
NC_DB holds NocoDB’s own metadata (and the data of tables you create in it). Without NC_DB, it uses SQLite, which is fine for testing but not for team use. Generate secrets with openssl rand -hex 32.
HTTPS with Nginx
server {
server_name data.example.com;
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# listen 443 ssl; certbot --nginx -d data.example.com
}
See Let’s Encrypt.
First steps
- Open the URL, and create the first account. It becomes the super admin. Disable open sign-ups afterwards (Account settings), and invite users instead.
- Create a base. Build tables from scratch, import CSV or Excel, or connect an external data source.
- Add field types: links between tables, lookups, rollups, formulas, attachments, select options, ratings.
- Create views (grid, kanban, gallery, form, calendar) with filters, sorting and grouping, and share views publicly or with specific roles.
Connect an existing database (carefully)
Data sources → Connect: MySQL, PostgreSQL, SQL Server or SQLite. NocoDB reads the schema, and gives you views over the tables.
Precautions:
- Use a dedicated database user with only the privileges NocoDB needs, read-only if users shouldn’t edit. See MySQL users and privileges and PostgreSQL users.
- Point it at a replica for heavy browsing of production data. See database replication.
- Remember that edits in NocoDB change the real database, and can bypass your application’s validation logic.
APIs, webhooks and automations
Every table gets REST APIs (with Swagger docs) and API tokens. Webhooks fire on record create, update and delete, to Slack, Discord or any URL, or to automation tools like n8n. See n8n and webhooks explained.
Users and permissions
Roles per workspace and base (owner, creator, editor, commenter, viewer) control access. Keep editors to people who need them. See least privilege.
Backups
Back up the metadata database (NC_DB) and any databases you created in NocoDB, plus ./data (attachments, unless you configured S3 storage):
docker compose exec -T db pg_dump -U nocodb nocodb > /backups/nocodb-$(date +%F).sql
External databases you connected need their own backups. See backup strategy.
Updates
docker compose pull && docker compose up -d. Read the release notes, since NocoDB evolves quickly. See updating self-hosted apps.
Alternatives
| Tool | Notes |
|---|---|
| Baserow | Airtable-like, Django-based, strong self-hosting story |
| Directus | Headless CMS and data platform over SQL databases. See Directus |
| Teable | Airtable-like on PostgreSQL |
| Appsmith / Budibase | Internal tool builders |
Quick reference
| Item | Value |
|---|---|
| Port | 8080 |
| Metadata DB | NC_DB=pg://… |
| Public URL | NC_PUBLIC_URL |
| API docs | per base → REST APIs (Swagger) |
| Backup | pg_dump + ./data |
Related: PocketBase and Supabase self-hosted.