Adminer: One PHP File
Adminer is free and it works. It has no destructive-query guard, no built-in SSH tunnel, and AI only through a plugin.
QueryGlow runs in Docker on your server, next to the containers you already have. One command installs it with HTTPS and a login, one command updates it. Schema-only AI, Safe Mode and six engines, in the browser.
Adminer and pgAdmin are free. QueryGlow: $79 once. Self-hosted, source code included.
“Beautiful interface and very intuitive.”

Paste the DATABASE_URL from your .env, or let Find local servers check the standard ports on the machine.
Adminer, pgAdmin and phpMyAdmin are free and they work. Here is where each one stops.
Adminer is free and it works. It has no destructive-query guard, no built-in SSH tunnel, and AI only through a plugin.
pgAdmin is the official PostgreSQL admin tool. Run MySQL or SQLite next to it and you need a second tool.
phpMyAdmin covers MySQL and MariaDB only. QueryGlow handles six engines in one UI.
QueryGlow runs in Docker on a Linux server next to any compose stack, including Supabase self-hosted via Docker. You need Docker (512 MB RAM minimum, 1 GB recommended), a domain pointing at the server for HTTPS, and a non-root user with sudo.
git clone [email protected]:queryglow-app/queryglow.git
cd queryglow
./queryglow installStep 1
Clone the repository
Step 2
./queryglow install (domain, HTTPS, login)
Step 3
Open your domain and sign in
On a server without a system nginx, Docker runs three containers: the app, nginx with HTTPS and Basic Auth, and certbot, which renews the Let's Encrypt certificate.
If a system nginx already serves your other sites, only the app container runs and the installer adds a site with its own login to your nginx.
./queryglow update backs up first, checks the nginx config before anything restarts, keeps the running image as queryglow:previous, and checks that the new version is serving. If it is not, it rolls back on its own. The app itself never phones home: the update check is a git fetch on your server, only when you ask.
$ ./queryglow update --checkInstalled: 1.2.1 (v1.2.1, 05d13c0) on branch mainAvailable: 1.3.0 (v1.3.0, 6060169) on origin/main→ Update available. Run: ./queryglow update $ ./queryglow update→ Backing up to backups/20260925-081057/ …→ Fast-forwarding main to 1.3.0 (v1.3.0, 6060169) ...→ Re-rendering nginx config for db.your-company.com (app port 3000)…→ Validating the rendered config… config OK→ Building the new image (the running containers keep serving until it succeeds) ...→ Starting the new release ...→ Waiting for http://127.0.0.1:3000/api/health ...✓ Update complete: 1.3.0 (v1.3.0, 6060169). Backup: backups/20260925-081057It needs only bash, git, Docker with the compose plugin and curl on the host. No Node.js on the host.
./queryglow installRuns the installer on a server that already has Docker: nginx with Basic Auth, a Let's Encrypt certificate, the app.
./queryglow updateBacks up, fetches the newest release, rebuilds, verifies, rolls back on failure. --check, --dry-run and --tag are there too.
./queryglow statusMode, domain, installed and running version, containers, certificate expiry, last backup and last update.
./queryglow doctorChecks host and install; --report prints a support report without a single .env value.
./queryglow backup / restore / rollbackSnapshots of your QueryGlow settings and app data, and the way back to the previous release.
./queryglow logsThe last 100 lines of the app, nginx or certbot container; -f follows.
The installed version shows in the app's sidebar footer and at GET /api/version. How updating works and what shipped in each release.
| Feature | Adminer | pgAdmin | QueryGlow |
|---|---|---|---|
| What it is | Single PHP file | Python + React web app | Node.js 22 web app in Docker, behind nginx |
| Database Support | Many databases | PostgreSQL only | 6 databases |
| AI SQL Generation | Via plugin (Gemini) | AI Assistant (since 9.13) | Your own OpenAI, Anthropic or Google key; schema only, never rows |
| Query guard | None | No statement guard | Blocks DROP DATABASE always; DROP TABLE, TRUNCATE and DELETE/UPDATE without WHERE by default |
| SSH Tunnels | No (needs external) | Yes | Yes, host key pinned on first use |
| CSV Import | CSV import | Yes | INSERT, UPSERT or REPLACE |
| Credential Encryption | Stores no connection list; permanent-login password encrypted | Optional | AES-256-GCM always |
| Price | Free | Free | $79 once |
Adminer
Single PHP file
pgAdmin
Python + React web app
QueryGlow
Node.js 22 web app in Docker, behind nginx
Adminer
Many databases
pgAdmin
PostgreSQL only
QueryGlow
6 databases
Adminer
Via plugin (Gemini)
pgAdmin
AI Assistant (since 9.13)
QueryGlow
Your own OpenAI, Anthropic or Google key; schema only, never rows
Adminer
None
pgAdmin
No statement guard
QueryGlow
Blocks DROP DATABASE always; DROP TABLE, TRUNCATE and DELETE/UPDATE without WHERE by default
Adminer
No (needs external)
pgAdmin
Yes
QueryGlow
Yes, host key pinned on first use
Adminer
CSV import
pgAdmin
Yes
QueryGlow
INSERT, UPSERT or REPLACE
Adminer
Stores no connection list; permanent-login password encrypted
pgAdmin
Optional
QueryGlow
AES-256-GCM always
Adminer
Free
pgAdmin
Free
QueryGlow
$79 once
Adminer and pgAdmin facts as of September 2026, from adminer.org and the pgAdmin documentation.
Honest note: Adminer and pgAdmin are free. QueryGlow is $79 once. If you only need basic access and do not need Safe Mode, schema-only AI or one install for the whole team, the free tools work fine.
See it before you pay
Open the live demo (read-only sample database, AI switched off), no signup. If it fits, buy once and run it next to your stack.
Stripe checkout. You'll need a GitHub account for the repo invite. No refunds, so try the read-only demo first.
512 MB RAM minimum, 1 GB recommended, with a 512 MB container limit. Runs on Node.js 22 as a non-root user, bound to localhost behind nginx.
Installed with ./queryglow install, QueryGlow uses host networking: databases on the same server are at 127.0.0.1. Find local servers checks the standard ports for you.
./queryglow update backs up, checks that the new version answers, and rolls back if it does not.
Describe what you want in plain English and review the SQL before it runs. Your own OpenAI, Anthropic or Google key, entered in the app and stored encrypted, with a Test button.
Reach your Docker databases from any device with a browser. No desktop app needed: open a URL and sign in once.
Saved passwords, SSH keys and in-app AI keys are encrypted with AES-256-GCM. Someone who reads your volume still cannot read the passwords without the key.
QueryGlow uses host networking. A database installed on the server, or a container that publishes its port there, is at 127.0.0.1.
Host: 127.0.0.1Port: 5432Paste the DATABASE_URL from your .env and the form fills itself. Find local servers checks ports 5432, 5433, 3306, 3307 and 26257 on the machine; Find databases on this server lists every database your login can open and adds them in one go.
postgres://app:[email protected]:5432/appTry the live demo first: the real app on a sample database, read-only, AI switched off, no signup. If it clicks, grab a lifetime license for $79.
After you pay: a GitHub invite to the private repository, then ./queryglow install on your server. Every 1.x update is one ./queryglow update away.