Calíope app icon

Features

Every capability, verified against the source code.

Calíope ships as a single application with the capabilities below available on macOS and iPad. Every entry corresponds to code that exists today — this is a catalogue, not a wish list. Use the shortcuts to jump to a category, or scroll through the full list.

Connection & Security

Native SSH tunnel

“Your SSH tunnel, without a terminal or .ssh/config.”

Reach servers behind a bastion from within the macOS sandbox — no local ssh, no ~/.ssh/config, no permission fights.

SwiftNIO + NIOSSH. Password or private-key auth (ed25519, ECDSA P-256/P-384/P-521). OpenSSH parser and in-memory passphrase decrypt. Local proxy on 127.0.0.1 bridged via SSH direct-tcpip.

TOFU host-key verification

“Warns you if someone intercepted your tunnel — before you type anything.”

Detects a MITM against your SSH bastion without keeping a known_hosts file on disk.

Fingerprints stored in Keychain. First connection prompts for explicit confirmation; a changed fingerprint fails hard — equivalent to StrictHostKeyChecking=yes.

Strict TLS by default

“SSL that actually protects — not just a toggle.”

Turning “SSL on” means SSL verified. Self-signed certificates require a CA or an explicit opt-out with a visible warning.

Single policy: skip-verification is opt-in; a supplied CA yields no-hostname verification; otherwise full verification.

Keychain with opt-in iCloud sync

“Your passwords do not visit iCloud unless you invite them.”

You decide which credentials travel across your devices. By default, none.

Local-only mode pins credentials to WhenUnlockedThisDeviceOnly; enabling sync migrates them to AfterFirstUnlock for iCloud Keychain. Toggle is idempotent.

Optional biometric auth per profile

“Your fingerprint unlocks prod, not just your sleeping Mac.”

Add a Touch ID / Face ID gate before connecting to production servers, configurable per profile.

Built on the LocalAuthentication framework. Enabled per connection profile.

Deterministic connection pool

“A connection pool that always closes — even when something fails.”

Connections that do not leak resources or block the UI, even when switching sessions.

SwiftNIO EventLoopGroupConnectionPool, capped at 5 connections per event loop on a single-thread event-loop group. Async teardown with a safety timeout, and a clean SSH close when local binding fails.

Native prepared statements

“Bindings prepared, not string interpolation — from the root of the stack.”

The values you type never get concatenated into the SQL — they travel through the wire protocol, protocol-separated from the statement.

MySQLNIO native prepared statements: no bindings → simpleQuery fast path; with bindings → conn.query(sql, [MySQLData]). Statements are closed automatically on done(), so the pool never leaks. Identifiers still flow through the centralized escape helper for the residual DCL/DDL cases.

SQL Editor & Productivity

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.

Administration & Catalog

Navigable schema tree

“Your schema, in a tree that mirrors how you think.”

One view for the whole server catalog.

Databases → tables / views / routines / triggers / events, with lazy loading and contextual actions: DDL, columns, indexes, data import, WHERE builder.

Schema Diff with ALTER generation

“Diff your schema, generate the ALTER, review before applying.”

Promote a schema from staging to prod without collecting diffs by hand.

Compares two schemas and generates the ALTER TABLE needed to bring one to the other. Column comparison runs concurrently via structured concurrency. Source of truth: INFORMATION_SCHEMA.

Local DDL audit log

“Know what DDL you ran, when, and against which server.”

Traceability of schema changes, without touching the server.

Every CREATE / ALTER / DROP / RENAME is recorded locally with timestamp and target server, in the app's local SQLite store.

Object migration between servers

“From staging to prod in three clicks — with a preview.”

Clone objects across environments without mysqldump or hand-crafted .sql files.

Dual connection (source + destination), granular selection of tables, views, routines, triggers and events, with options for REPLACE, include data, or skip foreign keys. SQL preview before execution.

Advanced object editors

“One editor per object type, not a generic .sql for everything.”

Edit routines and events properly, in an editor built for the object.

Dedicated sheets for stored routines, triggers, events, views and indexes. Each emits well-formed DDL.

