Self-hosted alternatives to Airtable: NocoDB and Baserow compared

NocoDB and Baserow on one Debian 13 server, each holding the same base of customers, projects and hours with Swedish text, kronor, files, a lookup, a rollup, forms, shared views, two users and a 12,000-row table, compared on memory, speed, Airtable formulas, imports, exports, Swedish and cost, next to what Airtable offers.

Tested on NocoDB 2026.09.1 and Baserow 2.4.1 on Debian 13 (trixie) on a Melonslab server Updated October 14, 2026

Recommended server for this guide

SSD RAID 1 · ECC DDR4 · 10 Gbit

VC-P Alloy · 2 vCPU · 8 GB Memory · 60 GB Storage

Month to month, no lock-in 7-day money-back guarantee

€8.99/mo

Deploy now
On this page

The short answer

Pick NocoDB if you want the most of Airtable's daily features for free: kanban, calendar, gallery and form views, comments, Editor, Commenter and Viewer roles, export to Excel and a Swedish interface, in about a quarter of Baserow's memory. Its licence lets you use it inside your own company, but not sell it as a service, and it has no free two-factor sign-in.

Pick Baserow if an open-source licence matters, or you want two-factor sign-in and automations without paying: its MIT core includes both, and it was the only one that imported a real Airtable base from a share link. Kanban, calendar, comments and roles other than Admin and Member cost extra, it has no Swedish interface, and it needed over 2 GB of memory doing nothing.

Neither runs Airtable formulas unchanged, and neither has Airtable's interfaces.

What we tested

We installed both on the same fresh Melonslab VC-P Alloy (2 vCPU, 8 GB) with Debian 13, one after the other, by following our guides NocoDB with rootless Podman and Baserow with rootless Podman step by step. Each ran under a user of its own, behind the same Caddy. Every step worked as written.

Then we built the same base in both, through each app's API and checked it in the browser:

  • Kunder, 200 customers with Swedish names and towns such as Örebro and Västerås, email, phone and a date;
  • Projekt, 600 projects linked to a customer, with a status, start and deadline dates, a budget in kronor, a paid checkbox, a Swedish description and a PDF or an image on five of them;
  • Timmar, 1,200 time entries linked to a project, with hours and an hourly rate in kronor;
  • a lookup of the customer's town, a rollup summing each project's hours, and formulas for the budget with VAT and the amount per entry;
  • grid, kanban, gallery, calendar and form views, a public form and a shared read-only view;
  • an admin, Anna, and a second user, Erik, with a smaller role, and comments from both;
  • an automation, an API token with REST calls, and a webhook;
  • a separate table, Transaktioner, with 12,000 rows, for speed.

We then timed filters, sorts and searches on the 12,000 rows through the API and in a browser, tried 16 common Airtable formulas in each, imported an Airtable export and a real shared Airtable base, exported tables, rebooted the server, measured memory at rest and under load, and ran each guide's backup.

Airtable itself was not tested. We did not sign up. What this page says about it comes from Airtable's own pages, linked where we use them and read on 14 October 2026.

The numbers

NocoDB 2026.09.1Baserow 2.4.1
Containers2: NocoDB, PostgreSQL 172: Baserow, PostgreSQL 17
Memory at rest after a reboot553 MB (NocoDB 548)2.24 GB (Baserow 2.23)
Memory at the peak of use1.09 GB2.34 GB
Images on disk1.37 GB2.12 GB
Data after the test118 MB744 MB
From useradd to the login page1 minute 27 seconds6 minutes 2 seconds
Kanban and calendar viewsfreepaid, Premium
Comments on rowsfreepaid, Premium
Roles, freeOwner, Creator, Editor, Commenter, ViewerAdmin, Member
Two-factor sign-inpaidfree
Automationsnone in the free editionfree
Airtable formulas that worked unchanged8 of 160 of 16
Import of a shared Airtable baseneeds an Airtable tokenyes, from the share link
ExportCSV, Excel, JSONCSV; Excel, JSON and XML paid
Swedish interfaceyesno
LicenceSustainable Use License, not open sourceMIT, paid features under Baserow's own licence

Memory is the sum of each app's containers, measured with podman stats after a reboot, once Baserow had finished its start-up work, with each app opened once in a browser. The peak is the highest reading while each app got about five API requests a second for three minutes: filters, searches, page reads, new time entries and edited projects. Times are how long the guide's commands took to run, mostly downloading images and, for Baserow, setting up its database.

