Stable · v0.1.1

Every database you run, together in one app.

Querybara is a desktop database manager for PostgreSQL, MySQL, MariaDB, MongoDB, Redis and Elasticsearch. A command-line tool runs the same engine.

macOS, Windows and Linux · from GitHub Releases

Querybara's query editor connected to the Larchwood PostgreSQL database. The side bar shows the shop schema's tables (customers, inventory, order_items, orders, products, reviews, shipments, suppliers). The editor holds a formatted 16-line query with a CTE that sums monthly revenue by product category over shop.orders, order_items and products, and the result grid below lists 54 rows of month, category, orders, units, revenue, avg_order and share_pct.Querybara's query editor connected to the Larchwood PostgreSQL database. The side bar shows the shop schema's tables (customers, inventory, order_items, orders, products, reviews, shipments, suppliers). The editor holds a formatted 16-line query with a CTE that sums monthly revenue by product category over shop.orders, order_items and products, and the result grid below lists 54 rows of month, category, orders, units, revenue, avg_order and share_pct.

Six engines

One window, each database in its own language

SQL where it is SQL, mongosh syntax for MongoDB, redis-cli for Redis, the REST API for Elasticsearch. One connection model, one set of safety checks, the same tunnels.

One app, every engineQuerybara at the centre sends queries to PostgreSQL, MySQL, MariaDB, MongoDB, Redis and Elasticsearch and receives rows, documents, keys and search hits; a command-line tool runs the same engine.PostgreSQLSELECTrowMySQLSELECTrowMariaDBSELECTrowMongoDBfind(){ doc }RedisSCANcart:4012Elasticsearch_searchhitQuerybaraquerybara CLIsame enginequery

One app, every engine

  1. One window for six engines: queries go out to each in its own language.
  2. Rows, documents, keys and search hits come back to the same app.
  3. The command line runs the same engine, headless.

Query

An editor that knows your schema

  • Completion for tables, columns through aliases, and joins from foreign keys.
  • Run all, the statement at the cursor, or a selection; results stream 1,000 rows at a time.
  • Explain Analyze draws the plan and points at the slowest node.
Read how it works
Querybara's SQL editor on the Larchwood database with a query joining shop.orders as o and shop.customers as c. After typing "and o." on the last line, the suggestion list opens under the cursor with the orders table's columns: id (integer), customer_id, status, placed_at, shipping, total and note. The result grid below shows 696 orders still in the workshop.Querybara's SQL editor on the Larchwood database with a query joining shop.orders as o and shop.customers as c. After typing "and o." on the last line, the suggestion list opens under the cursor with the orders table's columns: id (integer), customer_id, status, placed_at, shipping, total and note. The result grid below shows 696 orders still in the workshop.

Navigate

Every table a few keystrokes away

  • ⌘P goes to any table, view or collection by a few of its letters; ⌘⇧P runs any command.
  • Key bindings work as VS Code’s, chords included, and you can change them.
  • Click a database or schema to list its objects with rows, sizes and comments.
Read how it works
Go to Object open over a query tab: the letters "or" are typed and the list shows orders, order_items, inventory, customers and the customer_lifetime_value view, each with its database and schema and the matched letters highlighted.Go to Object open over a query tab: the letters "or" are typed and the list shows orders, order_items, inventory, customers and the customer_lifetime_value view, each with its database and schema and the matched letters highlighted.

Build

Queries you can see, SQL you can keep

  • Drop tables on a canvas; joins are proposed from foreign keys.
  • Columns, criteria, grouping and sort in side panels, with the SQL kept in step both ways.
Read how it works
The visual query builder with customers, orders and order_items on the canvas, joined by INNER JOINs from their foreign keys and with name, city, total and quantity ticked. The Criteria tab filters on orders.status = 'shipped' and orders.total > 2000. Below, the generated SELECT and its 507-row result appear side by side.The visual query builder with customers, orders and order_items on the canvas, joined by INNER JOINs from their foreign keys and with name, city, total and quantity ticked. The Criteria tab filters on orders.status = 'shipped' and orders.total > 2000. Below, the generated SELECT and its 507-row result appear side by side.

Model

ER diagrams that turn into a designer

  • Reverse-engineer a schema into tables, keys and crow’s-foot relationships.
  • Edit the model, then review the exact CREATE and ALTER script before it runs.
  • Unapplied changes survive a restart; save a model and apply it to another database.