Table maintenance

“OPTIMIZE, ANALYZE and REPAIR, in one button.”

Housekeeping for MyISAM/InnoDB tables without memorising the commands.

Runs OPTIMIZE TABLE, REPAIR TABLE and ANALYZE TABLE with progress feedback.

User and privilege administration

“GRANTs and REVOKEs — with checkboxes.”

Manage server users without hand-writing every GRANT.

CREATE / ALTER / DROP USER, plus GRANT and REVOKE from a dedicated UI.

Index Advisor and index editor

“The indexes you have too many of, and the ones you're missing — with evidence.”

Identify redundant or missing indexes using data the server already exposes.

Advisor view that analyses index usage, paired with a dedicated editor for the index catalog.

Column profiler

“Profile the column, don't guess the data.”

Understand the quality of your data before writing the analytical query.

Per-column distributions: histogram, percentiles and cardinality.

Interactive ER diagram

“The ER diagram you no longer have to draw.”

Document relationships without drawing boxes in Miro.

Automatic generation from the active schema, with foreign-key visualisation.

AI Assistant (BYOK)

Bring-Your-Own-Key. The subscription does not include AI credits — you use your own API key. This is disclosed openly on the paywall: “The AI assistant requires your own OpenAI, Google Gemini or Anthropic Claude API key (not included in the subscription).”

OpenAI, Gemini and Claude providers

“AI that runs on your tokens, not on your subscription bill.”

Use the model you already pay for, and don't depend on Calíope raising prices per token.

OpenAI (GPT-4, GPT-4o, o1, o3) with Bearer token. Google Gemini with API key; filtered to models exposing generateContent. Anthropic Claude (claude-*) with x-api-key and the system prompt kept in its own field (not inside messages). Bilingual system prompt with the active-schema context, keeping the last three exchanges.

API-key redaction in errors and logs

“Your key never appears in a stack trace.”

If an error message escapes to a screenshot or a Slack channel, your API key does not travel with it.

Regex-based masking for sk-* (OpenAI), AIza* (Gemini), sk-ant-* (Anthropic Claude, including sk-ant-api03-…), and Bearer … in any provider error message.

Exponential backoff with Retry-After

“If OpenAI says wait, Calíope waits exactly that long.”

Rate-limit spikes don't break your session.

On 429 / 503, retries up to three times (1s / 2s / 4s), honouring the Retry-After header. Timeouts: 30 s for generation, 15 s for listing models.

Voice-to-SQL

“Speak the question; run the SQL.”

Dictate a request and have the assistant turn it into SQL — useful on iPad and in hands-busy pair-DBA sessions.

Built on Apple's Speech and AVFoundation. Detects locale, falls back to es-ES. Separate permissions for speech recognition and microphone. Live partial results.

Persistent conversational assistant

“A conversation with your database, not an isolated prompt.”

Ask “now with a LEFT JOIN” and it knows which query you meant.

Keeps context of the active schema plus the last few exchanges, per conversation.

Backup, Import & Sync

Backup engine with opt-in credentials

“Backups with native gzip — and no accidentally exported passwords.”

Compact, safe-by-default dumps — nobody exports password hashes by accident.

Generates .sql with options for drop-before, include data, include users, include user credentials (opt-in, default off), and native gzip compression. CREATE USER / ALTER USER / GRANT are neutralised when credentials are excluded. Progress events with ETA.

Scheduled backups with retention

“Backups that don't rely on you remembering.”

Your Mac takes the backup on time, even if it was asleep, and doesn't fill up your disk.

Daily or weekly schedules. Uses security-scoped destination bookmarks to work inside the sandbox. Handles missed schedules across app restarts, nanosecond-suffixed filenames to avoid collisions, retention purge, and success/error/skip notifications.

CSV / JSON / XLSX import

“From a spreadsheet to a table in three clicks.”

Import real-world tabular files — not just the happy-path CSV.

RFC 4180-style CSV (escaped quotes, fields with commas), JSON (array of objects) and streaming XLSX. Modes: INSERT, INSERT IGNORE, REPLACE.

