QueryBench

The sleepy capybara company

Serious about data.
A little soft around the edges.

Meet QueryBench, your native database workspace. Browse tables, write queries, and undo the changes you wish you hadn’t made. A calmer place for you and your rows.

Resident row enthusiast · professional napper
Rowly, a sleepy capybara tucked under a cozy blanket patterned like a database table
Say hello to Rowly.One of our many capybara friends. His favorite table is a blanket. His favorite query? Five more minutes.
QueryBench desktop workspace with the customers table open
QueryBench on iPhone showing the same customers table

01 · Stash

Every client asks “are you sure?” Stash is for the moment after you said yes.

Turn it on, and QueryBench keeps the original rows before every update or delete, then writes the SQL that puts them back. Here is exactly what happens.

  1. 1

    You commit an update or delete

    From the grid, a staged batch, or a plain UPDATE or DELETE in the SQL editor.

  2. 2

    QueryBench captures the real rows first

    Inside the same transaction, it reads the rows the statement is about to touch from the database, not the copy on screen. On PostgreSQL and MySQL the rows are locked while this happens. If capture fails, the write is aborted.

  3. 3

    The originals wait in Stash

    Each entry keeps a timestamp, row count, status and expiry. Retention defaults to 15 minutes and can be set from 1 minute to 24 hours. Everything stays in memory; nothing is written to disk.

  4. 4

    You review, then roll back

    Stash generates INSERT statements for deleted rows and UPDATE statements for changed ones. Copy them or open them in a query tab. QueryBench never runs recovery on its own.

Recovery SQL, as Stash writes it
-- Stash · main.customers · 2 rows
-- committed 3 min ago · expires in 12 min
UPDATE "main"."customers"
SET "status" = 'active', "plan" = 'Pro'
WHERE "id" = 42;

INSERT INTO "main"."customers"
  ("id", "name", "email", "status",
   "plan", "country", "created_at", "revenue")
VALUES
  (57, 'Kate Morrison', 'customer.57@example.com',
   'trial', 'Starter', 'Canada',
   '2026-03-02 10:14:00', 0);

Why this is rare

Most clients protect you before a statement runs: a confirmation dialog, a preview of the SQL. That helps until the moment you confirm the wrong thing. Stash works after the commit. Because the original values are read from the database inside the same transaction, the recovery SQL is exact, including NULLs, JSON, binary values and large integers. Generated columns are left out so the statements run cleanly.

Stash is not a backup and does not reverse triggers or cascades. Read what it will and will not do.

02 · Backups

A table export is not a backup. This is a backup.

QueryBench runs the engine's own backup tool, keeps the gzip archive on disk, and can ship it to S3 or any compatible store without a separate script or cron job.

  1. 1

    Native tools, real backups

    PostgreSQL uses pg_dump, MySQL uses mysqldump with routines, triggers and events, SQLite takes a consistent VACUUM INTO snapshot, DuckDB runs EXPORT DATABASE. Restores work with the engine's own tools.

  2. 2

    One gzip archive, finished before anything uploads

    The backup streams into a single local file, is synced to disk, and only then is eligible for upload. Partial files never leave your machine and are removed if a backup is cancelled or fails.

  3. 3

    Optional S3 upload, retry without redoing the dump

    Point it at a bucket, region and prefix, or any S3-compatible endpoint over HTTPS. Uploads use signed multipart requests with bounded concurrency. If the upload fails, retry from the completed local archive.

  4. 4

    Credentials stay in the keychain

    Access keys and session tokens are saved per connection in the operating-system credential store. They are never returned to the interface, written to JSON, or included in connection archives.

Back up database panel with Local file only selected and a local backup folder
Back up database panel with Local file and S3 upload selected, showing bucket, region and credentials fields

03 · MCP server

Let an AI agent talk to your database, on your terms

Press the MCP button in the title bar and QueryBench starts a Model Context Protocol server for whatever agent you use. It gets five tools, your No-Edit rules, and nothing else.

  • list_databases · saved connections, without passwords
  • connect · open one through the keychain
  • list_tables · tables and views in a schema
  • describe_table · columns, types, keys
  • run_query · paginated, with the app's timeouts

