A Postgres client with AI, for macOS, Windows and Linux

The database client you can ask questions.

Ask for a query in plain English, have any statement explained, or get a table described column by column. Native and offline-first, so the grid never waits — and before anything is sent to a model, you see exactly what leaves your machine. The connection string never does.

Free, no account needed.

commerce / public / customers38 ms
Row
14f2a…c81[email protected]GB41218,940.202026-01-14{"tier":"gold"}
29b7e…22d[email protected]US38817,210.002026-01-19{"tier":"gold"}
31c04…7fa[email protected]US30512,880.752026-02-02{"tier":"silver"}
47d31…9e0[email protected]GB29111,405.102026-02-11{"tier":"silver"}
5e8a5…31b[email protected]US2409,988.402026-02-27null
62f60…4ac[email protected]US1988,120.052026-03-06{"tier":"bronze"}
7b143…8d2[email protected]US1767,455.902026-03-15{"tier":"bronze"}
8a077…5e9[email protected]CA1436,201.352026-03-28null
95c92…1f7[email protected]US1315,840.002026-04-02{"tier":"bronze"}
103e18…6bb[email protected]US1185,102.602026-04-09{"tier":"bronze"}
11c6f4…0a3[email protected]US1044,776.152026-04-17null
128a25…d47[email protected]GB924,015.802026-04-23{"tier":"bronze"}
13d391…b62[email protected]US773,290.452026-05-01null
146b58…e14[email protected]US612,744.902026-05-08{"tier":"bronze"}
15f7c2…a95[email protected]US482,110.252026-05-14null
160d47…3c8[email protected]US391,688.702026-05-21{"tier":"bronze"}
179e63…7d1[email protected]US271,204.002026-05-29null
184a80…5f6[email protected]IL19902.552026-06-04null
19b2d9…8e3[email protected]US11540.102026-06-12{"tier":"bronze"}
19 rowsClick a column to sort — this grid is live
Describe this tableSent: 1 table, 7 columns, 0 rows

One row per customer. spend is a lifetime total in the shop's currency and moves only with orders; metadata.tier is derived from spend rather than stored elsewhere, so the two never disagree. created_at is the sign-up time, not the first order.

Native

Nothing between you and the socket

The old QueryFlow Studio ran in a browser, so reaching a database on your own machine meant running a second process to proxy around the sandbox. This one is a native binary that opens the socket itself. The difference is not a percentage.

Open the app
400ms
3.9s
Connect to localhost
20ms
1.6s
First 100k rows
38ms
2.4s
Sort 1M rows
210ms
9.8s
QueryFlow Studio 2, native QueryFlow Studio 1, browser and local agent
  • No agent to install

    localhost, a socket file, a bastion host — the app connects the way psql does. The separate helper process is gone.

  • Streams, never buffers

    Exports write row by row, so a table larger than memory exports fine. Paging is keyset-ordered, so pages cannot overlap or skip.

  • 14 MB, one file

    No runtime to install, no container, no Node. Drag it to Applications and open it.

The boundary

What actually leaves

Every AI tool asks you to trust it. QueryFlow Studio shows you the payload instead. Before a question is sent, the app tells you which tables it names, how many columns, and whether a single value from your data is in there. Flip the switch and watch the shipment change.

This machine
  • Connection string never sent
  • Every row of your data never sent
  • Query history local SQLite
  • Schema introspection runs locally
  • Results of the query never sent
The service
payload2.4 KB

Names and types only — no row values

The service holds the model key, your plan and your quota. It has never held a credential for your database, because it was never given one.

Ask, explain, describe

Three things you can ask it

Ask for a query and get SQL you can read, edit and run — never a black box that returns rows. Point at any statement and have it explained. Open a table and have every column described. Each answer says what it assumed, and what was sent to get it.

›
Explain this query1.1s
select p.sku, sum(oi.qty) as units
from order_items oi
join products p on p.id = oi.product_id
where oi.created_at > now() - interval '30 days'
group by p.sku
order by units desc
limit 20;

The twenty best-selling SKUs of the last thirty days, by units. It reads order_items once and joins products by primary key, so the cost is the date filter — an index on order_items(created_at) is what makes or breaks it.

Assumed qty is never negative — returns are elsewhere.

Read-onlySent: the statement, 2 tables, 0 rows
Describe this table1.4s

public.customers — one row per shopper. Written by sign-up and by the order pipeline; read by everything.

id
Surrogate key; never shown to customers.
email
Login identity. Unique, lower-cased on write.
country
ISO 3166 code at sign-up; not updated on move.
orders
Denormalised count — maintained by a trigger, not a view.
spend
Lifetime total in the shop currency. Moves only with orders.
metadata
Tier is derived from spend; nothing else lives here yet.
Schema onlySent: 1 table, 7 columns, 0 rows

Free with an account: ten prompts a day, all three. Pro raises the limit and is where the next tools land — schema docs, ERDs, and performance advice — as they ship.

Free to use

Get QueryFlow Studio

The client is free and works without an account. Signing in adds the AI features and ten prompts a day; paid plans raise that. Nothing about your databases changes either way.

  • macOS

    Apple silicon

    Latest release
    Download
  • macOS

    Intel

    Latest release
    Download
  • Windows

    x64 installer

    Latest release
    Download
  • Linux

    AppImage, x64

    Latest release
    Download
  • Linux

    Debian / Ubuntu, x64

    Latest release
    Download
All releases and notes

Requires PostgreSQL 12 or newer. macOS 12+, Windows 10+, or a glibc 2.31 Linux.

First launch on macOS: "Apple could not verify" or "is damaged"

QueryFlow Studio isn't notarized by Apple yet, so macOS checks with you once. Which dialog you see decides the fix:

"Apple could not verify…" — click Done, openSystem Settings → Privacy & Security, scroll down and clickOpen Anyway. Once is enough.

"…is damaged and can't be opened" — the download's quarantine flag needs clearing. In Terminal:

xattr -d com.apple.quarantine "/Applications/QueryFlow Studio.app"

Then open it normally. Neither step changes what the app can do; it only tells macOS you chose to run it.