Most of Baserow's data is not ours: it loads 158 templates into its database and data volume on start. Our own data was under 50 MB in both.

Setup

Both are two containers in a pod behind Caddy, and both guides worked as written. The first account becomes the admin in both, so both guides create it over an SSH tunnel and close sign-up before Caddy shows the app to anyone.

  • NocoDB answered its health check 87 seconds after useradd, most of it downloading 1.4 GB of images.
  • Baserow took six minutes, as its guide says: 2.1 GB of images, then its database. It answers only on the address in BASEROW_PUBLIC_URL, so its guide changes that line when Caddy goes in front.

One thing the Baserow guide does not warn about: Baserow syncs its 158 templates again every time it starts, not only the first time. After our reboot, that kept one CPU core busy for about five minutes, and after a restart earlier in the test, for about fifteen. During that time Baserow worked in the browser, but webhooks, exports and the Airtable import waited in the same queue: a CSV export sat at "pending" and our webhooks arrived only when the sync was done. Baserow's log names the setting that turns it off, BASEROW_TRIGGER_SYNC_TEMPLATES_AFTER_MIGRATION=false; we did not test it.

Building the base

Both have the field types we needed: text, long text, email, phone, single select, date, checkbox, attachment, links between tables, lookups, rollups and formulas.

  • Money. NocoDB has a Currency field with a currency and a locale; with SEK and Swedish, our budgets showed as "407 000,00 kr". Baserow has no currency field: a Number with " kr" as suffix and a space as thousands separator showed the same.
  • Links. A project links to one customer in both, and both added the list of projects on the customer. NocoDB calls the field type Links, Baserow Link to table.
  • Lookup and rollup. The customer's town on each project and the sum of each project's hours worked in both and kept themselves up to date when we added hours.
  • Attachments. Both took our PDF and image. In NocoDB the guide's NC_SECURE_ATTACHMENTS=true makes a file's fixed address answer 404 and hands out links that expire. In Baserow, anyone with a file's address can open it without signing in, as its guide says; so can anyone with the address of a CSV export.

Writing our 14,000 rows through the API took about 90 seconds in NocoDB, which takes at most 100 rows a request, and 5 minutes in Baserow, which takes 200 but was slow when rows carried a link: the 1,200 time entries alone took almost 3 minutes there, against 10 seconds in NocoDB.

Views

NocoDBBaserow
Gridfreefree
Galleryfreefree
Formfreefree
KanbanfreePremium
CalendarfreePremium
Mapfreeno
List, Timeline, GanttpaidTimeline in Premium

NocoDB's kanban grouped our projects by status, with each card showing its image or a PDF icon, and its calendar placed them by deadline. In Baserow, the kanban and calendar are in the view menu with a lock. Its API let us create them anyway, but opening one showed "Available in premium version".

Speed with 12,000 rows

Through the API, both answered quickly. These are medians of seven calls from the server itself through Caddy, each returning one page of rows from Transaktioner:

NocoDBBaserow
First page107 ms119 ms
Filter, Kategori is Hyra (991 rows)102 ms139 ms
Sort by amount, largest first160 ms159 ms
Filter and sort94 ms179 ms
Text contains "Göteborg" (586 rows)124 ms214 ms
A page at row 10,000172 ms147 ms

In a browser, Baserow felt quicker. We drove Chromium on a desktop computer with Playwright, connected to the server through an SSH tunnel, with the browser's cache warm:

NocoDBBaserow
Open the grid in a new tab, until the rows show2.6 s1.9 s
Open the filtered and sorted view in a new tab2.5 s1.7 s
Switch to that view inside the app1.0 s0.4 s
Search "Göteborg" in the toolbar, until the answer0.5 s0.8 s
Scroll from the top to row 12,0000.2 s0.5 s

On a first visit, without the cache, NocoDB's pages load about 17 MB in some 950 files, and Baserow's about 13 MB in 190. NocoDB draws its grid on a canvas, which scrolled smoothly through all 12,000 rows; Baserow draws it as a web page. NocoDB reopened a grid where you had scrolled to, and Baserow reopened the view you had open last.

