The grid you know, with a review step.

Open a table, filter it, sort it, scroll as far as you like. Change what needs changing. Nothing reaches the database until you press ⌘S and read the statements Taula is about to run.

Reading

Fast at any row count.

The grid is an AppKit table view, not a web page. Rows load as you scroll, column widths are remembered per table, and a million-row table behaves like a hundred-row one.

  • WHERE box. Type a predicate, get the filtered table. Click a header to sort on the server.
  • ⌘F inside the page. Filters the rows already loaded and counts matches in the status bar.
  • Foreign keys are marked. An ↗ on the header, and a right-click on any FK cell jumps to the row it points at.
  • Column stats. Rows, non-null, NULL ratio, distinct count, min and max, from the header menu.
  • Cells that know what they hold. URLs open in the browser, emails open a draft, JSON pretty-prints.

Sidebar grouped by schema

Every table under its schema, with a filter box that narrows the list as you type.

Zebra rows, pending highlights, dark mode

The grid follows the system appearance. Pending edits are amber, deletes are struck through, in both.

Copy as anything

Select rows and copy them as CSV, JSON, or INSERT statements. Export a whole filtered table the same way, streamed in batches.

Snapshot before you touch it

One click creates snapshot_<table>_<time> as a copy on the same connection.

Editing

Edits are staged, not written.

Change a cell, insert a row, delete three more. All of it stays pending, visibly, until you commit. Then Taula shows the SQL it generated and asks once.

  1. Edit in place

    Double-click a cell, type, press Enter. Enter commits the cell and moves down; Esc reverts it. Set a cell to NULL from the context menu. Pending cells turn amber; deleted rows are struck through, not gone.

  2. Review the change set

    ⌘S opens a sheet with every UPDATE, INSERT and DELETE Taula generated, matched on the primary key. Read it, copy it, or discard the lot.

  3. Commit, journaled

    Each committed change lands in a per-connection journal together with its inverse SQL. Undo any entry with one click, or copy the inverse for a colleague. The journal keeps the last 500.

Tables without a primary key. SQLite rows are matched on rowid and Postgres rows on ctid, so they stay editable. A SQLite WITHOUT ROWID table without a key falls back to read-only rather than guessing.
Types

Editors that match the column.

Taula reads the declared type and picks the right editor. Values are validated before they are staged, so a typo becomes a hint, not a failed commit.

Dates, times, timestamps

A graphical picker that stages a canonical value. Typing works too, and "now", "today" and the usual ISO shapes are understood.

Booleans

One tap. On the way in, on/off, yes/no, 1/0 and true/false all parse.

UUIDs

A Generate button in the insert sheet, and validation on paste.

JSON and long text

A sheet with pretty-printing and validation. The same editor handles long text columns.

Binary

A hex dump with base64 copy, capped at 8 KiB so a large blob never freezes the window.

Insert row sheet

One field per column, defaults and NULL-ability shown, segmented pickers for booleans, inline hints for uuid, json and integers.

Import and export

CSV in, anything out.

Import a CSV with a column-mapping step, headers auto-matched, in a single transaction that rolls back on the first bad row. Export any table or result as CSV, JSON, or INSERT statements.

Import details in the docs

Structure

Alter, with the statement previewed.

The Structure tab lists columns, indexes, foreign keys and triggers, with the table's DDL beside them. Add, rename, retype or drop a column and Taula shows the ALTER it will run before it runs it. On Postgres, type changes use ALTER … USING.

What each engine supports

Keyboard

Hands stay on the keys.

Commit pending changes⌘S
Search loaded rows⌘F
Move between rows↑ ↓
Commit cell and move down⏎
Revert the cell being editedEsc
Jump to any table, column or action⌘K

Ready when you are.

One payment, every update, no subscription. Download the DMG, add a connection, and you are reading rows in under a minute.