Five tools, and nothing else. An agent can read what you can read and change what you allow it to change. Everything goes through the same adapters, the same pagination and the same edit lock as the interface.

  • Binds to 127.0.0.1 only, never to the Wi-Fi interface.
  • Every session gets a fresh, unpredictable bearer token. Host and origin are checked.
  • No-Edit and read-only connections stay locked. The agent cannot unlock them, and writes are rejected in the Go backend, not in the UI.
  • Page sizes, timeouts and cancellation are the same limits the app uses for you.
  • Desktop only. Off until you press the MCP button, and off again when you quit.

Client configuration and setup

An agent session, as QueryBench sees it
  1. agent ›list_databases
  2. querybench ‹analytics · PostgreSQL · production · No-Edit
  3. agent ›describe_table public.orders
  4. querybench ‹14 columns · primary key (id) · 3 foreign keys
  5. agent ›run_query SELECT status, count(*) FROM orders GROUP BY 1
  6. querybench ‹4 rows · 38 ms · page 1 of 1
  7. agent ›run_query DELETE FROM orders WHERE status = 'test'
  8. querybench ‹rejected · connection is in No-Edit mode

Engines

Seven engines, one workspace

Each runs on its own native driver behind the same grid, editor and staged-change queue, with real integration tests instead of mocked capabilities.

  • PostgreSQL
  • MySQL
  • SQLite
  • DuckDB
  • ClickHouse
  • MongoDB
  • Redis

Platforms

One license, one active device per key

macOS, Windows and Linux on the desk. iOS and Android in your pocket, running the same Go adapters locally with passwords in the platform keychain. No remote proxy, no second purchase.

  • Grid, staged edits, structure and query editors on the phone
  • Long-press for sidebar and grid context menus, 44px touch targets
  • Import, export, backups and MCP stay desktop-only, on purpose
QueryBench SQL editor on the desktop
Row context menu on iPhone with paste, duplicate, set value, copy and quick filter actions

Everyday work

Everything else a database client should do, done carefully

Click a screenshot to enlarge it.

Also: foreign-key diagrams, table cloning, user management, TablePlus-compatible connection archives and a sample workspace to try everything without a server. Read the docs.

Editor

An editor that stays out of the way

Built on CodeMirror with the useful defaults switched on and nothing that fights you.

  • Instant autocomplete

    Tables and columns across the whole schema, alias aware.

  • Syntax highlighting

    Dialect-specific SQL, plus JSON for MongoDB documents.

  • Parallel tabs

    Every SQL tab keeps its own connection, result and running query.

  • Query history

    The last 50 statements with connection and duration, stored locally.

  • Streaming results

    Pages of 100 to 1,000 rows stream into a virtualized grid.

  • Cancel anytime

    Cancellation reaches the database cursor, not just the UI.

SQL editor tab with a highlighted SELECT statement and a results pane

How it's built

Small, native, honest

Native and fast

A Go backend and a native webview per platform. No Electron, no bundled browser, and a small memory footprint even with large tables.

Safe by default

Production connections start locked. Edit restrictions are enforced in the backend, so a UI tweak can never bypass them.

Keyboard first

Cmd-Enter runs a statement, Cmd-S commits, Cmd-Z undoes staged edits, Cmd-K switches connections. Every action has a shortcut.

One workspace, every device

The same adapters and interface on macOS, Windows, Linux, iOS and Android. Your phone runs the real database drivers, not a remote proxy.

AI ready

Turn on the desktop MCP server and let an AI agent list tables, describe schemas and run paginated queries, with the same No-Edit rules applied.

Honest engineering

Every engine is covered by real integration tests against real databases. Unsupported features return explicit errors instead of pretending.

Try it on the sample workspace

Every install ships a SQLite sample database. Explore the grid, stage some edits, turn on Stash and undo them. No account, no server.

Seven days of every feature, then free mode with one tab. One license is $99.99, paid once, for every platform.