# NocoDB in Docker: three install paths and a Sustainable Use License

> NocoDB puts a spreadsheet interface over a SQL database you host yourself, and it installs with a single Docker run. The interesting decision is not the install, it is the licence the root package declares and what the bundled binaries are for.

**nocodb/nocodb** — NocoDB turns PostgreSQL or SQLite databases into a spreadsheet-style workspace with automatic REST APIs, serving as a free, self-hostable Airtable alternative.

- Repository: https://github.com/nocodb/nocodb
- Website: https://nocodb.com
- Stars: 65,114 · Forks: 5,074
- Language: TypeScript
- License: not declared
- Published: 2026-08-04 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/nocodb-nocodb

## Three install paths, and the binaries are for testing only

The install section splits into three families, and they are not equivalent. Two are Docker runs that differ only in where the data lands, one is a bootstrap script that builds a full compose stack, and then there are the raw binaries, which the project marks with a warning: binaries are only for quick testing locally. That last caveat matters more than it looks, because the binary downloads look like a first-class option. Six of them are listed, two each for macOS arm64 and x64, Linux arm64 and x64, and Windows arm64 and x64, each fetched over plain HTTP from get.nocodb.com and then made executable. Treat those as a way to poke at the interface on a laptop, not as a deployment plan, since nothing in that table addresses persistence, upgrades or the database behind it.

## NC_DB and NC_AUTH_JWT_SECRET decide where your rows live

The shortest useful start is one container with SQLite, and it is the whole command:

```bash
docker run -d \
  --name noco \
  -v "$(pwd)"/nocodb:/usr/app/data/ \
  -p 8080:8080 \
  nocodb/nocodb:latest
```

The bind mount at /usr/app/data/ is the only thing keeping your data across container replacement, and port 8080 is where the dashboard answers. Switch to PostgreSQL and the shape stays identical except for two environment variables, NC_DB carrying the connection string and NC_AUTH_JWT_SECRET carrying the token signing secret:

```bash
docker run -d \
  --name noco \
  -v "$(pwd)"/nocodb:/usr/app/data/ \
  -p 8080:8080 \
  -e NC_DB="pg://host.docker.internal:5432?u=root&p=password&d=d1" \
  -e NC_AUTH_JWT_SECRET="569a1821-0a93-45e8-87ab-eb857f20a010" \
  nocodb/nocodb:latest
```

That example secret is a placeholder printed in the documentation. Reusing it means every installation you copy shares a signing key, so generate a fresh UUID before anything faces a network. The connection string also shows the shape: scheme, host, port, then u, p and d query parameters for user, password and database.

## Auto-upstall fetches a compose stack with Traefik, Redis and PostgreSQL

The third path is a single line that runs a remote script:

```bash
bash <(curl -sSL http://install.nocodb.com/noco.sh) <(mktemp)
```

Behind it the script generates a docker-compose file for you and installs the prerequisites, docker and docker-compose among them, then brings up NocoDB with PostgreSQL, Redis and a Traefik gateway. It also renews the SSL certificate it sets up, and running the same command a second time upgrades NocoDB to the newest version, so the upgrade path is re-running the installer rather than reading a release note. The trade is that you hand a shell script fetched over plain HTTP the ability to install packages and write configuration on the host, and it asks for a domain or subdomain as input because the Traefik gateway terminates TLS on it. A pinned image and a reviewed compose file suit a regulated deployment better.

## preinstall blocks npm, so the tree is pnpm-only

Contributors hit a wall that operators never see. The root package.json sets preinstall to npx only-allow pnpm, which aborts any install attempted with npm, and the repository is a workspace: pnpm-workspace.yaml and lerna.json sit at the top with the real code under packages/. Bootstrapping is therefore a sequence rather than one install, running the nocodb-sdk install and build first, then filtering down to nocodb, nc-mail-templates and nc-gui, then integrations:build and registerIntegrations. Day-to-day work splits the same way, with start:frontend running the nc-gui dev server and start:backend running the nocodb start script, and a separate install:local-sdk script for pointing the tree at a locally built SDK. Development is pnpm-only by construction, so an npm-based CI job or a contributor without corepack enabled will fail before compiling anything.

## Grid, Gallery, Form, Kanban and Calendar are separately shareable objects

