← Back to Home

Documentation

Varium SQL is a Server-First SQL client: connect to a server, pick a database, and work. Everything below reflects the current desktop app.

Getting Started

Download Varium SQL for macOS, Windows, or Linux from the homepage — no account required to start. On first launch you land on the connections screen, where every database you connect to is saved for next time.

Click New Connection to add a database, or Quick Connect to jump straight back into the last one you used.

Connecting to a Database

Varium SQL supports PostgreSQL, MySQL, MariaDB, SQLite, SQL Server, Oracle, MongoDB and Redis. Each connection can be configured two ways:

  • Basic — host, port, username, password, database name
  • URL — paste a full connection string (e.g. postgresql://user:pass@host:5432/db)

SQLite connections point to a local .db file instead — type a path to an existing file, or a new one to create it.

For databases behind a bastion host, enable SSH Tunnel and provide the jump host's credentials (password or private key). Varium SQL opens the tunnel automatically and routes the connection through it.

Use Test Connection before saving to confirm the server is reachable without connecting for real. Each saved connection also has a Query Guard level — see below.

Oracle: RAC and Thick mode

A single-instance Oracle needs only a host, a port and a service name. A production Oracle usually needs more, and both of the settings below live in Oracle: RAC, timeouts and Oracle Client on the connection form.

Connect descriptor (RAC)

RAC is a list of addresses with load balancing and failover between them, and that shape cannot be written as host:port/service — reducing it keeps one address and discards the redundancy the cluster exists for, so the connection times out whenever that node is the one that is down. Paste the full descriptor your DBA gave you and it is sent to Oracle exactly as written:

(DESCRIPTION=(FAILOVER=on)(ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=TCP)(HOST=node1)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=node2)(PORT=1521))
    (LOAD_BALANCE=yes))
  (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=PROD)))

When it is filled in, the host, port and service fields above are ignored. Connect timeout, retry count and retry delay sit beside it — Oracle's own default wait is long enough that a dead node looks like a frozen application. In Thick mode those come from sqlnet.ora instead.

Thick mode (NJS-116)

Accounts whose password predates 11g have a verifier the built-in driver cannot read, and they fail with NJS-116: password verifier type 0x939 is not supported. No connection setting changes that. Tick Use Oracle Client (Thick mode), which hands authentication to Oracle Instant Client — Varium SQL looks for it in the usual places for your platform and offers what it finds, or you can point at a folder. The alternative is a DBA resetting the password, which generates a current verifier.

Thick mode applies to every Oracle connection, not just the one you set it on. That is the driver's rule rather than a shortcut: it switches the whole process, will not run once a connection has been made, and cannot be switched back. If you turn it on after connecting, Varium SQL says so and asks you to restart.

Query Editor

The editor is a full Monaco-based SQL editor with syntax highlighting, schema-aware autocomplete, and AI-powered suggestions as you type — press Tab to accept an AI suggestion inline.

  • Ctrl/⌘ + Enter — run the whole query (or script, for multi-statement SQL)
  • Ctrl/⌘ + Shift + E — run only the statement under the cursor
  • Ctrl/⌘ + Shift + F — format the SQL
  • Esc / Ctrl/⌘ + C — stop a running query

Tabs can be scoped globally (shared across every connection) or per-connection, whichever fits your workflow — switch this anytime from File → Settings.

Results Grid

Results render as a dense, virtualized table that stays smooth even with very large result sets. Switch between Table, Card, JSON, Chart, and Pivot views from the toolbar above the results.

Columns

  • Drag a column's right edge to resize it, or drag its header to reorder it
  • Pin a column left or right from its header menu — it stays visible while you scroll
  • Filter any single column, or use the search box to filter across every column at once
  • Sort by clicking a header; see per-column stats (min/max/distinct/nulls) from the chart icon

Editing

  • Double-click any editable cell to edit it in place; primary keys are read-only
  • Long values open in a floating editor instead of a cramped inline box — the same overlay also lets you peek at long read-only values without editing them
  • Check the boxes on the left to select multiple rows, then delete them all at once
  • Right-click a cell for more options: copy as JSON/CSV/INSERT, jump to a foreign key's referenced row, or delete the row

A result set is only editable when Varium SQL can trace every row back to a single table with a primary key — you'll see a badge in the results header explaining whether editing is available and why.

AI Assistant

Describe what you want in plain language and the AI Assistant panel writes the SQL for you, aware of your current schema. Keep multiple conversations going and pick up any of them later from the history menu.

MCP Server (AI Agents)

Varium SQL can lend your connections to an AI agent running outside it — Claude Code, Cursor, Zed, or anything that speaks the Model Context Protocol. The agent explores your schemas and reads your data through Varium SQL, which means it never receives a password: your credentials stay in the OS keychain where the app already keeps them.

Setting it up

Open File → MCP Server (AI Agents), or find it in the command palette. Start the server, then tick the connections you want reachable. Nothing is exposed until you do — an agent connected to a server with no grants sees no databases at all, not even their names.

The panel shows the command to run, already filled in:

claude mcp add --transport http varium-sql \
  http://127.0.0.1:8271/mcp \
  --header "Authorization: Bearer <token>"