Neither search ignores å, ä and ö: goteborg found nothing in either, while Göteborg and göteborg found the same rows. NocoDB's toolbar search looks in one field you pick; Baserow's looks in all fields, so it found 1,143 rows where the town or the text said Göteborg, against 586 for the text alone.

Airtable formulas

We wrote 16 common Airtable formulas exactly as Airtable's formula reference has them, and added each to both apps.

NocoDB uses Airtable's {Field} syntax, and 8 of the 16 worked unchanged: &, DATETIME_FORMAT, DATETIME_DIFF, ROUND, UPPER(LEFT()), LEN, SWITCH and REGEX_MATCH, all with the right results. The other 8 were refused:

  • a comparison with =, as in IF({Status} = "Klar", …): NocoDB wants ==, which fixed this one, AND and the BLANK() test;
  • CONCATENATE, which is CONCAT in NocoDB;
  • DATEADD({Start}, 30, 'days'), which wants 'day';
  • SUBSTITUTE, which is REPLACE;
  • IS_AFTER and TODAY(). IF(DATETIME_DIFF({Deadline}, NOW(), 'days') > 0, 1, 0) gave the right answer; the shorter {Deadline} > NOW() was accepted but answered "true" for deadlines that had passed;
  • WORKDAY, which has no counterpart.

Baserow refused all 16 as written, because it refers to fields as field('Status') instead of {Status}. With only that changed, 5 worked: IF with =, DATETIME_FORMAT, ROUND, UPPER(LEFT()) and AND. The rest needed Baserow's own functions: concat instead of &, field('Start') + date_interval('30 days'), date_diff('dd', …), today(), length, replace, contains or left instead of REGEX_MATCH, isblank, and nested ifs instead of SWITCH, which Baserow does not have. WORKDAY has no counterpart here either.

So a base with many formulas means rewriting them by hand in both; in NocoDB the changes are smaller.

Forms and shared views

Both did what we needed for free.

  • Public form. We sent a project from a private window without an account. NocoDB answered "Successfully submitted form data", Baserow "Thanks for submitting the form!", and the row was in the table, with å, ä and ö intact. Fields added to a Baserow form through its API start as required; we had to make them optional.
  • Shared read-only view. Both gave a link to a grid without the budget fields. Typing in a cell as a visitor changed nothing in either, and the hidden fields were not in the page.

Users and roles

We invited Erik in both, without email, as each guide describes.

  • NocoDB has five roles in the free edition. As an Editor, Erik could add projects but not fields: "You do not have permission to add a new column with the roles: Editor."
  • Baserow has Admin and Member in the free edition; Editor, Commenter and Viewer carry a lock in the interface and need the paid Advanced plan. Its API accepted Erik as a Viewer anyway, and then let him add rows and fields: in the free edition, the role is not enforced. Do not rely on it.

Two-factor sign-in is free in Baserow and paid in NocoDB. Single sign-on is paid in both.

Comments, automations, API and webhooks

  • Comments. Anna and Erik commented on a project in NocoDB. In Baserow, row comments are Premium; the API answered "The related user does not have access to these features."
  • Automations. Baserow has its own, free: our workflow, started when a row is created, set the status of every project sent through the public form to Idé within two seconds. We found no automations in NocoDB's free edition: its Create New menu offered tables, documents and folders, and dashboards and sync with a paid badge.
  • API. Both have a full REST API with tokens: an xc-token in NocoDB, a database token in Baserow whose rights you can limit per table and per create, read, update and delete.
  • Webhooks. Both called our test receiver when a project was added, NocoDB within half a second and Baserow within about a second, once its template sync was done.

One surprise affects both guides: under rootless Podman, a container sees the server's own public address as its own. A webhook to another app on the same server by its public name, such as n8n, failed: Baserow refused the address with "Invalid URL", and NocoDB's calls ended in "connect ECONNREFUSED". Webhooks to other servers are not affected. On our test server, a line in the user's ~/.config/containers/containers.conf that gives the containers addresses of their own let both reach it. That line is now the second fix in step 8 of the Podman guide, and the NocoDB and Baserow guides use it in their webhook steps.

Import from Airtable

A shared Airtable base. Airtable publishes its templates as shared bases, so we could test both importers with Airtable's own "Content calendar" template, from its public share link, without an Airtable account.

  • Baserow imported it in 30 seconds: two tables with their rows, single and multiple selects, dates, number fields, and the images, copied to our server. Grid and gallery views came with it. It also made a table, Airtable import report, listing what it left out: the collaborator field, three formula fields, the calendar view, filters and grouping that used those fields, and all automations and interfaces.
  • NocoDB refused it: "An API key is required to connect to Airtable". Its documentation says a shared base needs an Airtable personal access token, and only a shared view can be imported without one, so the importer needs an Airtable account.

