• Postgres 14 to 18Each release is tested against every supported version.
  • Signed and notarizedCheck the file you downloaded with one command.How to verify ↓
  • No telemetryYour data goes to your database. One update check, and that's the list.
  • Open source, MPL-2.0Free for commercial work.Read the source ↗
Chapter one · Browse

Read every value as it really is.

A table tree, tabs and a grid. Everything else appears only while it is in use.

Alcuin with the orders table open on a staging connection. The row panel on the right shows order 48213, its customer Mei Tanaka, a NULL note set in grey italics, and links to its order items, payments and shipments.
Plate 1. Order 48213 open beside the orders grid, on a staging connection. Its note is NULL, not blank. Real app, sample data.
  • NULL is never blank.It's set apart from an empty string. Timestamps keep their zone; big numbers are never rounded.
  • Foreign keys, both ways.Open a row and its related rows are listed beneath it, a click away in either direction.
  • The environment is always named.Staging, here, in the top bar of the whole window. Production looks different at a glance.
  • One shortcut to anything.⌘P reaches any table, saved query or command.
The whole Alcuin window: the table tree on the left, the orders grid, and the row panel for order 48213. The top bar names the connection Shop, on Staging.
Chapter two · Query

Write SQL with the server reading over your shoulder.

revenue.sqlShop / Development
SELECT o.currency,
       sum(o.totl) AS revenue,
       count(*) AS orders
  FROM orders o
 WHERE o.status = 'paid'
   AND o.placed_at >= now() - interval '30 days'
 GROUP BY 1
 ORDER BY revenue DESC;

ERROR: column o.totl does not exist
HINT: Perhaps you meant to reference the column "o.total".

  • Errors where they happenedPlaced at the exact position, in the server's own words, with its hint.
  • Completion that knows your schemaFollows aliases, CTEs and the search path, knows foreign-key joins, and is checked by the planner.
  • Nothing is ever lostEvery tab is saved as you type, untitled ones too. History keeps everything you ran.
  • Cancel anythingEvery running query shows its time and stops when you ask.
Chapter three · Review

Read before you write.

Edits to rows and structure are marked and wait until you've reviewed and approved the statements they will become. Staged edits are saved locally, so even a crash keeps them.

Review · 2 changesone transaction
BEGIN;

UPDATE public.orders
   SET status = 'refunded'
 WHERE id = 48209;

ALTER TABLE public.orders
  ADD COLUMN refunded_at timestamptz;
-- no default, so no table rewrite

COMMIT;
A row changed under you is reported, never overwritten.
  • Notes on riskStructure changes come with notes on locks and rewrites, and a safer form where one exists.
  • Saved as a migrationKeep any review as a migration file in your project's own format.
  • Checkpoints you can restoreTake one before a risky change on a dev database, and put it back if it goes wrong.
  • Try it yourselfStage an edit, read its SQL, then see what production does.Open the interactive review →
Chapter four · Apply

Each database knows where it lives.

Every connection is marked local, development, staging or production, and that sets how careful Alcuin is.

  • Local & devAsks first before a drop, a truncate, or an update or delete with no WHERE.Edits stage and review as everywhere.
  • StagingAsks first before all of the above, and anything whose effect can't be read from its text.Named in the top bar.
  • ProductionAsks first before any structure change.Opens read-only. Stops statements after 30 s and lock waits after 3 s. Locks again 15 minutes after you unlock it.

Settings can make any environment stricter; production's rules are a floor. For a guarantee that doesn't rest on the app, connect production with a role that can only read.

Check it yourself

A new app is asking for your database password. Fair to be wary.

So here is exactly what Alcuin does with it, and how to prove the app you downloaded is the one we built.

  • Passwords stay in your system keychain. They never reach the window, the local state file, logs or copied URLs.

  • Your data goes to your database. That's the list. Apart from an update check against GitHub Releases, nothing leaves your machine unless you turn it on.

  • AI is optional, and off. Bring your own key or a local model. It sees your schema, not your rows, and the SQL it suggests never runs by itself.

  • Every release lists what's inside. A CycloneDX SBOM with each dependency and the Electron, Chromium and Node versions it ships.

# Was this file built by Alcuin's release workflow?
gh attestation verify Alcuin-0.1.0-arm64.dmg --owner alcuin-app
# Is the installed app notarized by Apple?
spctl -a -vv /Applications/Alcuin.app

A passing result names the workflow, commit and repository that built the file. How verification works

v0.1.0 · public beta

Begin here.

macOS

Apple silicon · .dmg · drag into Applications

Download

Linux

x64 · .deb or .AppImage

Download

Windows

In v0.1.x, once the installer is signed

Watch

Questions

Is it really free?

Yes. Alcuin is open source under MPL-2.0, including for commercial work. If you distribute a changed version, your changes to Alcuin's own files are published under the same licence.

Will it work with my hosted Postgres?

Postgres 14 to 18, wherever it runs: directly, over TLS, or through an SSH tunnel with host-key checks. Passwords can come from AWS, Azure, Cloud SQL or Vault through a command you approve once.

Can I bring my saved connections?

Yes. Import your connections from pgAdmin and DBeaver today, and from TablePlus and Postico as soon as either offers a plain export. Or paste a connection URL, and servers already running on your machine (Postgres.app, Homebrew, Docker) are listed, ready to open.

How stable is it?

Alcuin is in public beta. Every release is walked through the same checklist and tested against each supported Postgres version. Tell us what breaks in GitHub issues.