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

  1. Open the URL, and create the first account. It becomes the super admin. Disable open sign-ups afterwards (Account settings), and invite users instead.
  2. Create a base. Build tables from scratch, import CSV or Excel, or connect an external data source.
  3. Add field types: links between tables, lookups, rollups, formulas, attachments, select options, ratings.
  4. 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.

  • Self-Hosting
  • Databases
  • No-Code