Persistent local query log

“The command you ran on Tuesday, in two seconds.”

Search thousands of past queries by SQL text or date.

Local SQLite store in Application Support with tables for executed queries and the DDL audit log, indexed by query text (asc) and date (desc).

iCloud query-log sync (opt-in, redacted)

“Your SQL history, in your iCloud, without your credentials.”

Search your Mac's history from your iPad — with credentials stripped out.

CloudKit container iCloud.org.caliope.caliope, batches of 400 records, configurable retention (default 30 days). Applies credential redaction before uploading. Verifies iCloud account status before syncing.

Per-section sync toggles

“You decide what goes to iCloud.”

Sync only what you care about — not all or nothing.

Independent toggles for Keychain iCloud sync and query-log iCloud sync, from Preferences.

Monitoring, Diagnostics & Replication

Monitoring engine with your own storage

“Metrics of your MySQL, stored in your MySQL.”

Historical monitoring without installing Prometheus.

A dedicated collector writes snapshots to a storage server of your choice, provisioning tables for samples (CPU, memory, connections, QPS) and events (threshold breaches, replication lag). Automatic retention.

Interactive Visual EXPLAIN

“Your query plan as a diagram that breathes.”

Spot the ALL that's killing your query without reading JSON by hand.

Takes EXPLAIN FORMAT=JSON and draws it as a tree. Colour-coded by access type: full scan, range / index merge, optimised, sort, join. Tooltips with access_type, estimated rows and timing. Scroll-wheel zoom and pan.

Query profiler

“See where you're losing the milliseconds.”

Locate which phase of the query is taking the time.

Built on SHOW PROFILE. Table plus bar chart per phase (starting, Sending data, and so on) with millisecond timing.

Process List with guided KILL

“A KILL for the query that hung your prod.”

Terminate a runaway query without opening a terminal.

SHOW FULL PROCESSLIST with columns for id, user, host, database, command, time, state and info. Actions for KILL QUERY and KILL CONNECTION.

Replication monitor (MySQL 8 and legacy)

“MySQL 8 and 5.7 replicas, in the same panel.”

See replica lag without fighting the legacy vs. 8.0 vocabulary.

SHOW REPLICA STATUS (MySQL 8) with automatic fallback to SHOW SLAVE STATUS (MariaDB 10.5 / MySQL 5.7). Metrics: IO/SQL running, seconds behind source, last errors with timestamp, GTID sets, log positions. Configurable auto-refresh.

Binlog viewer with filters and PURGE

“Your binlog, filterable and prunable — from the app.”

Audit which events your statements produced without dropping to mysqlbinlog.

SHOW BINLOG EVENTS with categorisation into DDL / DML / System, text search, and a configurable row limit (default 300). Supports encrypted binlogs (MySQL 8.0.14+). PURGE BINARY LOGS TO with explicit confirmation.

Dashboard, Server Info and Health

“The pulse of your MySQL, in one view.”

Consolidate server health without opening five clients.

Multi-tab Server Info (global & session variables, global & session status, HDD usage), Server Dashboard with live charts, and a Server Health Monitor.

Live benchmark

“Two queries on the scale; one wins.”

Choose between two queries with evidence, not intuition.

Compares execution times of query variants side by side.

Local alerts and notifications

“Your Mac tells you when the replica falls behind.”

The system pings you — you don't have to keep staring at the app.

Threshold alerts on CPU, memory, connections and replication lag. Native macOS/iOS notifications.

Native Widgets

macOS desktop widget

“Server status, glanceable, on your desktop.”

See the pulse of your server without opening Calíope.

Small, Medium and Large families. Snapshots read from a shared app group with file coordination for safe concurrent reads. Payloads larger than a safe threshold are rejected (DoS protection).

iPad Home Screen and Lock Screen widgets

“Your MySQL on the iPad Lock Screen.”

Server metrics on your iPad's lock screen — seconds away.

Seven families total: Small, Medium, Large, ExtraLarge, plus accessory Rectangular, Circular and Inline (iOS 16.1+).

