NocoDB turns a relational database into a spreadsheet-style grid with forms, kanban boards, calendars, and a REST API for every table. People use it as an Airtable replacement, a small CRM, a content inventory, or a shared status board that non-technical colleagues can actually use.
What it is
It reads and writes your own database — SQLite by default, Postgres or MySQL if you point it at an existing one. Every table becomes a grid view, a form, and an API endpoint, and the API is the reason it's a real tool rather than a toy.
Before you start
- The default image is SQLite, which is genuinely fine for hundreds of thousands of rows and a few dozen concurrent users. Move to Postgres before you build something other people depend on.
- Public sharing links are off by default in recent versions. If you enable them, remember the shared link bypasses your auth entirely — scope it to read-only views you actually intended to publish.
- Webhooks and automations are the underrated part. They replace a lot of glue scripts.
1 — Write the compose file
services:
nocodb:
image: nocodb/nocodb:latest
container_name: nocodb
restart: unless-stopped
ports:
- "127.0.0.1:8080:8080"
environment:
NC_DB: "file:/usr/app/data/noco.db"
NC_AUTH_JWT_SECRET: CHANGE_ME_32_chars_minimum
NC_PUBLIC_URL: https://base.example.com
NC_DISABLE_TELE: "true"
NC_DASHBOARD_URL: https://base.example.com
TZ: UTC
volumes:
- ./data:/usr/app/data
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/"]
interval: 30s
timeout: 5s
retries: 3
2 — Start it
mkdir -p ~/services/nocodb/data
cd ~/services/nocodb
docker compose up -d
docker compose logs -f nocodb | grep -i "noco db is ready\|error"
3 — First-run setup
- Create the admin account at
https://base.example.com. There is no default — the first account is the super admin. - Create a project (that's NocoDB's word for a database), then a table. If you're starting fresh, create the table from a template for invoices, contacts or issues rather than from scratch.
- Design the views you need: Grid for the data itself, Form for other people to submit into it, Kanban for a board with a status column, Calendar for anything with dates.
- Build the form view and share the link. For a lot of use cases this is the entire product: a URL colleagues fill in that lands straight in your database.
- Open the API docs from the panel menu and note your
x-codb-api-token. Every table is available as REST endpoints, which turns the app into a backend for something else you build.
4 — Automate it
# read every row as JSON
curl -s -H "xc-token: CHANGE_ME" \
"https://base.example.com/api/v2/tables/tbl_abc123/records?limit=25" | jq
# create a record
curl -s -X POST \
-H "xc-token: CHANGE_ME" -H "Content-Type: application/json" \
-d '{"Title":"New task","Status":"Open"}' \
"https://base.example.com/api/v2/tables/tbl_abc123/records"