Read how it works
The ER diagram of the shop schema with the orders table selected. Its related tables (customers, order_items, shipments) are highlighted with labelled 1:N and 1:1 relationships, and the rest are dimmed. The inspector lists orders' columns, its reference to customers and the order_items and shipments that reference it, including ON DELETE CASCADE.The ER diagram of the shop schema with the orders table selected. Its related tables (customers, order_items, shipments) are highlighted with labelled 1:N and 1:1 relationships, and the rest are dimmed. The inspector lists orders' columns, its reference to customers and the order_items and shipments that reference it, including ON DELETE CASCADE.

Edit

Table data, edited with care

  • Filter visually or with WHERE, page by key, and keep NULL, empty and DEFAULT apart.
  • Edits are staged and applied in one transaction after you see the SQL.
  • Rows someone else changed in the meantime are detected before anything is overwritten.
Read how it works
The shop.orders table in the data grid, filtered with the builder to status = in_workshop and total ≥ 2500, which gives 139 rows. The note of order 10038 has been edited to "Deliver after 2 pm" and is highlighted as a pending change. The toolbar shows Apply (1) and 1 edited.The shop.orders table in the data grid, filtered with the builder to status = in_workshop and total ≥ 2500, which gives 139 rows. The note of order 10038 has been edited to "Deliver after 2 pm" and is highlighted as a pending change. The toolbar shows Apply (1) and 1 edited.

MongoDB

Documents, pipelines and a SQL tab

  • An aggregation editor with a preview after every stage.
  • Type a SELECT and get find() or aggregate(); export any query as code for six drivers.
Read how it works
The MongoDB aggregation editor with $group and $sort stage cards, each previewing its output: the average review rating per wood, then sorted. The pipeline's result table shows elm, walnut and cherry at the top.The MongoDB aggregation editor with $group and $sort stage cards, each previewing its output: the average review rating per wood, then sorted. The pipeline's result table shows elm, walnut and cherry at the top.

Redis

Every key type, browsed and edited

  • A SCAN-based namespace tree with types, TTLs and memory sizes.
  • Editors for hashes, streams, sorted sets, JSON and more; a CLI with inline docs.
  • Search indexes to query and create, and offline analysis of RDB dumps of any size.
Read how it works
The Redis key browser on the cart namespace with type badges and memory sizes, beside the hash editor for cart:1705 showing its products, quantities and the TTL.The Redis key browser on the cart namespace with type badges and memory sizes, beside the hash editor for cart:1705 showing its products, quantities and the TTL.

Elasticsearch

A console and the cluster behind it

  • Requests with autocomplete from the API specification.
  • A query builder that reads the mapping and writes the Query DSL for you.
  • Documents past 10,000 hits, SQL with Translate to DSL, shard allocation explained.
Read how it works
The Elasticsearch console: a search request on the products alias with a match query and a terms aggregation, its 200 OK response on the right, and endpoint completions offered for the next request.The Elasticsearch console: a search request on the products alias with a match query and a terms aggregation, its 200 OK response on the right, and endpoint completions offered for the next request.

Automate

Backups and checks on a schedule

  • Backups, SQL files, exports and saved comparisons run on a schedule while Querybara is open.
  • Each run writes a new file from a name template and can keep only the newest few.
  • You hear about a run that fails, or a comparison that finds differences.
Read how it works
Schedules panel listing a monthly Parquet export, a weekday staging drift check and a weekly backup, each with an on switch, and the drift check's details: when it runs, where its reports go, and two successful runs that found eight differences.Schedules panel listing a monthly Parquet export, a weekday staging drift check and a weekly backup, each with an on switch, and the drift check's details: when it runs, where its reports go, and two successful runs that found eight differences.

Operate

Server tools that show the statement first

  • Monitor, sessions, top queries with the reason and the fix, users and grants.
  • Every kill, maintenance task and setting change shows its exact statement before it runs.
Read how it works
PostgreSQL server monitor after a minute of storefront and reporting load: connections, transactions per second, cache hit ratio, rows read and written, lock waits, longest transaction, temp files, deadlocks and database size with sparklines, and per-database statistics.PostgreSQL server monitor after a minute of storefront and reporting load: connections, transactions per second, cache hit ratio, rows read and written, lock waits, longest transaction, temp files, deadlocks and database size with sparklines, and per-database statistics.

Data in motion

Watch the data move

How Querybara carries rows, documents and keys between servers, step by step. Each diagram follows the code that does the work.

Move data between engines

Rows become documents, documents become tables, types map across engines, and Redis keys keep their TTLs.

