A light SQL client for people who work with many databases.
Each one through its own native driver, the way it is meant to be used.
Download the app · Get started · How it works · Contribute
LowQuery is an open-source desktop SQL client for Windows, Linux and macOS. It connects to PostgreSQL, Oracle, MySQL, MariaDB, SQL Server, SQLite, Redis and Apache Cassandra, and treats each one as itself: every engine goes through its own native driver and protocol, with server-side row limits, exact values and the script rules of that engine. Oracle needs no Oracle Client or Instant Client. The app is built with Tauri and Rust, so it starts fast and stays small.
| Database | How LowQuery connects |
|---|---|
| PostgreSQL | Extended protocol with tokio-postgres |
| Oracle | oracledb, Oracle's official thin driver in pure Rust |
| MySQL and MariaDB | Native protocol with mysql_async |
| SQL Server and Azure SQL | TDS protocol with tiberius, SQL logins or Windows accounts |
| SQLite | Embedded engine (rusqlite), opens local database files |
| Redis and Valkey | RESP3 with redis-rs: redis-cli commands, results as tables, keys browsed by type |
| Apache Cassandra | CQL native protocol with scylla (Cassandra 3.x to 5.x): keyspaces, tables, views, types and functions from system_schema, exact CQL values |
A PostgreSQL query in LowQuery, with the schema browser on the left and the result grid below the editor.
- Native per database. No ODBC or JDBC layer in the middle. Types, transactions, scripts and errors follow each engine's own rules.
- Exact values. NUMERIC and NUMBER keep every digit, dates keep their precision, and infinite dates, intervals, arrays and ranges show up the way the server writes them.
- Large tables are safe to open. The row limit is applied by the server, so
SELECT *on a big table does not pull it across the network. - Oracle without the client install, and with yours when you have it. No Oracle Client is required, yet LowQuery reads the
tnsnames.orayour machine already uses: fromTNS_ADMIN,ORACLE_HOME, the Oracle homes in the Windows registry or an Instant Client onPATH. Pick an alias, import many at once, or connect by service name, SID, descriptor or Easy Connect, as SYSDBA when needed. - Passwords stay in your keychain. Profiles are a plain JSON file; passwords live in Windows Credential Manager, macOS Keychain or Linux Secret Service.
- Works with AI agents. A built-in MCP server lets Claude, Cursor, VS Code, Codex and other agents list the connections you open to them, read schemas, find tables and run SQL. Each connection is off, read-only or read-write for agents, read-only is enforced by the database session itself, and every call is logged. See docs/AI.md.
- Bring your connections with you. Import them from DBeaver, DataGrip, pgAdmin 4, Oracle SQL Developer or
tnsnames.ora. DBeaver's saved passwords go straight to your system keychain. - Edit rows where you read them. When a result comes from one table and includes its primary key, change cells, add, duplicate or delete rows in the grid and save them in one transaction. LowQuery asks the database which table and key each column comes from instead of guessing from the SQL, binds every value with its column type, and undoes the whole save when a row's key no longer matches exactly one row.
- Manage objects from the tree. Right-click a connection, schema or table: create, edit, rename, duplicate, empty or drop tables in a designer that writes each engine's own
ALTER TABLE, show any object's DDL as the database itself scripts it, generate SELECT/INSERT/UPDATE/DELETE, create schemas and databases, or see the server's sessions. Every change shows its SQL before it runs and can open in the editor instead. - Export and import in two clicks. Right-click a table or a schema and choose Export…: a SQL script that recreates it with its rows (or only the structure, or only the data), CSV, CSV ready for Excel, or JSON, streamed from the server so large tables are fine. Import data… reads CSV or JSON, detects the encoding, delimiter and header, matches columns by name, understands
1.234,56and31/12/2024, and loads everything in one transaction; a file can also become a new table. Run SQL file… runs a script, such as an export, with progress. - Errors you can act on. Native codes (SQLSTATE, ORA-NNNNN), detail and hint, with the failing token underlined in the editor.
| Writing queries | Reading results |
|---|---|
| CodeMirror editor with each engine's dialect | Virtualized grid for thousands of rows |
| Autocompletion from the schema browser | Local sorting, resizable columns, keyboard navigation |
| Run the statement under the cursor, a selection or the whole script | Value viewer with formatted JSON |
PL/SQL blocks with /, PostgreSQL $$ bodies, MySQL DELIMITER, SQL Server GO |
Copy as TSV, export to CSV or JSON |
| One session per tab, autocommit or Commit/Rollback | RAISE NOTICE, DBMS_OUTPUT and MySQL warnings in the Messages tab |
| Script results in separate tabs | Edit cells, add and delete rows, then save or discard |
The latest release includes these builds:
| Platform | Available formats |
|---|---|
| Windows x64 | Setup .exe, .msi, portable .zip |
| Linux x64 | .AppImage, .deb, .rpm, Arch .pkg.tar.zst, portable .tar.gz |
| macOS (Apple Silicon and Intel) | Universal .dmg |
Arch Linux, Omarchy and other Arch-based systems. Install the native package with sudo pacman -U LowQuery-<version>-linux-x86_64.pkg.tar.zst. Each release also publishes a PKGBUILD with real checksums that builds the same package from the portable archive with makepkg -si.
Verify a download. Each release has .sha256 files, a SHA256SUMS file, an SPDX software bill of materials (*-sbom.spdx.json) and GitHub build provenance attestations. With the GitHub CLI:
gh attestation verify LowQuery-<version>-linux-x64.AppImage --repo LowBloat/LowQueryUpdates. Installed copies on Windows, macOS and AppImage update themselves: LowQuery checks for a new release in the background, shows what changed and installs it when you choose Install and restart. Updates are signed and verified before installation. .deb, .rpm and portable copies are told when a new version is out and link to the download.
First launch on Windows and macOS. The installers are not code-signed yet, so the system warns on first launch:
- Windows: SmartScreen shows "Windows protected your PC". Choose More info → Run anyway.
- macOS: Gatekeeper may say the app "is damaged" or "cannot be opened". Right-click LowQuery in Applications and choose Open, or run
xattr -dr com.apple.quarantine /Applications/LowQuery.apponce.
- Open LowQuery and choose New connection.
- Choose the database by its logo, fill in the server and user (or the file, for SQLite), and choose Test connection. For Oracle, TNS alias lists the aliases from the detected Oracle client.
Already use another tool? Import connections in the sidebar brings them from DBeaver (with user names and saved passwords), DataGrip, pgAdmin 4, Oracle SQL Developer or a
tnsnames.ora, without changing anything in the other tool. - Save. The connection appears in the sidebar; expand it to browse schemas, tables and columns, and right-click any of them for its actions.
- Type SQL in the editor and press Ctrl+Enter (⌘+Enter on macOS) to run the statement under the cursor, or Ctrl+Shift+Enter / F5 to run the whole script.
| Shortcut | Action |
|---|---|
| Ctrl+Enter | Run the selection or the statement under the cursor |
| Ctrl+Shift+Enter, F5 | Run the script, one statement at a time |
| Ctrl+T / Ctrl+W | New tab / close tab |
| F2 on a tab, double-click | Rename the tab |
| Ctrl+C / Ctrl+Shift+C in the grid | Copy the value / the row |
| Double-click, Enter or F2 in the grid | Edit the cell (or open the value viewer when the result is read-only) |
| Typing over a cell | Replace its value |
| Insert / Delete in the grid | Add a row / mark the row for deletion |
| Ctrl+Z in the grid | Revert the cell |
| Ctrl+S in the grid | Save the changes |
| Database | Row limit | Values | Server messages | Cancel | Scripts |
|---|---|---|---|---|---|
| PostgreSQL | Portal executed with max_rows |
Binary format decoded per type into server-style text: exact NUMERIC, infinite dates, intervals, arrays, ranges | NOTICE, WARNING |
Server cancel protocol | ;, $$ bodies, nested comments, E'' strings |
| Oracle | prefetch_rows and fetch size sized from the limit |
NUMBER, DATE, TIMESTAMP with time zone, RAW/BLOB, CLOB, JSON, VECTOR, intervals | DBMS_OUTPUT |
Not in the driver yet; scripts stop before the next statement | ; for SQL, / for PL/SQL, q'[...]' strings |
| MySQL, MariaDB | sql_select_limit on the server |
Text protocol: exact DECIMAL, unsigned BIGINT, zero dates, binary as hex | SHOW WARNINGS |
KILL QUERY from a second connection |
DELIMITER, # comments, backticks, backslash escapes |
| SQL Server, Azure SQL | SET ROWCOUNT for plain SELECT batches |
Exact decimal, datetime2 and datetimeoffset precision, uniqueidentifier, binary as hex | Not exposed by the driver yet | TDS attention | GO batches, BEGIN...END blocks, [brackets] |
| SQLite | Stops stepping at the limit | Storage class and declared type; blobs as hex | — | sqlite3_interrupt |
Trigger bodies, [brackets], backticks |
| Redis, Valkey | Long replies cut at the limit; the tree uses SCAN |
RESP3 types: maps as field/value, WITHSCORES as member/score, INFO as rows |
— | CLIENT UNBLOCK for blocking commands |
One redis-cli command per line, # comments |
| Apache Cassandra | Paging: the page size comes from the limit and reading stops there | Exact varint and decimal, timestamp, date, time, duration, uuid, blobs as hex; collections, tuples, UDTs and vectors as CQL literals |
Server warnings (tombstones, aggregations without a partition key) | Stops waiting; CQL cannot cancel on the server | ;, BEGIN BATCH ... APPLY BATCH as one statement, $$ bodies, --, // and /* */ comments |
Network configuration. PostgreSQL, MySQL, MariaDB and SQL Server use host, port and database, with disable, prefer, require or verify-full TLS. SQL Server also takes a named instance (found through SQL Server Browser) and can sign in with the Windows account running LowQuery. Oracle reads the tnsnames.ora found through TNS_ADMIN, ORACLE_HOME, registered Oracle homes or an Instant Client on PATH, or a folder you pick (IFILE, NAMES.DEFAULT_DOMAIN and Latin-1 files are supported), and accepts TCPS descriptors. SQLite opens or creates a local file. Redis takes host, port, an optional ACL user and the database index. Cassandra takes one or more contact points (comma separated), the port (9042), an optional user and password, a default keyspace, the local datacenter and the TLS mode; it has no transactions, so every statement commits on its own.
Connection profiles are stored in connections.json in the user configuration folder (%APPDATA%\LowBloat\LowQuery\config on Windows, ~/Library/Application Support/dev.LowBloat.LowQuery on macOS, ~/.config/lowquery on Linux). Open query tabs and their SQL are restored on the next start.
Read docs/ARCHITECTURE.md for the code layout and how a new database engine is added.
Install Bun, the stable Rust toolchain and the Tauri prerequisites.
git clone https://github.com/LowBloat/LowQuery.git
cd LowQuery
bun install
bun run tauri devbun run tauri build --no-bundle builds the app for your system. Installers are also signed for the updater, so a full bun run tauri build needs the signing key; without it, disable that step with bun run tauri build -c '{"bundle":{"createUpdaterArtifacts":false}}'. To work only on the interface, bun run dev serves it at http://localhost:1420 with a development mock backend.
- Interrupt a running Oracle call when the driver exposes it.
- Bind variables (
:name,$1) with a value dialog. - Fetch more rows on demand without running the query again.
- Execution plans (
EXPLAIN,DBMS_XPLAN). - Query history per connection.
- Editing results that join several tables, one table at a time.
Suggestions and database requests are welcome in the issue forms.
Bug reports, database support and pull requests are welcome. See CONTRIBUTING.md for setup and checks, SECURITY.md to report a vulnerability privately, and the code of conduct.
LowQuery is released under the GNU Affero General Public License v3.0 only.
