NocoDB

nocodb.comcontributed by Samuele Ongaro

YES

Replaceable in one session with an AI coding agent.

A spreadsheet interface over a real database: point it at Postgres or MySQL and it gives you grid, gallery and kanban views, forms and an API without moving the data.

Promptfree, for everyone, and the only version there is
Build me the spreadsheet interface I actually need instead of a hosted NocoDB: grid, kanban and form views over the database I already have, without moving the data.

Read this first: NocoDB is open source and self-hosting it is a real answer — the fee buys hosting and the team features. Build this when the schema is yours and stable, because a generated interface over ten known tables fits your data better than a generic one, and the grid is the only genuinely hard part.

STACK
- Node 20+ with Fastify, server-rendered HTML with vanilla JS for the grid
- Your existing Postgres or MySQL through its own driver; SQLite through better-sqlite3 for this tool's own state
- No client-side framework
- Caddy in front

THE DATA MODEL, MEANING THIS TOOL'S OWN
- tables: id, schema_name, table_name, label, primary_display_column, is_hidden
- columns: id, table_id, column_name, label, kind, interface, options_json, position, is_readonly, hidden_in_list
- relations: id, from_table, from_column, to_table, kind, join_table — read from the foreign keys, overridable
- views: id, table_id, kind, name, filters_json, sorts_json, group_by, visible_columns_json, row_height, is_public, public_token
- roles, permissions: role_id, table, action, columns_json, row_filter — enforced at the query layer
- audit: id, actor_id, action, table, row_pk, before_json, after_json, at — append-only
- The tool stores configuration only. The data stays where it is, which is the entire proposition

INTROSPECTION
- Read the schema: tables, columns, types, nullability, defaults, primary keys, foreign keys, unique and check constraints, enums
- Map each column type to a default interface, and store every override. Guessing is a starting point, not an answer
- Detect a schema change on boot and report it rather than adapting silently
- Never alter the source schema unless explicitly asked, and when asked, write a migration file rather than running DDL from a click

THE GRID, WHICH IS THE HARD PART
- Virtualised rows and columns, so a hundred thousand rows scroll without stutter
- Keyboard first: arrows to move, Enter to edit, Escape to cancel, Tab to advance, Shift-arrow to select a range, copy and paste a rectangle including to and from a real spreadsheet
- Frozen first column, resizable columns, adjustable row height, and column order per view
- Inline editing with the type's own editor, validated against the database's own constraints before the write
- Undo and redo, backed by the audit log
- Filters composable with and or, sorts on several columns, grouping with counts and subtotals
- Search within the view
- This is far more work than it looks. Budget most of the project for it, and do not start it until the query layer is right

VIEWS
- Grid, gallery, kanban grouped by an enum or a foreign key, calendar on a date column, and a form
- A view is a saved question, never a copy of the data
- Public views by token, read-only, with hidden columns genuinely absent from the response

FORMS
- Pick columns, set labels and help text, publish at a token URL
- Server-side validation against the real constraints, a honeypot and a rate limit
- Insert into the real table, respecting defaults and nullability

RELATIONS
- A foreign key renders as a picker with search over the target's display column
- The related rows shown inline on a record, expandable
- A many-to-many through a join table, with add and remove writing the join row
- Lookups and rollups resolved at query time, never stored

QUERY SAFETY, WHICH IS NOT NEGOTIABLE
- Every query parameterised. Filters compiled from an explicit structure, never assembled from text a caller supplied
- A statement timeout and a row cap on every list. One unbounded query on a large table takes the production database down, and this tool sits directly on it
- Read against a replica or a read-only connection where one exists, and make writes an explicit permission
- Default deny on every table until a role is granted it

OPERATIONS
- .env: TARGET_DATABASE_URL, DATABASE_PATH, BASE_URL, SESSION_SECRET, OIDC_*, HASH_SALT
- Migrations for this tool's own tables on boot, each once
- Behind whatever the company already uses for staff access; this is a direct window into production data
- Nightly backup of the configuration database; the real data is backed up by whoever owns it
- Health endpoint touching both databases

WHAT MATTERS MOST
The query layer and the grid, in that order. Get parameterisation, timeouts, row caps and permissions right before a single cell is editable — this tool is a standing door into your production database, and the grid is where all the remaining time will go.

Give me the repository, migrations, .env.example, an introspection run against a seed schema, and a README with deploy steps behind Caddy and the network placement spelled out.

What you lose

  • A mature grid — filters, sorts, grouping, row height, frozen columns — which is a great deal more work than it looks
  • Views, forms and a REST API generated over an existing schema without a migration
  • A hosted instance with updates and backups, which is what the cloud plan is for

If you would rather not build

  • Directus, if an admin API matters more than a grid

What it costs

read from their page 15 Aug 2026

PlanBilled monthlyBilled yearlyLast read
—$15/mo—15 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

NocoDB

$0

The product itself; runs over an existing Postgres or MySQL database.

nocodb/nocodbfree · open source

Baserow

$0

Open-source no-code database with its own storage and a plugin system.

baserow/baserowfree · open source

Why this verdict

our own opinion · changed only by a person

75/100

Verdict yes at 75 because the code is already free — leaving the hosted plan is Docker. Writing a grid from nothing is much harder than the score suggests.

History

tracked since 10 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 2/day
views01230 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about NocoDB

answered from the record above

Is NocoDB free?

No — the plan we track is $15 a month. Plus at $15 per seat per month billed monthly, or $135/month for unlimited seats; the software is free to self-host.

Can you replace NocoDB by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 75 out of 100, build time one session. Read what you lose before you decide.

How much does NocoDB cost?

$15 a month on Team — $180 a year. Recorded 14 Aug 2026.

What do you lose by replacing NocoDB?

A mature grid — filters, sorts, grouping, row height, frozen columns — which is a great deal more work than it looks; Views, forms and a REST API generated over an existing schema without a migration; A hosted instance with updates and backups, which is what the cloud plan is for. If any of those carry weight for you, keep paying.

Is there an open-source alternative to NocoDB?

Yes: NocoDB, Baserow. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 16 in No-code apps & databases

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc