A free, cross-platform desktop client for working with relational databases.
MySQL · MariaDB · PostgreSQL · SQL Server · H2 · SQLite · Multi-connection · SQL editor with autocomplete
QueryExe is a modern database editor built with JavaFX: connect to several database engines at once, browse schemas, write SQL with syntax highlighting and autocomplete, edit result sets directly in the grid, and export what you find. No server, no account, no telemetry — it's a local desktop tool.
The project has two pieces — you only need to think about the second one if you're building from source:
| Piece | Role |
|---|---|
| query-exe (this repo) | The desktop client itself — connections, the SQL editor, schema browsing, result grids |
| query-exe-launcher | Auto-updating launcher source — built into the Windows installer & Linux AppImage by this repo's release pipeline, keeps the client (and itself) up to date |
📥 Just want to use QueryExe? Grab the Windows installer or Linux AppImage from this repo's Releases page — it installs the client and keeps it current automatically, every time you start it. You never need to build anything yourself. (Not query-exe-launcher's releases — that repo's own releases only carry self-update payloads for an already-installed launcher, not something you'd download directly.)
Multi-database support — connect to and manage multiple database systems simultaneously: MySQL, MariaDB, PostgreSQL, SQL Server, H2 (embedded) and SQLite (serverless).
Connection management — manage several connections at once, monitor active connections, and configure custom JDBC drivers per connection when the bundled ones don't fit.
Query execution — an advanced SQL editor with syntax highlighting and intelligent autocomplete, running multiple queries concurrently, with saved queries for reuse.
Schema management — browse databases, schemas, tables and columns; inspect detailed table/column properties; create, alter and drop tables, databases and schemas.
Data manipulation — edit result sets directly in the grid, auto-generate DDL and INSERT scripts from data, and export results as CSV, JSON or XML.
A fast, modern interface — JavaFX with an AtlantaFX theme, syntax-highlighted SQL, and cross-platform behavior on Windows and Linux.
| Database | Pre-installed driver version |
|---|---|
| MySQL | 9.5.0 |
| MariaDB | 3.5.6 |
| PostgreSQL | 42.7.8 |
| SQL Server | 13.2.1.jre11 |
| H2 | 2.4.240 |
| SQLite | 3.51.1.0 |
Every JDBC driver can be swapped out for a different version or a custom build from within the app.
Creating a connection — click New Connection, pick a database type, enter host/port/database/credentials, test it, and save.
Running queries — open a query tab, write SQL with syntax highlighting and autocomplete, run it with Ctrl+Enter or the Run button, then view, edit or export the results.
Managing tables — right-click any table for create/alter/drop operations and to inspect its properties and statistics.
Exporting data — run a query, click Export, pick CSV/JSON/XML, choose a destination.
Download the launcher — a Windows installer or Linux AppImage — from this repo's releases page. It's built by this repo's release pipeline (using query-exe-launcher's source), and it installs the client into your app data directory and updates it automatically on every start, so install once and forget about it. query-exe-launcher's own releases page only publishes self-update payloads for a launcher you've already installed — it's not where the installer/AppImage comes from.
There's no hub or server behind QueryExe — the launcher and client each query GitHub Releases directly for updates, using the release tag as the version. The client's update/LauncherUpdateService does something a little unusual: once per start, it checks whether the query-exe-launcher that started it is out of date, and if so, downloads and swaps its files in the background. It has to be the client that does this — by the time the client is running, the launcher process has already exited, so there's nothing left to check on its own behalf.
- It reads
System.getProperty("launcher.version")— forwarded by the launcher when it spawns the client — and compares it against the launcher repo's latest GitHub release tag. A missing value (an old launcher, from before this existed) is always treated as outdated. - Every downloaded file is verified against a
.sha256sidecar published alongside it in the same release, before it replaces anything. - On Windows it overwrites
app/query-exe-launcher.jarnext to the running install; on Linux it overwrites the.AppImageat$APPIMAGE(an AppImage is one opaque unit — there's no "just the launcher part" to update). Both are safe to replace while in use, since the launcher process that loaded them has already exited. - It's entirely best-effort and silent: any failure is logged and swallowed, since a failed launcher self-update must never interfere with the client actually running. No UI, no restart prompt.
See query-exe-launcher's README for the full mechanics.
Requirements: Java 21 and Maven.
git clone https://github.com/B077AS/query-exe
cd query-exe
# Run in development
mvn javafx:run
# Build a fat JAR for distribution (bundles Windows + Linux JavaFX natives)
mvn clean package -PpackageThere's no hub URL to bake in and no prod profile — the client is entirely self-contained, so the only build variant is -Ppackage. The compiled JAR lands in target/.
| Package | Responsibility |
|---|---|
components/ |
UI widgets: the SQL editor, home/connections pane, menu & toolbar, modals, result grid, tree view |
model/ |
Connection definitions per database type, result/column/query data, JDBC driver loading |
service/ |
Connection lifecycle, query execution, app settings, recent files, export |
theme/ |
AtlantaFX theme wiring and light/dark switching |
update/ |
LauncherUpdateService — checks and self-updates the launcher that started this client (see above) |
utils/ |
Icon coloring, Windows theme integration, tab-scroll chevrons, misc helpers |
| Layer | Technology |
|---|---|
| Language / runtime | Java 21 |
| UI | JavaFX 22, AtlantaFX theme, Ikonli icon packs, RichTextFX |
| Database connectivity | JDBC drivers for MySQL, MariaDB, PostgreSQL, SQL Server, H2, SQLite |
| Networking | Java HttpClient (GitHub Releases API for the launcher-update check), OkHttp |
| Credentials | Windows Credential Manager via credential-secure-storage |
| System integration | JNA / JNA Platform |
| Serialization | Gson |
| Build | Maven — javafx-maven-plugin for dev, maven-shade-plugin for the distributable fat JAR |
| Misc | Logback, Lombok |
| Repo | What it is |
|---|---|
| query-exe | This repo — desktop client (JavaFX, Windows & Linux) |
| query-exe-launcher | Auto-updating launcher — Windows installer & Linux AppImage |
- ER diagram generation
- Theme selection
- Query performance analysis
- Database backup and restore
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Is QueryExe free? Yes — the client and the launcher are both free, MIT-licensed, no ads, no tracking, no paid tiers.
Do I need a server or an account? No. QueryExe is a local desktop tool — it only talks to the databases you point it at, and to GitHub to check for updates.
Why a launcher instead of a plain installer? So you're always running the current version without manually checking for updates — install once, every start after that is automatically up to date.
How do updates work? The launcher checks GitHub for a new client release on every start and swaps in the new JAR automatically. The client returns the favor: it checks whether the launcher itself is out of date and self-updates it in the background too (see Keeping the launcher up to date).
- Built with JavaFX
- UI powered by AtlantaFX
- Icons from Ikonli
- SQL editing with RichTextFX
This project is licensed under the MIT License.
Made with Java
If you find QueryExe useful, consider giving it a ⭐!



