Context-aware autocomplete
“The editor knows if you are in the FROM, the WHERE, or the column list.”
Write less, and make fewer mistakes, because the suggestion understands where you are inside the statement.
Suggests columns of the active table, database names, schema tokens (tables, views, functions), DML/DDL/control keywords, data types and engine-filtered SQL helper phrases.
Live lexical linter
“Unbalanced parentheses never make it to the server.”
Catches the obvious mistake before MySQL rejects it.
Detects unclosed comments, unclosed strings, unbalanced parentheses and open backtick identifiers. O(n) scan, no full parser.
Formatter with safe mode
“Formats your queries — never rewrites your UPDATE.”
Pretty formatting for SELECT, with no surprises on an UPDATE without a WHERE.
Knows 150+ keywords, types and functions. Safe mode blocks auto-format on destructive statements (ALTER, CREATE, DELETE, DROP, GRANT, TRUNCATE, UPDATE, REPLACE, RENAME) to prevent accidental rewrites.
Credential redaction in logs and sync
“Sync your history, not your credentials.”
Your query log does not become a password file on iCloud.
Neutralises IDENTIFIED BY, IDENTIFIED WITH … AS, IDENTIFIED BY PASSWORD, SET PASSWORD FOR and PASSWORD(…). Idempotent redaction, applied before exporting the query log to CloudKit.
Visual query builders
“Compose queries with clicks; they come out production-ready.”
A correct SELECT … WHERE … JOIN … without memorising syntax.
Dedicated visual builders for the four most frequent shapes: SELECT, WHERE, UPDATE, and table CREATE.
Rename symbol with word boundaries
“Rename id without breaking client_id.”
Refactor identifiers safely, without wrecking similar names.
Regex with \b word boundaries and proper regex escaping. Never matches inside larger identifiers.
Quick Open palette (⌘⇧O)
“⌘⇧O and you are on the table you were looking for.”
Reach any schema object without walking down the tree.
Incremental fuzzy search across tables, views, routines and objects, with arrow-key navigation and Enter to open.
Snippets manager with per-engine seeding
“Your snippets adapt to the engine, not the other way around.”
Your SQL recipes are always at hand, filtered to the engine you are using.
Local JSON storage. Each snippet declares which engines it applies to (MySQL, MariaDB…). Connecting to a new engine seeds defaults without duplicates. Supports categorisation.
DDL and function documentation popovers
“The docs for GROUP_CONCAT open where you're typing.”
Documentation without leaving the editor or opening a browser.
Shows the signature of the SQL function or the DDL of the schema object under the cursor.
Advanced cell editor and inline row editing
“Edit the cell, see the SQL, and decide.”
Change data quickly and preview the exact SQL that will be executed.
Spreadsheet-like editing on result sets, with a preview of the generated UPDATE or DELETE before it runs.
SQL Player — execution history
“Replay your SQL session like a video.”
Debug a batch of queries statement by statement, without rerunning the whole thing.
Timeline-based replay of executed statements, tied to the persistent query history.
iPad hint bars above the keyboard
“iPad keyboard with SQL superpowers.”
Fast touch suggestions right above the on-screen keyboard.
Contextual bars for the object or function under the cursor, with quick access to “View DDL” and function parameters.
Customisable toolbar
“Your toolbar, in your order.”
Each person has their own ergonomics; DBAs reorder once and forget.
Reorder or hide button groups from a dedicated customiser sheet. Layout is persisted.
Find and replace across a database
“One search across every text column you have.”
Search a string in every text column of every table at once, see the matches per table and column, preview the result computed by the server, and replace in bulk inside a transaction per table.
It shows two counts, not one: collation usually ignores case and REPLACE() never does, so without that warning a bulk edit announces 300 rows and changes 100 without anything failing. The mismatch is measured with CAST(col AS BINARY) rather than a named collation. Generated, primary-key and unique columns are excluded by default — MariaDB accepts an UPDATE on a generated column, reports one affected row and changes nothing. Escaping uses |, because a backslash breaks under NO_BACKSLASH_ESCAPES.
Spatial data on a real map
“Your GEOMETRY columns stop being 25 bytes.”
Points, lines and polygons drawn on a map docked in the editor, with satellite and flat styles, clustering and a fit-to-data control. Drag a pin or a vertex and Calíope composes the statement — it shows it to you before writing anything.
The WKB on the wire is always (longitude, latitude); what changes is the text, because MySQL 8 under a geographic SRID prints latitude first and MariaDB never does. The swap lives only at the textual boundary, where the parameter has no default value: getting it wrong does not raise an error, it moves the row to another continent and the server accepts it. The SRID travels with the geometry, editing is blocked without a reliable primary key and it says why, and there is no CoreLocation anywhere.