What NocoDB Does
- Spreadsheet Interface: Familiar grid view with sorting, filtering, grouping, and conditional formatting
- Multiple Views: Grid, Kanban, Gallery, Form, and Calendar views for the same data
- Connect Any Database: Works with existing MySQL, PostgreSQL, SQL Server, SQLite, and MariaDB databases
- Auto-Generated API: REST and GraphQL APIs created automatically for every table
- Field Types: 20+ types including text, number, date, attachment, checkbox, rating, barcode, QR code, and formula
- Automations: Webhook triggers and workflow automations for notifications and integrations
- Collaboration: Real-time multi-user editing with comments and audit trail
- Forms: Public forms for data collection with customizable fields and validation
- Import/Export: Import from Airtable, CSV, Excel, and JSON
Architecture
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Web UI │────▶│ NocoDB │────▶│ Your SQL DB │
│ (Vue.js) │ │ Server │ │ MySQL / │
└──────────────┘ │ (Node.js) │ │ PostgreSQL /│
└──────────────┘ │ SQLite │
└──────────────┘Self-Hosting
Docker Compose
services:
nocodb:
image: nocodb/nocodb:latest
ports:
- "8080:8080"
environment:
NC_DB: "pg://db:5432?u=nocodb&p=nocodb&d=nocodb"
depends_on:
- db
volumes:
- nocodb-data:/usr/app/data
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: nocodb
POSTGRES_PASSWORD: nocodb
POSTGRES_DB: nocodb
volumes:
- pg-data:/var/lib/postgresql/data
volumes:
nocodb-data:
pg-data:Connect Existing Database
# Connect to your existing PostgreSQL
docker run -d --name nocodb
-p 8080:8080
-e NC_DB="pg://your-db-host:5432?u=user&p=password&d=dbname"
nocodb/nocodb:latestNocoDB reads your existing tables and presents them as spreadsheets — no data migration needed.
Key Features
Views
| View | Best For |
|---|---|
| Grid | Spreadsheet-like data editing |
| Kanban | Project management, status tracking |
| Gallery | Visual cards (products, contacts) |
| Form | Data collection, surveys |
| Calendar | Date-based scheduling |
Formula Fields
// String operations
CONCAT({First Name}, " ", {Last Name})
UPPER({Email})
LEFT({Phone}, 3)
// Date operations
DATEADD({Start Date}, 30, "days")
DATETIME_DIFF({End Date}, {Start Date}, "hours")
// Conditional
IF({Status} = "Active", "✅", "❌")
SWITCH({Priority}, "High", "🔴", "Medium", "🟡", "Low", "🟢")REST API
# List records
curl "http://localhost:8080/api/v1/db/data/noco/project/table"
-H "xc-token: YOUR_API_TOKEN"
# Create record
curl -X POST "http://localhost:8080/api/v1/db/data/noco/project/table"
-H "xc-token: YOUR_API_TOKEN"
-H "Content-Type: application/json"
-d '{"Name": "New Item", "Status": "Active"}'
# Filter and sort
curl "http://localhost:8080/api/v1/db/data/noco/project/table?where=(Status,eq,Active)&sort=-Created"
-H "xc-token: YOUR_API_TOKEN"Airtable Migration
One-click import from Airtable:
- Get your Airtable API key
- Paste it in NocoDB import wizard
- Select bases to import
- All data, views, and field types are preserved
NocoDB vs Alternatives
| Feature | NocoDB | Airtable | Teable | Baserow |
|---|---|---|---|---|
| Open Source | Yes | No | Yes | Yes (MIT) |
| GitHub Stars | 62.7K | N/A | 21.1K | 12K |
| Connect existing DB | Yes | No | External only | No |
| Auto API | REST + GraphQL | REST | REST | REST |
| Self-hosted | Yes | No | Yes | Yes |
| Row limit | Unlimited | 125K/base | Unlimited | Unlimited |
| Airtable import | Yes | N/A | No | Limited |
FAQ
Q: How does NocoDB differ from Teable? A: NocoDB connects to existing databases and adds a visual UI on top, making it great for adding a frontend to legacy systems. Teable uses PostgreSQL as native storage so you can query data directly with SQL. Their positioning differs slightly.
Q: Will connecting to an existing database modify my data?
A: Read-only connections won't modify anything. If you edit data through the NocoDB UI, changes are written directly to your database. NocoDB creates a small number of metadata tables (prefixed with nc_) in your database.
Q: How does it handle performance on large tables? A: NocoDB uses pagination and virtual scrolling, so browsing large tables (millions of rows) stays smooth. Query performance depends on the underlying database and its indexes.
Sources & Credits
- GitHub: nocodb/nocodb — 62.7K+ ⭐
- Website: nocodb.com