Fast should not mean fragile.
A database client has four ways to write: the grid, the query editor, the assistant and an external agent. Taula puts something between you and the database on every one of them, and keeps a record of what went through.
What stands between a keystroke and the database.
| Surface | Before it writes | After it writes |
|---|---|---|
| Data grid | Edits stay pending. ⌘S shows the generated SQL for review. | Journaled with inverse SQL. One-click undo. |
| Query editor and ⌘K | UPDATE or DELETE without WHERE, TRUNCATE and DROP TABLE ask for confirmation. Production connections add a second warning. | In history. Undo for query-tab DML is on the roadmap, not shipped. |
| Assistant | Reads freely. Every write is a proposal you approve, and it passes the same guardrails. | Approved proposals are journaled like grid edits. |
| MCP server | Read-only gate on every statement. The write tool exists only when you enable it. | Guardrail warnings attached to results. Details. |
Production looks like production.
Give a connection a color and the window carries a tint bar in that color, the session tab shows a dot, and you stop confusing staging with the real thing. Mark a connection as production and destructive statements get an extra warning that names it.
- Destructive SQL asks first. An UPDATE or DELETE with no WHERE clause, TRUNCATE, DROP TABLE, in query tabs and the command bar alike.
- Structure changes are previewed. Every ALTER from the Structure tab is shown before it runs.
- Imports are transactional. A CSV import runs in one transaction and rolls back on the first bad row.
Undo, and a copy for when undo is not enough.
The change journal records every committed grid edit with the SQL that reverses it, 500 entries per connection. Undo any entry with one click, or copy the inverse statement to hand to someone else.
Before a change you are unsure about, snapshot the table: one click runs CREATE TABLE snapshot_… AS SELECT * on the same connection. It is crude, it is fast, and it has saved more afternoons than any feature with a nicer name.
Find the drift before it finds you.
Two databases that should match rarely do. Taula compares them at the schema level and at the row level, across connections and across engines.
Schema diff
Tables, columns, indexes and foreign keys between any two connections or databases, as a color-coded, directional report. Compares Postgres to SQLite if you ask it to, by treating both as one flat schema.
Data diff
Row-by-row comparison of two tables, keyed on the primary key: added, removed and changed rows, with the changed columns highlighted.
Backup
PG · SQLitepg_dump -Fc for Postgres, .dump for SQLite, with your Homebrew tools found automatically and the password passed through the environment, never the command line.
Restore
PG · SQLitepg_restore --clean, or replaying a SQLite dump, from the same menu.
Generating sync SQL from a data diff is the next item on the list. Diffing is half the job; the other half is coming.
Nothing leaves your Mac unless you ask.
No sign-in, no analytics, no crash reporter. Passwords, SSH passphrases and API tokens live in the macOS Keychain. Connections, history, journal and settings are plain JSON in Application Support, readable with any editor.
The assistant runs on a local model by default. The only way data leaves the machine is a connection you configured, or a hosted model you chose to add a key for.
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.