An Airtable CSV export. Airtable exports one CSV file per view. We built one by hand for 200 projects, and say plainly: this is a constructed export, not one from Airtable. Airtable's help page says attachments come out as "a filename and URL"; it does not document the rest, so we guessed: the linked customer as its name, dates as 6/21/2026, the budget as SEK 407,000.00, the checkbox as checked, a lookup as plain text.

Both took the file, and both made every column a text field. When we changed the types afterwards, each lost something different: NocoDB turned the statuses into options, checked into ticks and SEK 407,000.00 into 407000, but emptied the dates; Baserow read the dates, given the US format, and the ticks, but emptied the budgets. Neither turned the customer names back into links. Before a move, export dates in ISO format and amounts without the currency, or tidy the CSV files first.

Export

NocoDBBaserow
CSVyes, per viewyes, per table or view
ExcelyesPremium
JSONyesPremium
XMLnoPremium

NocoDB's CSV kept the kronor as "407000,00 kr" and gave linked time entries as a count; Baserow's had "407 000,00 kr" and the names of the linked rows. Neither file holds users, comments or history: an export is a copy to read, not a backup.

Swedish

  • NocoDB comes in Swedish, translated by AI, which each user picks in the language menu. We saw "Skapa ny", "Ny post" and "Filtrera", and a few odd words: a kanban column said "1/1 Spela in" for one record.
  • Baserow has no Swedish. Its login page offered English, French, Dutch, German, Spanish, Italian, Polish, Korean and Ukrainian.

In both, your own tables, fields and data stay in the language you write them in.

Resources

  • NocoDB is a Node.js app. It used about 550 MB at rest, grew to 1.09 GB under our load and stayed near that a minute later. Its guide measured about 850 MB in normal use.
  • Baserow runs its web server, background workers and Redis in one container, which used 2 GB as soon as it started and 2.24 GB at rest. Under load it barely moved, to 2.34 GB. Its guide asks for at least 4 GB of memory on the server.

Both ran side by side on our 8 GB server with room to spare.

Updates and backups

Both guides pin an exact version, since both change their database when they update, and both take a backup first. NocoDB publishes a release every two or three weeks; Baserow every few weeks, and says you can go straight to the newest version from any older one. PostgreSQL 17 updates itself in both.

Each backup is a database dump, the data volume and a key. Ours were 1.9 MB for NocoDB and 122 MB for Baserow, of which 78 MB were the files that came with Baserow's templates. Both apps came back by themselves after the reboot. We did not restore these backups in this test; each guide did, on its own server.

Licence and cost

We read the licence texts and pricing pages on 14 October 2026. Prices are in US dollars per user a month.

  • NocoDB is made by NocoDB, Inc. Since version 0.301.0 in January 2026, it is under the Sustainable Use License, which is not an open-source licence: "You may use or modify the software only for your own internal business purposes or for non-commercial or personal use." Versions up to 0.265 remain under the AGPL. The free Community edition has unlimited records and users. According to NocoDB's pricing page, Business, at 24 dollars billed yearly, adds single sign-on, table and field permissions and sync with other apps, and Scale, at 45 dollars for at least 3 users, adds audit logs and row-level permissions. In our tests, two-factor sign-in, timeline and Gantt views and the AI features also needed a licence.
  • Baserow is made by Baserow B.V. in the Netherlands. The core is under the MIT licence; the premium and enterprise code in the same image is under Baserow's own licences. Its pricing page puts Premium at 10 dollars billed yearly or 12 monthly, with kanban, calendar and timeline views, comments and Excel, JSON and XML export, and Advanced at 18 or 22 dollars, with roles, single sign-on and audit logs; Enterprise is on request. Baserow says the self-hosted version "will never have row, storage, or API request limitations".

For a company keeping its own data, both licences allow it for free. If you want to run the app for your customers as a paid service, NocoDB's licence does not allow it; Baserow's MIT core does.

Airtable today