Deep-linking to the pinned profile

“Tap the widget → the right server's dashboard, in one move.”

One tap and you're on the correct server's dashboard.

Widget URL caliope://server/<uuid> when a profile is bound; falls back to caliope:// otherwise.

AppIntent-based selection

“One widget per server — edited like a weather widget.”

Pin a different widget to each server — configured in seconds.

Configurable via the system's widget-edit UI through an AppIntentConfiguration. No code required from the user.

Background refresh with system budget

“Refreshes when it matters; sleeps when it doesn't.”

The widget doesn't drain your battery and still shows fresh data.

Timeline policy hands control to WidgetKit, respecting the system's refresh budget. Falls back to the latest snapshot when no fresh data is available.

System Integrations

Siri and App Intents

“A SELECT COUNT(*) from Siri, without opening Calíope.”

Run a query or list databases from Shortcuts, without opening the app.

Registered intents: connect to server, execute query (returns TSV with headers), list databases, open workspace tab. Backed by an internal bridge exposing session and database managers to AppIntents.

macOS menus and .sql file handling

“Knows how to open from Spotlight with a .sql — like any native app.”

Behaves like a real Mac app — not a Windows or Electron port.

Full menu bar: About, Open SQL file, Recent files, Quick Open, tab navigation, Help, What's New, Privacy Policy, Support. Handles .sql file opens via NotificationCenter.

Menu-bar status item

“A menu-bar icon: you know if you're connected without switching windows.”

Connection context at a glance, without bringing the app to the front.

Menu-bar icon reflecting connection state and active profile.

TipKit onboarding

“Discover what you need, when you need it.”

Learn about features at the moment they're relevant.

Contextual tips for Quick Open, WHERE Builder, Data Import, DDL Audit Log, Binlog Viewer, Replication Monitor, Object Migration, Visual EXPLAIN, Query Profiler and Schema Tree.

Handoff, iPad gestures and trackpad

“iPad + Magic Keyboard = a portable DBA Mac.”

On iPad with a Magic Keyboard, work as you would on the Mac.

Native pointer and keyboard handling on iPad. Gestures: swipe between tabs, pinch-zoom in the editor. Split View.

Screenshot mode

“Docs-ready screenshots — not amateur captures.”

Take documentation-ready screenshots with a consistent look.

Cmd+Opt+P on macOS produces PNGs styled for documentation and marketing.

In-app “What's New”

“New things, inside the app — not in a changelog.”

Learn what's new without reading the App Store's release notes.

Per-version highlights, with local “already seen” state.

Trilingual UI (Spanish, English, French)

“Calíope speaks your language — Spanish, English or French.”

An app designed in Spanish first, so it doesn't feel like a machine translation.

Full en, es and fr resource bundles, with a runtime language manager and localisation helper. English fallback.

Privacy, Sandbox & Compliance

Active App Store sandbox

“Sandbox on — does what it says, and nothing more.”

Calíope cannot access anything outside its declared entitlements. The system enforces it.

App sandbox enabled with a narrow entitlements set: network client and server (for the SSH proxy), audio input (voice-to-SQL), user-selected files (documents), app groups (for widgets) and iCloud (CloudKit and Cloud Documents).

Data-erasure service

“One button, and nothing is left behind.”

A button to leave the machine clean before you return or sell it.

On-demand secure deletion of sessions, credentials and the query log.

BYOK with formal disclosure

“Honest subscription — the AI is on your key, and we say so.”

You know exactly what the subscription pays for and what it doesn't.

The paywall displays a BYOK note and an auto-renewal notice, complying with App Store §3.1.2c.

StoreKit 2 subscription with 7-day trial

“One free week, no tricks.”

Try Calíope for a week at no cost, and cancel from your Apple ID.

Annual product with a one-week free trial. Verification via StoreKit 2's AppTransaction.shared and Transaction.latest(for:). Restore via AppStore.sync(). Price always presented from product.displayPrice.

Ready to try Calíope?

Every capability on this page ships with the annual subscription. One week free trial, cancel anytime from your Apple ID.

Try free for one week →