Skip to content
Go back

NocoDB DB Management System

· Updated:
By SumGuy 5 min read
NocoDB DB Management System

What is NocoDB

NocoDB is an open-source, no-code platform that puts a spreadsheet-style UI on top of your existing SQL databases. Think of it as a self-hosted Airtable: you connect it to MySQL, PostgreSQL, SQLite, or MariaDB, and it gives you a visual table editor, form builder, gallery views, and a REST/GraphQL API — without writing any SQL.

It does not store or manage data itself. NocoDB is a UI and API layer that sits in front of databases you already run. Your data stays in your SQL database; NocoDB is just how you look at and interact with it.

One of the main benefits is speed: spinning up a working CRUD interface for an existing database takes minutes, not days. You can give non-technical teammates access to specific tables through a clean interface while keeping the raw database locked down.

NocoDB is built on Node.js and deploys easily via Docker. It supports role-based access control (owner, editor, commenter, viewer), shareable views, webhooks, and a no-code form builder for data entry. All the heavy lifting — storage, replication, backups — is handled by the underlying SQL database you connect it to.

NocoDB Supported DBs

Install via docker compose

create a docker-compose.yml and add the following to it

version: "2.1"
services:
nocodb:
depends_on:
nocodb_db:
condition: service_healthy
environment:
NC_DB: "mysql2://nocodb:3306?u=nocodb&p=nocodb&d=nocodb"
image: "nocodb/nocodb:latest"
ports:
- "8080:8080"
restart: always
volumes:
- "./nc_data:/usr/app/data"
nocodb_db:
environment:
MYSQL_DATABASE: nocodb
MYSQL_PASSWORD: nocodb
MYSQL_ROOT_PASSWORD: nocodb_r
MYSQL_USER: nocodb
healthcheck:
retries: 10
test:
- CMD
- mysqladmin
- ping
- "-h"
- localhost
timeout: 20s
image: "mysql:8.0.32"
restart: always
volumes:
- "./db_data:/var/lib/mysql"

Run the following command in the terminal from the directory where the docker-compose.yml file is located:

docker-compose up -d

This command will start the NocoDB service in the background and map port 8080 of the container to port 8080 of your host machine. It will also create a data directory in the current directory and map it to the /usr/app/data directory in the container. This directory will be used to store the NocoDB data files.

wait for a few seconds and make your way to http://localhost:8080.

et voila! you have nocodb running. head to their docs sitedocs site for more info.

Things That Will Bite You

NocoDB is genuinely good, but “et voila” covers a lot of sins. Here’s what the docs don’t front-load.

The NC_DB string is unforgiving

That connection string format — mysql2://host:port?u=user&p=pass&d=db — is NocoDB’s own thing, not a standard URI. Get one character wrong and the container starts fine, logs nothing useful, and you spend 20 minutes staring at a spinner on the login page. Confirm the connection is actually working:

Terminal window
# tail logs right after docker-compose up -d
docker compose logs -f nocodb
# look for: "NocoDB started successfully"
# not for: "NC_DB connection failed" (which is weirdly quiet)

If you’re connecting to an existing external database instead of the sidecar MySQL, use NC_DB pointing at your real host. Don’t forget to open the port on the database host — NocoDB is making a network connection from inside the container, so localhost on the host machine means nothing to it.

Volumes or you will lose your metadata

NocoDB stores its own metadata (views, forms, API tokens, user accounts) separately from your actual database. That lives in /usr/app/data inside the container. The Compose file above maps it correctly — but if you nuke the container without the volume, you lose all your configured views, API keys, and user accounts. Your underlying SQL data is fine; your NocoDB setup is gone. Back up nc_data/ alongside your database dumps.

Role-based access gotcha

The “viewer” role can see data but can’t be restricted to specific rows — only specific tables/views. If you’re giving a non-technical colleague access to a customer table and don’t want them seeing everything, create a filtered view first, then share that view. Sharing the base table directly gives them the full dataset.

Hooking NocoDB’s API into a script

One of the more useful things NocoDB gives you for free is a REST API on top of whatever database you point it at. Here’s a quick curl to pull rows from a table once you’ve grabbed your API token from the UI (Account → Team & Auth → API Tokens):

Terminal window
# list rows from a table — replace TABLE_ID and your token
curl -s \
-H "xc-token: YOUR_API_TOKEN" \
"http://localhost:8080/api/v1/db/data/noco/YOUR_PROJECT_ID/TABLE_ID?limit=25" \
| jq '.list[] | {id, title}'

The project ID and table ID are in the URL when you’re looking at the table in the browser. Combine this with a cron job or a tiny Python script and you’ve got a no-code database with a real API — which is honestly the use case that makes NocoDB shine beyond “Airtable but free.”


Share this post on:

Send a Webmention

Written about this post on your own site? Send a webmention and it'll show up above once verified.


Previous Post
Local Vision LLMs Worth Running in 2026
Next Post
Ollama Beyond the Basics: Model Management, Custom Models, and Optimization

Discussion

Powered by Garrul . Sign in with GitHub or Google, or post anonymously.

Related Posts