- Portable
- Fast startup
- Local-first
- Six engines
- Developer-focused
- Auto-updating
-
+
-
SQL tools are usually overkill. BarSQL isn't.
-
- Most SQL clients are slow and heavy, cloud-connected by default, tied to subscriptions and packed with
- features you never use. BarSQL does one thing: a fast, local place to work with your databases.
-
-
-
-
-
Native and GPU-rendered
+
+
SQL tools are usually overkill. BarSQL isn't.
+
+
+
+ 01
+
Native and GPU-rendered
Drawn on the GPU with GPUI, the UI framework behind the Zed editor: one Rust codebase from the database drivers to the window.
-
-
-
Yours, entirely
+
+ 02
+
Yours, entirely
Everything runs and stays on your machine. No account, no sign-in, no telemetry: your connections and queries never leave your computer.
-
-
-
Portable by design
+
+ 03
+
Portable by design
Connections, history, saved queries and settings live in one BarSQL-data folder next to the app. Copy both to a USB stick and carry on elsewhere.
-
-
-
Tested for real
+
+ 04
+
Tested for real
Whole-window UI tests drive the app with real keystrokes and clicks, and end-to-end suites run against real PostgreSQL, MySQL, MariaDB, SQL Server, ClickHouse and libSQL servers.
-
+
-
Six engines. One app.
-
- The same editor, grid, schema tree and plan viewer on every engine, speaking each one's own dialect.
- Read-only connections are refused by BarSQL and, wherever the engine allows, by the server as well.
-
-
-
-
PostgreSQL
Server
-
-
SSL: disable, require, verify-full
-
Notices and warnings as they arrive, in the Messages tab
-
Activity, blocking and long-running queries in one click
-
DDL composed from the catalog
-
Powered by tokio-postgres
-
+
+ Tour
+
A closer look
+
The work you do every day, without the detours.
+
+
+
+
+ SQL editor
+
+
+
+
Write SQL at full speed
+
Suggestions know your schema and your engine: tables, columns, aliases and CTEs, every built-in function with its arguments, and JOIN snippets where a join fits.
+
+
Run the statement at the caret, a selection, or the whole script
+
Multiple cursors, line commands and go to definition, as in VS Code
+
:name parameters ask for their values, and remember them
+
A result tab per output, and notices, warnings and PRINT output in a Messages tab
+
Pinned transactions per tab: BEGIN, then commit or roll back from the toolbar
+
An error is underlined where it happened, and a mistyped name gets a one-click fix
Explain shows the planner's estimate; Explain analyze runs the statement and reports what really happened. Every engine's plan lands in the same tree, with costs and timings wherever the engine reports them.
+
+
A heat bar on each node's own share of time, cost or rows
+
Row estimates 10x off are flagged: that's where a missing index hides
+
Every detail the engine reported, plus its raw output
+
Analyzing a write always rolls it back, so nothing lands
TLS, including TDS 8.0 strict, and named instances
-
GO batches, with PRINT output in the Messages tab
-
Estimated and actual plans from Showplan XML
-
Requests, sessions and blocking at a glance
-
SQL Server 2017 or newer, powered by tiberius
-
+
+
+ Table data
+
+
+
+
Edit rows, not UPDATE statements
+
Browse any table, filter it with a WHERE condition that autocompletes, and change it in place. A query's results edit the same way, when they come from one table with its primary key.
+
+
Edits and deletes are staged until you apply them, with undo and redo
+
Paste blocks of cells, set NULL, insert rows
+
Checkboxes for booleans, and a picker for enums
+
Jump through foreign keys to the row a cell points at
+
The focused row as JSON beside the grid, filterable by key
HTTP or HTTPS, with a session per tab, so SET and USE hold
-
Read-only connections run with readonly=2 on the server too
-
Plans with the indexes each step reads
-
Array, Map and Tuple values read as JSON
-
A table's parts, mutations and merges
-
+
+
+ Results
+
+
+
+
See the shape of a result
+
The Chart button plots any result as bars or lines, beside the grid it came from. Pick the labels and up to five values, summed, counted or averaged where labels repeat.
+
+
Sensible picks to start from, kept when you switch back to the grid
+
The count, sum, average, min and max of a selection in the status bar
+
Numbers lined up on the decimal point, and each column's type and keys in its header
+
Many bars scroll sideways rather than squeeze together
Edit a table's columns, indexes, foreign keys and checks in a Structure tab, or design a new table there. The SQL it will run sits right below, and follows every edit.
+
+
Added rows in green, changed fields in yellow, dropped ones struck through
+
One transaction on PostgreSQL and SQL Server, and a single ALTER TABLE on MySQL
+
SQLite tables rebuilt in a transaction when ALTER can't do the job
+
If the server refuses, its message shows and your edits stay as they are
- 1 To a self-hosted sqld; Turso Cloud is reached directly.
- 2 Turso holds no transaction between runs, but a script's own BEGIN … COMMIT works.
- 3 Columns only.
- 4 The server doesn't refuse writes by itself here, so give the AI's connection a read-only login or token.
- ClickHouse has no transactions and no primary keys to edit rows by, so its tables are browse-only.
-
-
-
-
-
-
-
A closer look
-
The work you do every day, without the detours.
-
-
-
- SQL editor
-
Write SQL at full speed
-
Suggestions know your schema and your engine: tables, columns, aliases and CTEs, every built-in function with its arguments, and JOIN snippets where a join fits.
-
-
Run the statement at the caret, a selection, or the whole script
-
Multiple cursors, line commands and go to definition, as in VS Code
-
:name parameters ask for their values, and remember them
-
A result tab per output, and notices, warnings and PRINT output in a Messages tab
-
Pinned transactions per tab: BEGIN, then commit or roll back from the toolbar
-
An error is underlined where it happened, and a mistyped name gets a one-click fix
Explain shows the planner's estimate; Explain analyze runs the statement and reports what really happened. Every engine's plan lands in the same tree, with costs and timings wherever the engine reports them.
-
-
A heat bar on each node's own share of time, cost or rows
-
Row estimates 10x off are flagged: that's where a missing index hides
-
Every detail the engine reported, plus its raw output
-
Analyzing a write always rolls it back, so nothing lands
Browse any table, filter it with a WHERE condition that autocompletes, and change it in place. A query's results edit the same way, when they come from one table with its primary key.
-
-
Edits and deletes are staged until you apply them, with undo and redo
-
Paste blocks of cells, set NULL, insert rows
-
Checkboxes for booleans, and a picker for enums
-
Jump through foreign keys to the row a cell points at
-
The focused row as JSON beside the grid, filterable by key
The Chart button plots any result as bars or lines, beside the grid it came from. Pick the labels and up to five values, summed, counted or averaged where labels repeat.
-
-
Sensible picks to start from, kept when you switch back to the grid
-
The count, sum, average, min and max of a selection in the status bar
-
Numbers lined up on the decimal point, and each column's type and keys in its header
-
Many bars scroll sideways rather than squeeze together
Edit a table's columns, indexes, foreign keys and checks in a Structure tab, or design a new table there. The SQL it will run sits right below, and follows every edit.
-
-
Added rows in green, changed fields in yellow, dropped ones struck through
-
One transaction on PostgreSQL and SQL Server, and a single ALTER TABLE on MySQL
-
SQLite tables rebuilt in a transaction when ALTER can't do the job
-
If the server refuses, its message shows and your edits stay as they are
BarSQL is an MCP server too. Claude, Cursor, VS Code and other AI apps start BarSQL --mcp in the background, with no window, and work with the connections you share.
-
-
Opt in per connection: the rest stay invisible to the AI
-
Queries pass BarSQL's read-only check, and PostgreSQL, MySQL, SQLite and ClickHouse sessions refuse writes too
-
Changes only where you allow them, with a preview that rolls back
-
No password or token reaches the AI, and every call is logged
-
Set up with one paste: tick Allow AI assistants, then Copy MCP setup
list_connections shared connections
list_tables schemas and tables
describe_table columns and keys
show_ddl CREATE statements
run_query read-only SQL
explain_query query plans
run_change changes you allow
+
+
+
Your databases, in your AI assistant
+
BarSQL is an MCP server too. Claude, Cursor, VS Code and other AI apps start BarSQL --mcp in the background, with no window, and work with the connections you share.
+
+
Opt in per connection: the rest stay invisible to the AI
+
Queries pass BarSQL's read-only check, and PostgreSQL, MySQL, SQLite and ClickHouse sessions refuse writes too
+
Changes only where you allow them, with a preview that rolls back
+
No password or token reaches the AI, and every call is logged
+
Set up with one paste: tick Allow AI assistants, then Copy MCP setup
Fuzzy and context-aware: schema.table.column dot completion, quoted identifiers, aliases, CTEs and JOIN snippets.
-
Function help
Every built-in function of your engine, plus the server's own, completes with its arguments. Hover one for its signatures and what it does.
-
Multiple cursors
Add a cursor at the next occurrence or at every one, and edit them all at once. Line commands, go to definition and go to line work as in VS Code.
-
Messages tab
PostgreSQL notices, MySQL warnings and SQL Server PRINT output, grouped under the statement that raised them, with levels and codes.
-
Multi-statement scripts
Statements run in order on one connection, so temp tables, SET and scripted transactions hold. SQL Server scripts run by GO batch.
-
Pinned transactions
BEGIN, COMMIT and ROLLBACK as SQL or from the toolbar. Queries run inside the tab's open transaction until it ends.
-
Streaming results
Rows render as the driver yields them, in a virtualized grid that scrolls smoothly through thousands of rows.
-
Quick charts
Plot a result as bars or lines: pick the labels and up to five value columns, summed, counted or averaged.
-
Query plan viewer
Estimated or measured plans as one tree on every engine, with heat bars and flagged estimates. Type EXPLAIN yourself and it opens there too.
-
System views
Activity, blocking, sessions and running queries, or a table's statistics, index usage, parts and merges, each in a tab you can tweak.
-
Schema explorer
Tables, views, columns, indexes, constraints, triggers and functions, with type and key icons, instant search and a row count that needs no tab.
-
ER diagrams and compare
Every table and key of a schema in a diagram you can pan, zoom and search, and a compare with another schema that writes the sync script.
-
Structure editor
Edit columns, indexes, foreign keys and checks, or design a new table. The exact SQL shows as you go, in a script your engine can apply safely.
-
Schema changes
Rename, truncate and drop from the tree. Each dialog shows the exact SQL for your engine, with Cascade on PostgreSQL.
-
Table backups
Structure and rows to a .sql file. The server writes every value as a literal, so dates, JSON and binary survive the round trip.
-
Edit data in the grid
In a table, or a query's results from one: staged edits, deletes and new rows with undo, paste and foreign-key jumps, checkboxes for booleans and pickers for enums.
-
Cell and JSON viewers
A cell editor for large values (JSON, XML, HTML or text), and a JSON view of the row. PostgreSQL arrays and ClickHouse maps and tuples read as JSON too.
-
CSV and SQL import
Column mapping, inferred types, configurable NULL text and header rows, or a .sql script run statement by statement.
-
One-click export
Text, CSV, JSON, Markdown or SQL INSERT written for your engine, for all or the selected rows, to the clipboard or a file.
-
Saved queries and history
Save and reuse queries with unsaved-change tracking, plus per-connection history with status and duration, filterable to failed runs.
-
Safety nets
Ask before changes on production connections, a check before an UPDATE or DELETE without WHERE, and read-only mode the server enforces too, where it can.
-
SSH tunnel
Reach a database only its bastion can see, with a key, a password or ssh-agent, and host keys checked against known_hosts.
-
Connection manager
Folders, tab colors, read-only mode and a database list fetched from the server, plus SQL Server named instances and Turso tokens.
-
SQLite extensions
Load extensions such as cr-sqlite into a connection each time it opens. Their functions complete and show on hover, and Test says why a file didn't load.
-
Keyboard-first
Quick Search jumps to tabs, tables, saved queries and connections, and the command palette runs any command, with its shortcut. Shortcuts are remappable.
-
Instant and polished
Dark and light themes that can follow the system, English, Deutsch, Български and Español, no animations in the way, and your window restored where you left it.
-
Updates itself
A new release shows up with its notes. One click downloads it, checks its SHA-256 and restarts into it.
+
+ Engines
+
Six engines. One app.
+
The same editor, grid, schema tree and plan viewer on every engine, speaking each one's own dialect. Read-only connections are refused by BarSQL and, wherever the engine allows, by the server as well.
+
+
+
+
PostgreSQL
Server
+
+
SSL: disable, require, verify-full
+
Notices and warnings as they arrive, in the Messages tab
+
Activity, blocking and long-running queries in one click
+
DDL composed from the catalog
+
Powered by tokio-postgres
+
+
+
+
MySQL / MariaDB
Server
+
+
TLS transport
+
Warnings and notes in the Messages tab
+
The process list and open InnoDB transactions
+
The server's own SHOW CREATE DDL
+
Powered by mysql_async
+
+
+
+
SQL Server
Server
+
+
TLS, including TDS 8.0 strict, and named instances
+
GO batches, with PRINT output in the Messages tab
+
Estimated and actual plans from Showplan XML
+
Requests, sessions and blocking at a glance
+
SQL Server 2017 or newer, powered by tiberius
+
+
+
+
ClickHouse
HTTP
+
+
HTTP or HTTPS, with a session per tab, so SET and USE hold
+
Read-only connections run with readonly=2 on the server too
+
Plans with the indexes each step reads
+
Array, Map and Tuple values read as JSON
+
A table's parts, mutations and merges
+
+
+
+
Turso / libSQL
HTTP
+
+
Turso Cloud, or your own sqld, with an auth token
+
Rows stream in as the server sends them
+
An expired stream reopens by itself, and says what was lost
+
libSQL's vector functions in completion and hover
+
SSH tunnel to a self-hosted sqld
+
+
+
+
SQLite
File
+
+
Open a file, or drop it on the window
+
Opens straight from Finder or Explorer
+
Extensions such as cr-sqlite, loaded as it opens
+
Local libSQL and Turso files open here too
+
Bundled SQLite via rusqlite
+
+
+
+
What each engine gets
+
+
+
+
+
Feature
+
PostgreSQL
+
MySQL / MariaDB
+
SQL Server
+
ClickHouse
+
Turso / libSQL
+
SQLite
+
+
+
+
Read-only mode
Yes
Yes
Yes
Yes
Yes
Yes
+
SSH tunnel
Yes
Yes
Yes
Yes
1Yes, self-hosted sqld only
n/aNot applicable
+
Transactions pinned to a tab
Yes
Yes
Yes
–No
–2No, though a script's own BEGIN … COMMIT works
Yes
+
Edit rows and query results
Yes
Yes
Yes
–No
Yes
Yes
+
Structure editor
Yes
Yes
Yes
3Yes, columns only
Yes
Yes
+
Function completion and hover
Yes
Yes
Yes
Yes
Yes
Yes
+
Messages tab
Yes
Yes
Yes
–No
–No
–No
+
System views
Yes
Yes
Yes
Yes
–No
–No
+
Query plan tree
Yes
Yes
Yes
Yes
Yes
Yes
+
Measured plans (explain analyze)
Yes
Yes
Yes
–No
–No
–No
+
Copy DDL and table backups
Yes
Yes
Yes
Yes
Yes
Yes
+
AI assistants (MCP)
Yes
Yes
4Yes, with a read-only login
Yes
4Yes, with a read-only token
Yes
+
+
+
+
+ 1 To a self-hosted sqld; Turso Cloud is reached directly.
+ 2 Turso holds no transaction between runs, but a script's own BEGIN … COMMIT works.
+ 3 Columns only.
+ 4 The server doesn't refuse writes by itself here, so give the AI's connection a read-only login or token.
+ ClickHouse has no transactions and no primary keys to edit rows by, so its tables are browse-only.
+
-
+
-
Screenshots
-
Click a screenshot to see it full size, then use the arrow keys to browse.
Fuzzy and context-aware: schema.table.column dot completion, quoted identifiers, aliases, CTEs and JOIN snippets.
+
Function help
Every built-in function of your engine, plus the server's own, completes with its arguments. Hover one for its signatures and what it does.
+
Multiple cursors
Add a cursor at the next occurrence or at every one, and edit them all at once. Line commands, go to definition and go to line work as in VS Code.
+
Messages tab
PostgreSQL notices, MySQL warnings and SQL Server PRINT output, grouped under the statement that raised them, with levels and codes.
+
Multi-statement scripts
Statements run in order on one connection, so temp tables, SET and scripted transactions hold. SQL Server scripts run by GO batch.
+
Pinned transactions
BEGIN, COMMIT and ROLLBACK as SQL or from the toolbar. Queries run inside the tab's open transaction until it ends.
+
Streaming results
Rows render as the driver yields them, in a virtualized grid that scrolls smoothly through thousands of rows.
+
Quick charts
Plot a result as bars or lines: pick the labels and up to five value columns, summed, counted or averaged.
+
Query plan viewer
Estimated or measured plans as one tree on every engine, with heat bars and flagged estimates. Type EXPLAIN yourself and it opens there too.
+
System views
Activity, blocking, sessions and running queries, or a table's statistics, index usage, parts and merges, each in a tab you can tweak.
+
Schema explorer
Tables, views, columns, indexes, constraints, triggers and functions, with type and key icons, instant search and a row count that needs no tab.
+
ER diagrams and compare
Every table and key of a schema in a diagram you can pan, zoom and search, and a compare with another schema that writes the sync script.
+
Structure editor
Edit columns, indexes, foreign keys and checks, or design a new table. The exact SQL shows as you go, in a script your engine can apply safely.
+
Schema changes
Rename, truncate and drop from the tree. Each dialog shows the exact SQL for your engine, with Cascade on PostgreSQL.
+
Table backups
Structure and rows to a .sql file. The server writes every value as a literal, so dates, JSON and binary survive the round trip.
+
Edit data in the grid
In a table, or a query's results from one: staged edits, deletes and new rows with undo, paste and foreign-key jumps, checkboxes for booleans and pickers for enums.
+
Cell and JSON viewers
A cell editor for large values (JSON, XML, HTML or text), and a JSON view of the row. PostgreSQL arrays and ClickHouse maps and tuples read as JSON too.
+
CSV and SQL import
Column mapping, inferred types, configurable NULL text and header rows, or a .sql script run statement by statement.
+
One-click export
Text, CSV, JSON, Markdown or SQL INSERT written for your engine, for all or the selected rows, to the clipboard or a file.
+
Saved queries and history
Save and reuse queries with unsaved-change tracking, plus per-connection history with status and duration, filterable to failed runs.
+
Safety nets
Ask before changes on production connections, a check before an UPDATE or DELETE without WHERE, and read-only mode the server enforces too, where it can.
+
SSH tunnel
Reach a database only its bastion can see, with a key, a password or ssh-agent, and host keys checked against known_hosts.
+
Connection manager
Folders, tab colors, read-only mode and a database list fetched from the server, plus SQL Server named instances and Turso tokens.
+
SQLite extensions
Load extensions such as cr-sqlite into a connection each time it opens. Their functions complete and show on hover, and Test says why a file didn't load.
+
Keyboard-first
Quick Search jumps to tabs, tables, saved queries and connections, and the command palette runs any command, with its shortcut. Shortcuts are remappable.
+
Instant and polished
Dark and light themes that can follow the system, English, Deutsch, Български and Español, no animations in the way, and your window restored where you left it.
+
Updates itself
A new release shows up with its notes. One click downloads it, checks its SHA-256 and restarts into it.
-
+
-
Keyboard-first
-
Most can be remapped in the app's shortcuts editor. The editor's own keys work as in VS Code.
-
-
Quick Search
CtrlP
-
Command palette
CtrlShiftP
-
Run selection, or the statement at the caret
CtrlEnter
-
Run all statements
CtrlShiftEnter
-
Explain the query plan
CtrlShiftE
-
Explain analyze
CtrlShiftA
-
Go to definition
F12
-
Go to line
CtrlG
-
Add a cursor at the next occurrence
CtrlD
-
Save the query, or apply staged edits
CtrlS
-
New tab / close tab
CtrlT/CtrlW
-
Reopen a closed tab
CtrlShiftT
-
Toggle sidebar / JSON viewer
CtrlB/CtrlJ
-
Set a cell to NULL
CtrlBackspace
-
Zoom in / out
Ctrl=/Ctrl-
-
Rename a saved query
F2
-
+
+ Gallery
+
Screenshots
+
Click a screenshot to see it full size, then use the arrow keys to browse.
- Every build updates itself from inside the app. All of them, with their checksums, are on the
- latest release.
- Prefer to build it? cargo run -p barsql --release, as the
- contributing guide explains.
-
+
+ Shortcuts
+
Keyboard-first
+
Most can be remapped in the app's shortcuts editor. The editor's own keys work as in VS Code.
+
+
+
Quick Search
CtrlP
+
Command palette
CtrlShiftP
+
Run selection, or the statement at the caret
CtrlEnter
+
Run all statements
CtrlShiftEnter
+
Explain the query plan
CtrlShiftE
+
Explain analyze
CtrlShiftA
+
Go to definition
F12
+
Go to line
CtrlG
+
Add a cursor at the next occurrence
CtrlD
+
Save the query, or apply staged edits
CtrlS
+
New tab / close tab
CtrlT/CtrlW
+
Reopen a closed tab
CtrlShiftT
+
Toggle sidebar / JSON viewer
CtrlB/CtrlJ
+
Set a cell to NULL
CtrlBackspace
+
Zoom in / out
Ctrl=/Ctrl-
+
Rename a saved query
F2
+
-
+
+ Your data
Portable by design
- Everything lives in one BarSQL-data folder next to the app (beside the .app on macOS):
- connections, the editor session, history, saved queries and settings. Move both to a USB stick, a network
- drive or another computer and pick up where you left off.
-
+ Everything lives in one BarSQL-data folder next to the app (beside the .app on macOS):
+ connections, the editor session, history, saved queries and settings. Move both to a USB stick, a network
+ drive or another computer and pick up where you left off.
+
- When the app sits somewhere read-only, the folder goes to your user data directory instead, and
- BARSQL_DATA_DIR puts it anywhere you like.
-
+ When the app sits somewhere read-only, the folder goes to your user data directory instead, and
+ BARSQL_DATA_DIR puts it anywhere you like.
+
One Rust codebase: a background Tokio runtime talks to the databases, so the UI thread only draws. ClickHouse and Turso go through BarSQL's own small HTTP client, which also runs over SSH.
+
+ Open source
+
Built with
+
One Rust codebase: a background Tokio runtime talks to the databases, so the UI thread only draws. ClickHouse and Turso go through BarSQL's own small HTTP client, which also runs over SSH.
+ Every build updates itself from inside the app. All of them, with their checksums, are on the
+ latest release.
+ Prefer to build it? cargo run -p barsql --release, as the
+ contributing guide explains.
+