You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Binary values: a binary cell expands into a viewer with a hex dump and an
ASCII column, a preview when the bytes are an image (PNG, JPEG, GIF, WebP,
BMP, TIFF, ICO or SVG), Save to File and Load File. Binary columns read as 0x and hex on every database, and a value typed that way is written as
bytes. A filter on a binary column compares hex as bytes, and the export
dialog writes binary to CSV and JSON as hex or base64
Defer Values Larger Than in the Database settings leaves large text and
binary values on the server when a table is read with SELECT *. Such a
cell shows the start of its value and its size, and the full value loads
when the cell is opened, copied, compared or its row duplicated. Table
exports always write full values. Off by default
Multiple windows: New Window (secondary-shift-n, File menu or command
palette) opens another window with its own tabs over the same connections,
and Move to New Window in a tab's menu (or Move Tab to New Window in the
command palette) gives a tab a window of its own. Every window open at quit
comes back on the next start with its tabs, size and place, on the display
it was on. Closing one of several windows closes its tabs, asking first about
unsaved file changes; Close Window is secondary-shift-w, and alt-f4 now
closes the window rather than quitting on Linux and Windows
Sort a result by several columns: Shift-click another column's sort icon
to add it as the next sort key. With more than one key, each sorted header
shows its place, and a plain click goes back to sorting by one column
Follow System Appearance in the Appearance settings switches between a
light and a dark theme of your choice as the system appearance changes,
live and at startup
Expand _ into columns: with the caret on a _in a select list, Show
Code Actions (Ctrl+. or Cmd+.) replaces it with the columns of the tables
it covers.alias.\* keeps its alias, and with several tables each column
is prefixed with its table. Names are quoted only where the database needs
it
A filter bar above a table's rows narrows them on the server. Build
conditions from column, operator and value joined by Match All or Match
Any, type a WHERE condition with column completion, or search every text
column. The condition is added to the result's own query, which keeps its
columns, ordering and limit, and the rows stay editable. WHERE in the result
strip, secondary-shift-f or Toggle Filter Bar in the command palette shows
it; Filter by Value in a cell's menu filters on that value, and the copy
button copies the SQL the view runs. The bar's open state and the last
operator picked are remembered
CSV options in the export dialog: delimiter (comma, semicolon, tab, pipe or
a custom character), header row, text for NULL, quote character, when to
quote, and replacing line breaks inside values. Copy as CSV uses the same
options, with defaults under Copy as CSV in the Database settings, which the
export dialog starts from. Exports can be written as UTF-8, UTF-8 with a
byte order mark, or UTF-16, and SQL exports can write one INSERT per row
instead of one for all rows
The sidebar follows the active tab: switching tabs, or opening a table
from the command palette, selects that tab's table, view or routine,
loading and opening the groups above it and scrolling it into view. Follow
Active Tab in the General settings turns it off
Table, column, function and procedure comments stored in the database are
shown: in the sidebar tooltip, in the result header tooltip, beside table
and column suggestions in the editor, and in a Comment column on the
structure tab. PostgreSQL, MySQL, SQL Server and ClickHouse; SQLite has no
comments
Tab strip handling: drag a tab to reorder it, and the order is kept
across restarts. Right-click a tab to
Duplicate it (same text and connection), Pin it so it stays at the start
and survives Close Others and Close to the Right, or close it and its
neighbours. Middle-click closes a tab, and the tooltip shows the
connection, database, schema and, for structure tabs, the table
The structure tab sorts columns by any header, with a third click
restoring the table order, and a search field filters them by name. Types
show their length, precision and scale, and indexes list the primary key
first, then the rest by name
.sql files: Open SQL File in a database's context menu in the sidebar,
or under the database in the command palette, opens them in query tabs on
that database. Files dropped on the window open on the active tab's
connection. Save (secondary-s) and Save As (secondary-shift-s) write
them back, and the tab is named after its file with a ● while it has
unsaved changes. Closing such a tab asks whether to save. A file that is
already open is brought forward rather than read into a second tab. Gzip
compressed files are read and written directly
Run SQL File, next to Open SQL File on a database, runs a script straight
from disk, statement by statement, without loading it into the editor. It
opens a tab on that database for the run, shows the statement count and how
far through the file it is, stops on the first error with the failing
statement in the log, and can be stopped. It understands PostgreSQL dollar
quotes, MySQL DELIMITER lines and SQL Server GO batches
SSH tunnels authenticate with the connection's key, then its password,
then the host's IdentityFiles or the default keys in ~/.ssh, then the
keys of the SSH agent. Host aliases, User, Port, IdentityFile and ProxyJump
come from ~/.ssh/config, following Include lines, and one or more jump
hosts can be set in the connection dialog. known_hosts is checked for every
hop. On Windows the SSH agent is not used
A PostgreSQL connection without a password takes one from ~/.pgpass, or
the file PGPASSFILE names, using libpq's matching rules. The file is read
each time a connection opens, and an SSH tunnelled connection is matched on
its real host and port
The sidebar filter takes ^ to anchor the start of a name, $ to anchor
the end and | between alternatives, so ^users$|^orders$ shows exactly
those two. Matching ignores case. The column search of the structure tab
takes the same syntax
A search field in the title bar opens the command palette and shows its
shortcut
Blanco checks for new releases hourly and shows an Update button in the
title bar when one is out. It downloads the release, then turns into Restart
to apply it. On a .deb install it opens the release page instead. Check for
Updates in the General settings turns the check off
Duplicate in the connection context menu opens the new connection dialog
filled in from that connection, with its passwords left out
A system notification when an agent asks to run a write over MCP while
Blanco is in the background. Clicking it brings Blanco forward, where the
confirmation dialog is waiting
Disconnect When Idle in the Database settings closes a connection, with its
SSH tunnel, after a number of minutes without a query, metadata fetch or
pending grid edit. The next action reconnects. A connection can set its own
value under Show Advanced Options in the connection dialog, where 0 keeps it
open. A connection with a query running is never closed
The expanded cell editor opens JSON formatted, keeping key order and
numbers exactly as stored, and has Format and Minify buttons. Text values
that hold a JSON object or array get the same treatment. Invalid JSON is
pointed out under the editor while typing, and applying edits stops at a
JSON column whose new value does not parse, naming the row and column
Export and import connections as a JSON file, from the new menu next to
the sidebar filter, the File menu and the command palette. Export… in a
connection's context menu writes just that one. Passwords are never
written. Import shows what it will add first, skips connections that are
already saved with the same settings and renames ones whose name is taken
Accept Suggestion With in the Editor settings chooses whether Enter, Tab
or either accepts a completion suggestion. When Enter does not accept, it
starts a new line and closes the list
Click a column header in the results to select the column. Copy a
column's values from the column header's context menu or a cell's:
one per line, or as an IN list such as ('a', 'b') with strings escaped
for the dialect, numbers left bare and NULL left out, each also as distinct
values. From a cell, a selection of several rows copies just those rows
More actions can be rebound in the Keybindings settings, now listed by
group with search: cancel the running query, new query tab, close tab,
next and previous tab (Ctrl+Tab and Ctrl+Shift+Tab), toggle the sidebar,
toggle the results pane, import into or export the selected table, and
refresh the connection. A shortcut is recorded by clicking its field and
pressing the keys, so only a real key combination can be stored: Escape
cancels, Backspace unbinds, and each shortcut has its own reset. A shortcut
that is also used by another action is flagged. Wrap Tab Navigation in the
Editor settings decides whether next and previous tab go around or stop at
the ends
Toggle Results Pane hides the results under the editor and keeps the
toolbar with Run
Open a SQLite database directly: choose it under Open in the File menu or
from the command palette, pass its path when starting Blanco, drop the
file on the window, or open it from the file manager. Files are
recognised by their header, so any extension works. A file without a saved
connection opens as an unsaved connection in the sidebar, which Save
Connection in its context menu turns into a saved one, tabs included. The
.deb and the macOS app register Blanco as a handler for SQLite files
Result columns can be hidden, reordered and pinned. The Columns button in
the results tab strip lists every column with a checkbox and a pin, with a
search; the menu of a cell or a column header hides or pins that column;
dragging a header moves it.
A whole table remembers its layout and column widths per table across
sessions, any other query keeps them for reruns. Copy and export leave
hidden columns out and follow the order. Settings > Database > Show Row
Numbers turns the row number column off
A cell being edited shows a small bubble at its corner with the actions on
its value. SQL sends the text as a SQL expression instead of a value, and
date, time and timestamp cells get a button that opens a picker with an
editable time and a Now shortcut
Dates and timestamps in results are shown in ISO 8601 by default, with SQL,
day first and month first formats in the new Results settings, and
timestamps with a time zone can be shown in local time or UTC. Copy, export
and editing still use the value as the database returns it
Back Up and Restore for PostgreSQL and MySQL/MariaDB databases, in the
sidebar and the command palette. They run pg_dump, pg_restore, psql, mysqldump and mysql from PATH or the paths in the Database settings,
and explain when a tool is older than the server. Backups take a format,
tables, structure only tables, compression, extra arguments and a file name
pattern ({database}_{date} by default). Restores read plain and custom
dumps, gzip included, and confirm again on PROD. Progress, live output,
Stop and a notification when done. SSH tunnels work, and the password goes
to the tool through its environment, never its command line
PostgreSQL partitions and inheritance children are grouped under their
parent table in the sidebar, collapsed, with the number of partitions next
to the parent. The sidebar filter still finds a partition by name
Tab text is saved shortly after typing stops, not only when a query runs,
so a crash or restart no longer loses it. A restart opens every tab with
its text and connection, on the tab that was active
Reopen Closed Tab (Ctrl+Shift+T, Cmd+Shift+T on macOS, rebindable, also in
the command palette) brings back the most recently closed tabs with their
text and connection
The structure tab lists a table's foreign keys with their columns,
referenced table and ON UPDATE and ON DELETE actions. Add Foreign Key picks
the referenced table and pairs each column with a referenced one, prefilled
from its primary key; Drop Foreign Key is in the row's context menu.
SQLite lists its foreign keys but reports changes as unsupported
Open Referenced Row, in the foreign key popover of a cell and in the cell
context menu (Alt+Enter, rebindable), opens the referenced table in a new
tab with a query limited to the matching key and runs it
Ask on connect next to a connection's password, SSH password and key
passphrase leaves that secret unsaved and asks for it in a dialog when the
connection opens. The answer is kept in memory for reconnects until you
disconnect. A connection saved without a password also asks when the
server wants one, and asks again when it refuses what was typed. An
exported connection keeps the setting
A snippet can have a trigger word. Completion offers the SQL snippets in
query tabs and the script snippets in script tabs whose trigger starts with
the word being typed. Snippet text may hold tab stops such as $1, ${1:default} and $0; the caret lands on the first one, with its default
selected. Write \$ for a literal dollar sign before a digit
Environment tags beyond DEV, TEST and PROD: built-in LOCAL and STAGING, and
custom tags with a name and a colour, managed in the new Environments
settings page. The colour is one of the theme's, which follows light and
dark themes, or any other from the colour picker. Each custom tag says
whether writes on its connections are confirmed first, as on PROD. The
filter button next to the sidebar search shows only the connections with
one tag
Fixes
PostgreSQL bytea values are shown as their bytes. They used to read as
text when the bytes happened to be UTF-8 and as a marker otherwise
Editing a binary cell writes bytes. The hex digits used to be stored as a
string, and a row with a binary primary key could not be updated
SQLite shows the bytes of a blob returned by an expression, such as randomblob(16), instead of trying to read it as text
Formatting JSON in the cell editor and the cell comparison no longer sorts
object keys or rounds large numbers
Exporting an empty table as SQL wrote an INSERT without any rows; the file
is now empty. Copy as SQL escapes strings for the result's database rather
than always for PostgreSQL
The sidebar selection no longer jumps to another row or disappears when
the tree refreshes or a group above it is collapsed and opened again
Completion offers the columns of a CTE or a subquery in FROM after its name
or alias, also while the select list is still being written, including
columns it selects with * and names from a CTE column list. A query inside
a CTE gets the columns of its own tables, and FROM lists the statement's CTEs
Completion lists columns and tables before functions and keywords where a
name is expected, and the current schema's tables before other schemas.
Keywords are offered there too once a word is typed
Long names in the completion list are shortened in the middle, and the list
is wider
Completion offers the columns of tables without an alias, such as in UPDATE users SET or DELETE FROM users WHERE
Completion no longer opens while a number is typed, and offers only columns
after alias.
PostgreSQL tables whose names need quoting (mixed case, spaces) listed no
columns, and a table name shared by two schemas could pick up the other
schema's keys
SQLite tables with a composite primary key report every key column, not
only the first, so editing or deleting a row in the results matches that
row alone
Choosing a function in completion inserts name() with the caret between
the parentheses again, instead of a literal name($0)
Clicking a cell in the results table no longer starts a text selection in
the SQL view that follows the pointer with no button held
Format SQL replaced the wrong range when text before the statement held
non-ASCII characters, mangling the query. Lint markers and script syntax
errors were misplaced the same way
Show Create Statement on PostgreSQL wrote a stored generated column as a
default, which PostgreSQL rejects, and dropped the GENERATED ... AS IDENTITY clause of identity columns
Exporting a table shows how many rows are written, stops when the dialog is
closed, removing the partial file, and reports success or failure in a
notification instead of only in the log. A row that fails to arrive now
fails the export, where it was skipped and the file looked complete. Tables
whose names need quoting, such as mixed case, can be exported
Copy and export as TSV took time quadratic in the number of selected rows,
so a large selection could take many seconds
Copy and export as JSON, Markdown, SQL and VALUES write the selected rows
in grid order, where they could come out shuffled