Everything, written down.
How to do anything in Tabla — and the questions that come up on the way there. Every guide describes the product as it works today; nothing here is braver than the code.
Start here
The first hour: signing in, the first database, the shape of the thing.
Your first database, in about ten minutes
Sign in with a magic link, make a database, name a table, add a currency and a select field, type in three records — a small plant shop's stock list.
Start from a spreadsheet you already have
Upload a CSV or Excel file, correct the field type guessed for each column, and import. A CSV has no row limit; Excel takes 20 MB and 50,000 rows a run.
Coming from Airtable: a translation guide
Base becomes database, kanban becomes board — most words survive the trip. What the importer carries across, and why formulas arrive as frozen values.
The shape of Tabla: databases, tables, records, views
Databases hold tables; tables hold fields and records; a view is a saved way of looking, never a copy. The tree, then a glossary of every word on screen.
Tabla on a phone
Tabla runs in a phone browser, no app to install. Tap to open a record and edit any field, filter, search, switch views. Which gestures replace a mouse.
Signing in with a magic link (no password)
No passwords: enter your email and click the link. Links last 15 minutes, sessions 30 days, and opening one in another browser asks for the six-digit code.
Keyboard shortcuts
Every key the grid answers to: moving and selecting, opening a cell, walking records in the panel, undo and redo. Cmd on a Mac, Ctrl on Windows and Linux.
Tables & databases
Creating, arranging, coloring — and deleting without surprises.
Creating tables: the + at the end of the tab strip
Tables are tabs: the + at the end of the strip becomes a name input, Enter creates. Rename with a double-click. Delete is owner-only, into a 7-day trash.
Database colors and icons: telling your databases apart
Give a database one of twelve colors and one of 110 icons from its menu. Where the color shows — the table-tab strip, not the top bar — and who can set it.
One timezone per database: what it changes and what it never touches
One timezone per database: what it changes for display, filters, the calendar and formulas, and why stored values, API payloads and exports stay UTC.
Deleting: what comes back and what is gone for real
Records and tables go to a 7-day trash and come back whole. Fields and databases are gone for real. The full map, plus the archive that loses nothing.
Import into an existing table: skip, map, or create each column
Import a CSV or Excel file into a table you already have: each column maps to a field, becomes a new one, or is skipped. Values are checked first.
Field types
One page per type: what it stores, how it edits, filters and reads over the API.
Field types: every kind of column, on one page
The twenty field types, grouped the way the field editor groups them, one line each — and why swapping between types that share storage is free.
The single line text field
Plain text on one line: what it stores, the require-unique option, how it edits, filters and sorts, the API shape — and when long text is the better call.
The long text field, plain and rich
Paragraphs in a cell: the grid preview, what rich formatting adds (bold, italic, lists, links), markdown storage, and what comes back over the API.
The number field
The number field: decimals, separators, and what the display rounds. How blank differs from zero in sorts and summaries, and the JSON a cell returns.
The currency field
A number wearing a symbol. Symbol, position, decimals and separators; filters and summaries behave like any number; the API returns the bare figure.
The percent field: 50 means 50%
Type 50 and the cell reads 50%, and the stored value is 50. What that means for formulas, filters, and 0-1 fractions arriving from Airtable's API.
The rating field
Whole numbers drawn as clickable stars: a maximum from 1 to 10, seven shapes, clicking the current value to clear, and filtering above or below a rating.
The duration field: reads h:mm, stores seconds
Type 1:30, 1m 24s or 90s; Tabla stores seconds, which keeps sums and averages exact. The three formats — h:mm, h:mm:ss, mm:ss — and the API shape.
The date field, with or without time
Date or date-and-time is fixed when the field is created, and why. The five display formats, how the database timezone decides today, and the API shapes.
The checkbox field
On or off, one click: the eight icons and their colors, why filtering for unchecked also catches never-set cells, and the true/false API shape.
The select field: one choice per cell, or many
Named choices with colors, one field for single and multi: renaming a choice touches no records, sorting follows choice order, and multi is a one-way door.
Email, phone and URL fields
Email, phone and web address fields: what each one checks, why a wrong-looking value is marked but never blocked, and which ones are clickable.
Attachment fields: files on a record
Attach files to a record: drag them in, thumbnails in the grid, images in a lightbox. The 100 MB per-file cap, and the hour-long signed URLs over the API.
Linked records: connect two tables
A link field holds records, not text. Creating one creates its mirror on the other table, and a column of typed names becomes links in one pass.
Member fields: assign people to records
A member field holds a person from the database's member list. It stores their email, groups a grid, stacks a board, and survives them leaving.
Button fields: a press, an action
One action on every row: open a URL built from the record's own values, or fire a webhook. Making one, who is allowed to press, and pressing over the API.
Formula fields: computed from the record itself
Arithmetic, text joining, date math, IF and SWITCH, computed by the database itself so nothing drifts. The builder, the text mode, the function list.
Lookup fields: a window onto a linked value
A lookup shows a field from the records at the other end of a link — read-only, always current, never copied. What it can surface, and how it filters.
Rollup fields: arithmetic across a link
Sum, count, average, earliest or latest across every linked record, derived at read time so the number can't drift. The five aggregations and their guards.
Changing a field's type: what converts, what refuses
Which field type changes are free, which convert your values and count the cost first, which route through text, and which are refused by name.
Require unique values
Stop two records sharing a value: a real Postgres unique index, set when you add the field. The nine types that can carry it, and what a violation returns.
The display field: what names a record
One field names each record — in link chips, search results and the record panel title. Which fields qualify, how to change it, why it can't be hidden.
Records & editing
Editing, pasting, searching — and the trash, undo and conflict-safety behind it.
Adding and editing records in the grid
No Save button: every cell commits the moment you finish it. The add-record row, the type-Enter-Tab-Escape grammar, and what Saved. actually promises.
The record panel: one record, all of it
Expand a record into a panel of every field in one column, editable in place. Four ways to open one, duplicating a record, and the link straight to it.
Pasting into the grid: what lands, what refuses
Paste a block from Excel or Sheets: one paste adds up to 5,000 new records, values that don't parse leave the cell alone, and it all undoes in one step.
The record trash: seven days to change your mind
Deleted records go to a per-table trash for 7 days and come back whole, with attachments and links. Where it lives, who can empty it, what it never holds.
Undo and redo: what Cmd+Z covers, and where it ends
Cmd+Z undoes, Shift+Cmd+Z redoes: 50 steps, this tab only, as real writes. What counts as one step, what was never undoable, and how a delete comes back.
Two people, one record: how edits don't overwrite each other
If a record changed underneath you, the write is refused and you see the latest instead. The message on screen, and if_updated_at and 409 over the API.
Seeing who else is in the table
A colored ring and a face on the cell someone else has selected, plus a row of faces for who has the table open. Nothing is stored; a closed tab clears it.
Searching a table from the view bar
Search runs on the server over the whole table, matching text, select labels, people and linked records by name. Numbers and dates want a filter instead.
Views
Grid, board, calendar and gallery — and the filters, sorts and colors views remember.
Saved views: one table, many ways of looking at it
One table, many saved views. What a view remembers — filter, sort, hidden fields, row height, color rules — and how to make, rename, switch and delete one.
The grid: the view where editing happens
Every table opens as a grid: editing in place, four row heights, and why 100,000 records stay quick — real SQL, 200 records a page, drawn on a canvas.
The board: records as cards you can drag
Stack records into a kanban board by a single select or a member field, drag a card to change its value, and hold before dragging on a phone.
The calendar: records on the days they name
Place records on a month, week or day range by any date field. Which field anchors an entry, spans with an End field, and hiding weekends.
The gallery: records as cards, led by their images
Records as cards led by a cover image, taken from the first visible attachment field. Card sizes, cover shapes, field labels, and the eight-field cap.
Filtering records: conditions that cut a table down
The Filter panel: field, operator, value, one condition per row, joined by and/or. The operator list for every field type, relative dates, nested groups.
Sorting records: order the server applies, level by level
Multi-level sorts applied by the server as SQL and saved per view: why selects sort in choice order, which field types sort, and where empty cells land.
Group by: the grid folded into labeled sections
Fold a grid into collapsible sections by status, month, owner, a linked record or a rollup — still fully editable, with per-group counts and summaries.
Hiding fields: fewer columns, same data
Hide fields per view: the data stays, the record panel still shows them, the API still returns them, and a public view link shares only the visible ones.
Color rules: paint the records that match a condition
Color every record that matches a condition — a solid marker and a light wash. Twelve colors, first match wins, saved per view, built the way a filter is.
Column summaries: the numbers under the grid
One summary per column in the grid's footer — sum, average, median, counts — computed on the server over every record the view's filter matches.
Public view links: share a view with anyone, read-only
Publish one saved view at a link anyone can open, read-only, with no sign-in: your filter, sort and colors. What stays private, and how revoking works.
Import & export
Files in, whole databases out, and what's inside the export.
CSV and Excel import: the whole wizard, column by column
A CSV has no size limit — your browser streams the rows in. Excel caps at 20 MB and 50,000 rows. Each column's guessed type is yours to correct.
Import an Airtable base: what carries over and what arrives frozen
Import an Airtable base: tables, typed fields, records, two-way links, the attachment files, rebuilt here. Formulas, lookups and rollups arrive frozen.
Export your database: one click, one zip
Export database… builds one zip — structure, every record, every attachment — downloaded in the same request. What's inside, and the curl line for it.
Inside the export zip: manifest, CSVs, attachments
What is in the export zip: manifest.json with every table, field and view, one CSV per table, attachments as real files. Enough to rebuild elsewhere.
Backups: what we keep, and what you should keep
A complete nightly backup, shipped off-site, kept for 30 days — that covers our disaster. Your one-click export is the copy that covers you.
Webhooks
Triggers, conditions, the delivery ledger, signatures — and Make and n8n, end to end.
Webhooks: send record changes to any URL
A record changes; Tabla POSTs the before, the after and what changed to your URL. Four triggers, and deliveries signed, logged, retried and replayable.
Your first webhook, end to end
Ten minutes, no code: take a URL from webhook.site, build the webhook as a sentence, send a test, then change a real record and read the delivery.
Webhook conditions: fire on the changes you mean
Narrow a webhook to the records that matter, in the Filter panel's grammar. Watched fields, what starts matching means, and conditions a clock can fire.
The delivery ledger: every send, readable
Every webhook delivery is logged: the payload sent, the response received, the four-attempt retry schedule, auto-pause after 20 failures, and Replay.
Verify webhook signatures
X-Tabla-Signature is HMAC-SHA256 over the timestamp and the raw body. Verify the exact bytes, compare in constant time — code in Node, Python and PHP.
Webhook payloads: the reference
One envelope, every trigger. A real captured payload for created, updated, matches and deleted, what each key means, and why a delivery can arrive twice.
Tabla and n8n: a webhook into a workflow
Point a Tabla webhook at an n8n Webhook node, read the record from the payload, and write back with an HTTP Request node. The whole loop, by node names.
Tabla and Make: a webhook into a scenario
Point a Tabla webhook at Make's Custom webhook module, let Send a test teach it the data structure, then write back with an HTTP module. The whole loop.
The API
Task-first guides that funnel into the full reference at /docs/api.
The API in five minutes: a key, three curls
Mint an API key, then list, create and update records with real curl requests and real responses. Every table you make is already an endpoint.
API keys: the shape, the naming, the revoking
Choosing which databases a key reaches and whether it can write, what a key is made of, why the secret is shown once, and why revoking is immediate.
Filtering records over the API
The filter is JSON: field, operator, value, joined by and/or. Every operator by field type, two levels of nesting, plus the sort and search parameters.
Paging records over the API: bookmarks, not page numbers
The records API pages by bookmark, not page number. The loop in bash and Node, page_size from 1 to 1,000, and why there is no jump to page 40.
Writing records over the API: create, update, upsert, delete
Create, update, upsert and delete records over the API: 100 to a batch, all-or-nothing, upsert matched on fields you name, delete to a 7-day trash.
Names and ids: what a rename breaks, and how not to care
Every field has an editable name and a permanent fld_ id. Which to use where, shown by renaming one live: the by-name call breaks, the by-id call doesn't.
API errors and limits: one envelope, every number
One envelope for every failure, with a machine code and a message — real 400, 401, 403, 404, 409 and 429 captures, and every enforced limit in one table.
The full API reference
Every endpoint, parameter and error, with the same filter syntax the grid and webhooks use. Signed in, it fills itself in with your own database ids and field names.
Sharing & members
Roles, invitations, profiles, and sharing a view without inviting anyone.
Members and roles: share a database by email
Invite by email as editor or viewer, and what each of the three roles can and can't do. The link works once for 7 days, and membership is per database.
What each role can do: owner, editor, viewer
Owner, editor, viewer: a matrix of who can edit, restructure, share, invite and export, plus the rule behind it. Editors build; owners remove containers.
Comments and activity: the record's memory
A conversation attached to the record it's about, and a history of who changed what. Where Activity lives, how @mentions notify, and who can see any of it.
Your name and photo: profiles
Set the display name and photo your teammates see in member cells, pickers and the account chip. The 5 MB photo cap, and why your email can't be edited.
Share a link or invite a member: which one you want
A public link shows one read-only view to anyone, no account needed. An invitation opens the whole database. How to choose, and how to take each back.
Forms: let anyone add a record, without an account
Publish one table as a public form: pick the questions, share the link, and every submission lands as an ordinary record. No account, no separate inbox.
Account & the honest bits
What's free, every limit that exists, where the data lives, and leaving whole.
What's free during the beta, and what happens after
Everything is free during the open beta, and your rate is locked when it ends. After that: Solo $0 a month, Team $6 per editor, viewers never billed.
Every limit in Tabla, in one honest table
Every enforced number in one table: 1,000,000 records per database, 100 MB a file, 100 GB an account, 600 API requests a minute — and what has no limit.
Where your data actually lives
Records in Postgres in Nuremberg, files in S3-compatible storage, nightly backups kept 30 days, and no passwords stored anywhere. The physical facts.
Leaving Tabla: export everything, then delete what you want gone
Take everything first: one zip with records, attachments and comments. Then how deleting records, tables, databases and your whole account actually works.
Concepts
Written to be useful whether or not you end up using Tabla.
What a no-code database actually is
A real database you operate through a screen instead of SQL. The three ideas it rests on — typed fields, linked records, views — and where it ends.
When a spreadsheet stops being enough
Five signals that a sheet has become a database: tabs that are tables, load-bearing VLOOKUP, copy-paste as sync, one keeper, the sort that broke a row.
Tables, not tabs: database design for spreadsheet thinkers
How to structure a database: one thing per table, a field per fact, a link where you'd have made a tab, and nothing typed that the data already knows.
One-to-many and many-to-many, explained with real tables
One-to-many and many-to-many, with real tables: which side the link lives on, what mirrors back on its own, and when the connection needs its own table.
Moving a Google Sheet into a database without breaking it
Using Google Sheets as a database: where it works, where it stops, and how to move a sheet into real tables without breaking it.
How to export an Airtable base — and what doesn't come with it
Airtable exports one grid view at a time, as CSV. How to get that into Google Sheets, Excel, JSON or another database, and what doesn't survive.
Airtable pricing: the list price, and what a team actually pays
Every published Airtable price: per-seat rates, who counts as a billable seat, the limits on each plan, and what a seat added mid-year costs.
Airtable's free plan: what you get and where it stops
Airtable's free plan: 1,000 records per base, 1 GB of attachments, 2 weeks of history, 5 editors. What the ceiling actually does when you reach it.
Lookup vs rollup: which one you actually want
A lookup shows a value from across a link. A rollup does arithmetic on the values it finds. One to one, look it up; one to many, roll it up.
Formula, lookup or rollup: which one does your math
One question sorts the three computed fields: where do the inputs live? Same record, formula. Across a link, lookup. About the group, rollup.
Send database changes to Make or n8n with a webhook
Your database POSTs to a Make or n8n URL when a record changes. What a payload needs, verifying the signature on the raw body, and duplicate deliveries.
Why page 500 is slow: offset vs keyset pagination
OFFSET makes the database count past everything it skips, so deep pages get slower. Keyset paging names the last record; page 500 costs what page 1 costs.
A database that reads right to left
Arabic in a table: direction detected per value, not per app, a chosen Arabic face, mixed Arabic-English rows. What RTL requires, and how Tabla does it.
Tabla is the database we build these on.
A no-code database with real Postgres underneath: every feature on every plan, a million records per database, and your whole database back out in one file, any day.