This comes from Airtable's own pages, read on 14 October 2026, not from our tests.

  • No server of your own. "Airtable is a cloud-based SaaS product, and we do not plan on offering an on-premise or self-hosted solution" (Airtable).
  • Plans. Airtable's plans overview lists Free with 1,000 records and 1 GB of attachments per base, 1,000 API calls a month and two weeks of history; Team at 20 dollars per collaborator a month billed yearly, or 24 monthly, with 50,000 records and 20 GB per base and a year of history; Business at 45 or 54 dollars with 125,000 records and 100 GB per base; and Enterprise Scale on request. The pricing page says read-only collaborators cost nothing on Team and Business. We saw prices only in US dollars.
  • Automations. 100 runs a month on Free, 25,000 on Team and 100,000 on Business, per workspace (Airtable).
  • Views. Grid, form, calendar, gallery, kanban, timeline, list and Gantt; timeline and Gantt need a paid plan, and the calendar is limited on Free, according to the plans overview and the Gantt page.
  • Where the data is. Choosing Europe is part of Enterprise Scale only, and even then some data, such as user and sign-in data, stays in the United States (Airtable).
  • Language. "You can display Airtable's GUI in English (United States), French, German, or Spanish" (Airtable).
  • Export. One CSV file per view; "exporting a full base as a single file is not supported", comments are not included, and attachment links in the file expire after a few hours (Airtable).
  • API. "The API is limited to 5 requests per second per base" (Airtable), and webhooks made with a personal access token expire after 7 days (Airtable).
  • Single sign-on with SAML is in Business and Enterprise Scale (Airtable), and every plan includes credits for its AI, Omni.

What you give up compared with Airtable

On your own server, the data stays in Sweden, the cost is a fixed server price instead of one per user, and there are no limits on records, attachments or API calls. But be honest about what you leave behind:

  • Interfaces. Airtable's Interface Designer builds simple apps on a base. NocoDB's pricing page allows two per workspace in its free edition, and Baserow has an application builder, but our Airtable import brought no interfaces across, and we did not compare them.
  • Formulas. None of Airtable's formulas carried over in Baserow, and half of them needed changes in NocoDB. WORKDAY had no counterpart in either.
  • The migration. Only Baserow imported a shared base without an Airtable account, and it left out the collaborator field, formula fields, the calendar view, automations and interfaces, which it listed for us.
  • Automations and AI. Airtable has automations and AI on every plan. Baserow's automations are free; NocoDB's free edition has only webhooks. AI is paid in both.
  • Timeline and Gantt. Paid in all three, and Baserow has no Gantt view.
  • Running it. Updates, backups and the server are yours, and Baserow needs over 2 GB of memory for it.

Which one to pick

For a team that lives in kanban boards and calendars: NocoDB. Kanban, calendar, gallery and form views, comments, five roles, Excel export and a Swedish interface are all free, and it runs in about half a gigabyte at rest. Its weak points are a licence that is not open source and forbids reselling it, no free two-factor sign-in, no automations beyond webhooks, an Airtable importer that needs an Airtable account, a Swedish translation with odd words, and the {Deadline} > NOW() comparison that gave wrong answers. Follow the NocoDB guide; it runs comfortably on a VC-P Alloy, next to other apps.

For an open-source licence, two-factor sign-in and automations: Baserow. Its MIT core, built-in automations and free two-factor sign-in, and the only working import of a shared Airtable base, make it the safer long-term choice, and the one you may build a service on. Its weak points are kanban, calendar, comments and real roles only in paid plans, no Swedish, files that open for anyone with the address, over 2 GB of memory at rest, and a template sync after every start that holds up webhooks and exports for several minutes. Follow the Baserow guide, on a VC-P Alloy.

Moving a base with many formulas from Airtable: plan on rewriting them in either. NocoDB's syntax is closer to Airtable's; Baserow's importer brings the data, files and views across from a share link.

Even both peaks together came to about 3.4 GB, so one VC-P Alloy runs either of them, or both, as on our test server.

Run it on your own server

SSD RAID 1 · ECC DDR4 · 10 Gbit

VC-P Alloy

€8.99/mo

vCPU
2
Memory
8 GB
Storage
60 GB
Transfer
10 TB
Performance
SSD · RAID 1
  • Full root access
  • Native /64 IPv6
  • RAID-protected storage
  • Malmö, Sweden
  • Month to month, no lock-in
  • 7-day money-back guarantee
All guides