Read the docs
Changing shapeData transfer between engines: SQL rows become MongoDB documents with child rows embedded through a foreign key; MongoDB documents flatten into SQL columns with arrays as child tables; PostgreSQL types map to MySQL types with keys and indexes added after the data; Redis keys move with DUMP and RESTORE keeping their TTLs.PostgreSQL · shopMongoDB · ordersorders10421 · Ada Holm · delivered · €1,315.00order_items (order_id → orders.id)10421 · 1004 Oak dining table · 110421 · 1051 Oak bench · 210421 · 1077 Oak stool · 4{_id: 10421,customer: "Ada Holm",status: "delivered",total: 1315.00,items: [{ product_id: 1004, quantity: 1 },{ product_id: 1051, quantity: 2 },{ product_id: 1077, quantity: 4 }]}orders 10421order_itemsMongoDB · catalog.productsMySQL · shop_eu{_id: 1004,name: "Oak dining table",price: { amount: 889.99,currency: 'EUR' },variants: [{ finish: 'oiled', … },{ finish: 'raw', … } ]}products_id · name · price_amount · price_currency1004 · Oak dining table · 889.99 · EURproducts_variantsparent key · position · finish · …1004 · 0 · oiled1004 · 1 · rawprice.amountvariants[]PostgreSQL · larchwoodMySQL · shop_eushop.ordersid integertotal numeric(10,2)placed_at timestamptzstatus order_statusType mappinginteger → intnumeric → decimal(10,2)timestamptz → datetime(6)order_status → enum(…)timestamptz is stored as UTCordersid inttotal decimal(10,2)placed_at datetime(6)status enum(…)PRIMARY KEYINDEXFOREIGN KEYadded after the datarowRedis · sourceRedis · targetcart:4012hash · 3 fieldsTTL 2h 41mDUMP → RESTOREcart:4012hash · 3 fieldsTTL 2h 41mcart:4012 + TTL

Changing shape

  1. SQL to MongoDB: each orders row becomes one document.
  2. Its order_items rows, found through the foreign key, are embedded in the document as an array.
  3. MongoDB to SQL: nested fields flatten into columns, and an array becomes a child table with a parent key, or a JSON column.
  4. SQL to SQL across engines: an editable type mapping turns PostgreSQL types into MySQL ones.
  5. Rows stream first; keys, indexes and foreign keys are added after the data.
  6. Redis to Redis: each key is DUMPed with its remaining time to live and RESTOREd on the target.

Secure by default

Careful with production, from the first connection

  • TLS in four modes, up to verifying the certificate and host name; a URI's sslmode, rediss://, https:// or mongodb+srv:// turns it on.
  • Passwords in the OS keychain, remembered for the session, or asked every time.
  • SSH tunnels through jump hosts, with host keys checked against a shared known_hosts.
  • SOCKS5 and HTTP proxies; replica sets and clusters reached node by node.
  • Confirmations before risky writes, and for writes on a production profile.
  • A sandboxed window without Node.js; passwords never reach the page.
  • Encrypted backups with AES-256-GCM and a passphrase.
The security model
Through the bastionQuerybara opens one SSH session per connection, shared by its tabs, checks host keys against a known_hosts file, hops through a jump host and a bastion into a private network, and reaches each member of a replica set or cluster by name through the same route.Private networkQuery tabTable dataER diagramSSHone sessionJump hostjump.exampleBastionbastion.exampleknown_hostsapp + CLIdb-1primarydb-2secondarydb-3secondaryNew host keyTrust it?tabtabtabSHA256:…sshsshSELECT …db-2:27017db-3:27017

Through the bastion

  1. A connection opens one SSH session, and every tab of that connection shares it.
  2. Each server’s host key is checked against known_hosts, the file the app and the CLI share. A new key asks you to trust it; a changed key blocks the connection.
  3. The session hops through the jump host to the bastion: a chain of SSH hops, one shared session per path.
  4. From the bastion, traffic reaches the database inside the private network. The database is never exposed.
  5. A replica set or cluster is reached node by node, by the names its servers announce, through the same route.

Command line

Same engine, headless

Test connections, run queries, compare structures and data, import, export, transfer, back up and restore from scripts and CI. The CLI shares the desktop app’s saved connections and known_hosts.

CLI reference
querybara compare postgres://app@db1/shop postgres://app@db2/shop --out sync.sqlquerybara import dev --table public.people --file people.csv --mode upsert --key idquerybara export dev --table orders --table items --format xlsx --one-file --out shop.xlsxquerybara backup prod --out shop.qbak --encrypt

Download

For macOS, Windows and Linux

Installers come from GitHub Releases. Release builds can update themselves, on the stable or the beta channel.

Release builds update themselves. Test builds are not signed; macOS asks you to allow them in System Settings → Privacy & Security the first time. Installation guide