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.
Dumps of many gigabytes
“722 MB dumped with 68 MB of memory.”
Backup and restore no longer depend on how much RAM the machine has. A 722 MB dump with 4 million rows peaks at 68 MB; restoring it takes 19 seconds using 14 MB. Cancelling actually stops the dump instead of letting it run to the end.
The engine orchestrates and the provider writes SQL: adding an engine to backup means implementing BackupDataSource and nothing else — the test harness implements it in memory with SQLite and Postgres dialects without touching the engine. Restore pulls one statement at a time instead of being pushed, because a buffered stream drops statements in silence and finishes announcing success. Reading uses read(2) and not a mapped file: the same splitting measured +201 MB resident with FileHandle and 1.1 MB this way.
A backup of your own settings
“Before touching iCloud, there is a copy.”
Export and import everything Calíope keeps outside the device — profiles, groups, preferences — with scheduled copies to the iCloud container and local restore points taken automatically before anything risky: enabling or disabling sync, erasing, importing.
It exists because of a measured incident: turning sync on for an iPad replaced a 16 470-byte connections.json with 28 profiles by a 514-byte one holding a sample profile. Secrets are opt-in and always encrypted (AES-GCM, PBKDF2-SHA256 with 210 000 iterations, salt and cost written into the file). Whatever is left out is written into the copy with its reason — a copy that hides its omissions is the one that makes you believe you can restore everything. Restoring merges; a backup never deletes.
Calíope on your iPhone
“The whole client, without the Mac in front of you.”
The same Calíope, laid out for the phone — the whole client, not a viewer. It connects to your servers and runs your queries, with the SQL editor, the schema browser, the dashboard, the ER diagram and the reports all there; and your connection profiles, saved snippets, query history and assistant conversations are already waiting, carried over by your own iCloud. Face ID to unlock, five languages, and a demo mode to look around before you connect anything. It installs from the same App Store page as the Mac and the iPad.
It is the iOS binary, and it is the same code as the iPad: not one tool is removed, and there is no device check anywhere in the tree — what changes is the layout, not the feature list. Connection profiles are merged into the shared iCloud file rather than replacing it, so the fields a narrower screen never puts on show — SSH tunnel, certificates, character set — are preserved untouched. Without iCloud it names the closed switch, instead of showing an empty screen and letting you assume all is well.
Calíope on your Apple Watch
“What your servers did, without taking the phone out.”
Calíope on the wrist, arriving with Calíope on the iPhone and covered by the same purchase, with nothing to buy separately. It shows the system messages Calíope publishes: eighteen kinds in eight groups, covering backups and reports that finished or failed, queries that ran long, SSH tunnels that dropped and came back, iCloud sync that failed, and servers close to your thresholds. Grouped by day, with optional notifications on a switch of their own, and a demo mode that shows you the empty screens too.
Messages travel as an identifier plus their raw figures, never as a finished sentence: the watch is set to a different language from the Mac more often than not, so the sentence is written at the wrist. The cadence you choose is a minimum and not a promise — with the app closed, watchOS decides when to wake it — and the app says so at the top of its own settings screen instead of in grey at the bottom. The watermark is the last message delivered and not the wall clock, because wake-ups get skipped and asking «anything in the last fifteen minutes?» discards the rest without failing. It only reads: it opens no connection to any server of yours.
Calíope on your Apple TV
“The fleet's health, read from across the room.”
A wall dashboard for your MySQL, MariaDB and PostgreSQL servers: one tile each, with its state — Healthy, Warning, Critical, Unreachable or No data — and, when something is wrong, what is wrong. Uptime, connections, running threads, queries per second, cache hit rate, longest running query and replica lag. Two tabs, because a television is not a device you navigate, and a demo fleet of eight servers to look around first.
Staleness is worked out by the reader, derived from the cadence Calíope declares: whoever published does not know that they stopped publishing, so a Mac switched off on Friday would otherwise leave the dashboard green all weekend. State is never shown by colour alone, and the thresholds are Calíope's — the TV paints, it does not judge. Apple TV has neither iCloud Drive nor iCloud Keychain, so «it only reads» is held up by the platform and not by a promise.
Calíope on Apple Vision Pro
“The whole client, hanging in the room.”
A Vision Pro installs Calíope itself, as an iPad app: the SQL editor, the schema browser, the ER diagram, backups, reports, the query builder — every tool the iPad has, with nothing removed. It connects to your servers and it writes. You place the window, resize it and leave it where you want it, and it comes from the same App Store page and the same purchase as the Mac and the iPad.
We built a native visionOS app too — a read-only panel with the fleet and the replication groups — and decided not to ship it. A native visionOS build takes priority over the iPad app on that device, so shipping it would mean a Vision Pro owner paid the same price and received a dashboard instead of a database client: the target declared CloudKit and nothing else, linked no database driver and had no write path at all. Less is not a feature. The code stays in the repository; if a native version ever ships, it will be because it does everything the iPad one already does.