The server listens on loopback only and requires that token. The token survives restarts, so you configure the agent once and it keeps working; if it ever ends up somewhere it should not have, Rotate token issues a new one and refuses the old immediately. Tick start with Varium SQL if you would rather not turn the server on each session.

What an agent can do

Ten tools: list the granted connections, list the databases on a server, list schemas, describe a table (columns, keys and indexes), run a read-only query, explain a query, search the query history, list saved queries, propose a statement, and open something in the Varium SQL window.

The history is the part worth pointing at. An agent reading it sees how your team actually queries this database — which joins you use, which filters you always apply, which query takes eight seconds — so it writes SQL that matches yours instead of SQL that merely works. No standalone MCP server can offer that, because none of them has your history.

explain_query is worth knowing about too. Agents are confidently wrong about performance because they cannot measure, so this hands them the plan — whether a query will scan a table or use an index, and how many rows the engine expects. It never runs the statement: the measured form of EXPLAIN executes what it measures, and an agent has not been given permission to run anything.

More than one database

A saved connection names one database, but the credentials behind it usually reach every database on that server — so a grant covers the server. An agent calls list_databases and can then pass database to any of the read tools. This matters most on multi-tenant systems, where the catalogue and the tenant data are usually different databases and an agent limited to one of them is looking at half the application.

If you would rather a grant stayed narrow, switch that connection to one database in the same panel and anything else is refused. Either way the activity log names the database every call touched.

Sensitive data: shapes only

By default a granted connection returns real rows. Each one can be switched to shapes only in the same panel, which changes what leaves your machine: the query still runs, but the agent receives column names and types, how many rows, how many nulls, how many distinct values, and one masked example per column — [email protected] for an email, <4-digit number> for a total. Enough to write a correct query; not enough to disclose anything.

Query history and saved queries are redacted on the same terms, since a statement carries the values it searched for: WHERE email = '?' keeps the shape and drops the address. Credentials are a separate matter and are stripped always, whatever mode a connection is in — a CREATE ROLE ... PASSWORD run from the editor months ago is in your history, and there is no setting under which an agent should be handed it. Everything is computed from rows already fetched, so the mode costs nothing extra at the database, and it is per connection — production and a local copy usually want opposite answers.

What an agent cannot do

It cannot write. run_query accepts only statements that read, and refuses the ones that look like reads but are not — a data-modifying CTE, a SELECT ... INTO, or a second statement hidden after a comment. To change data an agent calls propose_query, which places the statement in your editor with a note about which connection it was written for, and a warning if that is not the connection you are currently on. It is never executed for you.

Every call is written to an activity log you can read in the same panel, including the ones that were refused, and an indicator appears in the window while an agent is working.

One thing worth knowing

A SQL function can write to the database, and calling one from a SELECT is a read as far as any syntax check is concerned. If you are pointing an agent at production, the durable protection is a database user without write privileges — this is designed to sit alongside that, not to replace it.

Terminal

Ctrl+` opens a terminal at the bottom of the window, or find it under View. It runs your own shell — whatever $SHELL points at — with your aliases, your prompt and your PATH, and it takes the colours of whichever of the 38 themes you are using. Open as many as you need; they keep running while the panel is collapsed.

It exists mainly for one thing. Connect agent in the terminal toolbar starts the MCP server if it is not already running and registers it with Claude Code in a new terminal — so the agent that reads your schemas runs in the same window as the schemas, and the token never passes through your clipboard.

Set folder in the same toolbar picks the directory new terminals open in, remembered per connection — a database belongs to a project, and one global setting would be wrong the moment you opened your second. It matters most for the agent: started in $HOME it has your databases and none of your code, so it answers from the schema alone. Started in the repository that talks to that database, it has both. Terminals already running keep the directory they were started in.

Terminals close when Varium SQL quits. A shell that outlived the window would keep running with nothing left to reach it through.

Command Palette

Press Ctrl/⌘ + K from anywhere to search connections, tables, and actions without leaving the keyboard.

Themes & Query Guard™

Pick from 18 free themes (38 with Pro) from View → Themes.

Query Guard™ is a per-connection safety net against accidental destructive queries on the databases you care about most:

  • Unguarded — no extra confirmation (good for local/dev databases)
  • Guarded — confirms before destructive statements (UPDATE/DELETE without a WHERE, DROP, TRUNCATE)
  • Protected — the strictest level, meant for production databases

Set the level once when you create the connection, and change it anytime from Edit Connection.

Keyboard Shortcuts

Run QueryCtrl/⌘ + Enter
Run Current StatementCtrl/⌘ + Shift + E
Stop QueryEsc
Format SQLCtrl/⌘ + Shift + F
Accept AI AutocompleteTab
New Query TabCtrl/⌘ + T
Close TabCtrl/⌘ + W
Save QueryCtrl/⌘ + S
Command PaletteCtrl/⌘ + K
Toggle SidebarCtrl/⌘ + B

The full, up-to-date list is always available in the app from Help → Keyboard Shortcuts.

Can't find what you're looking for? [email protected]