Skip to content

Command reference

Generated page — every table below is read out of the app’s own source when this site is built. Do not edit this file by hand: pnpm run check and pnpm run build regenerate it and fail when what is committed here disagrees with the source.

Joinery has 58 commands in 8 groups. 45 of them are listed by the command palette and 27 carry a keystroke. A command the palette does not list says so in the table below, in the words the catalogue itself uses; the full reasons are under Not in the palette.

Keystrokes here are the macOS bindings. Both platforms are on the keyboard shortcuts reference.

Command What it does Keystroke In the palette
New query tab Open an empty SQL editor on the current database ⌘N Yes
Open query file Load a .sql file from disk ⌘O Yes
Close tab Close the tab in front ⌘W Yes
Save query Write the active editor back to its file ⌘S Yes — needs a query tab in front
Save query as Write the active editor to a new file ⇧⌘S Yes — needs a query tab in front
Command What it does Keystroke In the palette
Export results Write the rows on screen to a file ⇧⌘X Yes — needs results on screen
Execute query Run everything in the active editor ⌘E Yes — needs a query tab in front
Execute selection Run only the highlighted SQL ⇧⌘↩ Yes — needs a query tab in front
Cancel query Stop the run in progress ⌘. Yes — needs a query tab in front
Query history Search everything this app has executed ⇧⌘H Yes
Inspect row Open the row-detail rail on the focused row Yes — needs results on screen
Snippet library Save, search and insert reusable SQL ⌥⌘S Yes
Show execution plan Ask the engine how it runs this statement — on SQL Server that runs it, and you are asked first Yes — needs a query tab in front
Insert snippet Paste a saved snippet into the active editor No — carries the SQL to insert
Command What it does Keystroke In the palette
Find in editor Open Monaco’s find widget ⌘F Yes — needs a query tab in front
Find and replace Open Monaco’s replace widget ⌥⌘F Yes — needs a query tab in front
Format SQL Re-indent the active editor for its engine ⇧⌘F Yes — needs a query tab in front
Convert SQL to SQL Server Rewrite the editor’s SQL in T-SQL Yes — needs a query tab in front
Convert SQL to PostgreSQL Rewrite the editor’s SQL for Postgres Yes — needs a query tab in front
Convert SQL to MySQL Rewrite the editor’s SQL for MySQL Yes — needs a query tab in front
Toggle comment Comment or uncomment the selected lines ⌘/ Yes — needs a query tab in front
Copy Copy the selection, or the selected grid cells ⌘C No — a claim protocol for the ⌘C keystroke, not an action
Cursor moved The editor telling the status bar where the caret is No — a notification from the editor to the status bar
Command What it does Keystroke In the palette
Show welcome tab Open the start page Yes
Toggle sidebar Show or hide the object explorer ⌘\ Yes
Toggle assistant Show or hide the AI side panel ⇧⌘I Yes
Open assistant as a tab A full-width chat in the dock, with its own conversation Yes
Toggle results panel Collapse or restore the rows below the editor ⇧⌘\ Yes — needs a query tab in front
Toggle output panel Show or hide the app’s own log ⌘J Yes
Next tab Move one tab to the right ⇧⌘] Yes
Previous tab Move one tab to the left ⇧⌘[ Yes
Find database object Fuzzy-search tables, views, procedures and functions ⌘P Yes — needs a live connection
Docker containers Start, stop and create local database containers Yes
Open ERD diagram Entity-relationship diagram for the current database Yes — needs a live connection
Reveal in explorer Expand the tree down to a named object and scroll to it No — carries a target the palette cannot supply
Command What it does Keystroke In the palette
New connection Set up a new server connection ⇧⌘N or ⇧⌘C Yes
Disconnect Close the focused server connection Yes — needs a live connection
Refresh explorer Re-read databases and the selected node ⌘R Yes — needs a live connection
Server properties Version, edition and collation of the focused server Yes — needs a live connection
Manage connections Edit, connect and delete saved profiles Yes
Edit connection Open the editor on a saved profile No — carries a target the palette cannot supply
Connect to this container Open the connection editor with the container’s host and port filled in No — carries a target the palette cannot supply
Command What it does Keystroke In the palette
New database Create a database on the focused server Yes — needs a live connection
Back up database Write a backup of the current database Yes — needs a live connection
Restore database Restore a backup file into a database Yes — needs a live connection
Database properties Size, collation and file layout of the current database Yes — needs a live connection
Compare database schemas Generate a query that compares two databases’ tables, views, routines and indexes Yes — needs a live connection
New database on this server Create a database on a named server No — carries a target the palette cannot supply
Back up this database Back up a named database No — carries a target the palette cannot supply
Restore into this server Restore a backup into a named server No — carries a target the palette cannot supply
Rename this database Rename a named database No — carries a target the palette cannot supply
Delete this database Drop a named database No — carries a target the palette cannot supply
Compare schemas from here Generate a comparison query with this database as the source No — carries a target the palette cannot supply
Object properties Columns, keys and indexes of a named object No — carries a target the palette cannot supply
Command What it does Keystroke In the palette
Settings Appearance, editor, query and grid preferences ⌘, Yes
Set up AI Choose a provider, save its API key, pick the model Yes
Command What it does Keystroke In the palette
Start the guided tour A walk through the workbench, one surface at a time Yes
Keyboard shortcuts Every binding this app has, in one sheet ⇧⌘/ Yes

13 commands are absent from the palette, for 4 reasons, each stated in the app’s source beside the commands it covers. Most of them carry a target the palette cannot supply — a palette entry is a phrase, not a node. Most of those have a target-free twin the palette offers instead; the rest are registered for surfaces that have not shipped, and have no entry point anywhere yet.

How many Why the palette does not list them
1 command a claim protocol for the ⌘C keystroke, not an action — the palette cannot be the thing with the selection, because opening it took the focus
1 command a notification from the editor to the status bar
1 command carries the SQL to insert — the snippet library is the surface that chooses which, and the palette opens THAT (open-snippets)
10 commands carries a target the palette cannot supply — a palette entry is a phrase the user typed, not a node

The palette carries 5 entries that are not commands. Each changes one thing in the window and needs no other surface, so it is held by the palette itself rather than dispatched through the command bus.

Action What it does Group
Theme: System Follow the operating system Settings
Theme: Ivory The light canvas Settings
Theme: Ink The dark canvas Settings
Close all tabs Close every open tab File and tabs
Close other tabs Keep the tab in front and close the rest File and tabs

docs-site/scripts/generate-reference.mjs reads these files and writes this page:

  • packages/renderer/src/commands/catalogue.ts
  • packages/renderer/src/features/command-palette/palette-actions.ts
  • packages/renderer/src/utils/platform.ts
  • packages/renderer/src/shell/status-bar.tsx

It does not import the renderer. Each module is compiled with the TypeScript compiler and run inside an isolated node:vm context whose module resolver is declared up front: the files it may reach are resolved for real, lucide-react resolves to an inert marker, and anything else throws rather than pulling the app’s dependency tree into the docs build. The command table is loaded twice, once with a macOS user agent and once with a Windows one, so both keystroke columns come from the app’s own formatter rather than from a second table kept here.

Data digest: 5ff4b67fb600 — a fingerprint of exactly the values rendered above. It changes when what the app ships changes, and not when an unrelated comment in one of those files does.

Regenerate from docs-site/ with pnpm run generate:reference.

Where this page's facts come from
Claim Source
The command table, its groups and their order packages/renderer/src/commands/catalogue.ts:110-133, 272-803
A command that carries a payload cannot be a palette entry, and each one states why packages/renderer/src/commands/catalogue.ts:219-270
The three palette preconditions the “needs …” column reports packages/renderer/src/commands/catalogue.ts:196-207, features/command-palette/palette-model.ts:98-115
A row that cannot run right now is disabled with its reason, never hidden packages/renderer/src/features/command-palette/palette-model.ts:11-25, 131-154
The palette’s local actions, and why they are not commands packages/renderer/src/features/command-palette/palette-actions.ts:1-32, 72-95
Theme names come from the status bar’s own table, so both surfaces say Ink and Ivory packages/renderer/src/shell/status-bar.tsx:127-134