The unit of permission is the view, not the table, and that is the design decision worth understanding before adopting it. A base holds tables, columns and rows with the usual create, read, update and delete, and rows carry typed cells including Links, Lookup, Rollup, Formula, Currency, Attachment and User. On top of that, one table can be presented as Grid, Gallery, Form, Kanban or Calendar views, and each view can be marked Collaborative or Locked, then shared either publicly or privately behind a password. Roles apply fine-grained access control at several levels. For a reader building an intake form for outsiders or a read-only dashboard for leadership, that is the point of the project. The automation side is a separate App Store of integrations grouped into three categories, and the specifics live in the documentation rather than the repository.

## The Airtable comparison the description invites and the README never makes

The repository description calls this a Free & Self-hostable Airtable Alternative, which sets up an expectation the documentation then leaves open. No feature-by-feature comparison with Airtable appears anywhere, so a reader cannot settle the question from the project itself. The real difference in approach is hosting. Airtable is a hosted service where the database, the backups and the access model belong to someone else, while this runs as a container you start, on a port you bind, against a database you choose, and the view-level permission model is the thing you administer. The same self-hosting choice brings the operational bill: nobody patches the image but you, and the licence terms are yours to read rather than a vendor's terms of service.

## develop is the default branch, and the release numbers are dates

Two facts about how this project ships matter for anyone pinning a version. The default branch is develop, not main, so a build that tracks the default branch is tracking unreleased work, and the version scheme encodes a date, with recent releases named 2026.09.1, 2026.09.0 and 2026.08.2. The last push to the repository was on 2026-09-29, and the newest of those releases landed the same day, describing MCP for Your Whole Account, the one before it a Claude Connector Marketplace listing on 2026-09-10, and the third dual-axis charts, embedded linked records and workflow folders on 2026-09-03. The direction of travel is agent access to the account rather than more spreadsheet features, which tells you what to test first if you are evaluating it now.

## The root package is private and its licence is not a standard one

The licence is the detail easiest to miss, and the two places that state it do not match in form. The GitHub facts record the licence as NOASSERTION, meaning no standard identifier could be matched, while the root package.json names Sustainable Use License directly and a LICENSE.md sits at the repository root. Sustainable Use is a source-available licence rather than an OSI-approved one, so the grant you rely on is the text in that file and not a category you can assume from the word open. The npm package is also marked private, so the root nocodb-root package is a workspace container and is not something you install from a registry. Read LICENSE.md before you build a commercial plan on it, and check the terms for the hosted offering separately if you were weighing that against self-hosting.

## Conclusion

Adopt NocoDB when the team wants a spreadsheet over a database it controls and can accept a source-available licence, and look at a permissively licensed project when the deployment has to stay unambiguously open source. Verify two things before the first deploy: read LICENSE.md in full, because the Sustainable Use License is not MIT, and confirm which branch your image was built from, since the default branch is develop rather than a release tag.

## FAQ

### What is NocoDB for?

It gives a spreadsheet interface over a database you host, so tables, columns and rows can be created, edited and sorted through a grid while the data itself stays in SQLite or PostgreSQL.

### how to install nocodb

With Docker, mounting a volume at /usr/app/data/ and publishing port 8080, which is the first of the documented methods. The dashboard is then reached at http://localhost:8080/dashboard.

### is nocodb free

The project describes itself as a Free & Self-hostable Airtable Alternative. The root package.json declares Sustainable Use License rather than a permissive one, so the terms in LICENSE.md are what decide the answer for a particular use.

### Is NocoDB better than Airtable?

The project does not make that comparison anywhere in its documentation, so the answer has to come from your own constraints. The substantive difference is that Airtable is hosted while this runs as a container you operate against a database you choose.

### how to install nocodb on windows

Through a binary download, where iwr fetches win-x64.exe or win-arm64.exe from get.nocodb.com and the resulting executable is run directly. The project marks those binaries as being only for quick testing locally, and Docker is the other documented method.

## Sources

- [Official documentation](https://nocodb.com)
- [Official README](https://github.com/nocodb/nocodb#readme)
- [Project repository](https://github.com/nocodb/nocodb)
- [Release notes](https://github.com/nocodb/nocodb/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/nocodb-nocodb
