Diese Seite beschreibt Calíope 1.5, die ich am 12. Oktober 2026 bei Apple zur App-Prüfung eingereicht habe. Die 1.4 ist im App Store für Mac, iPad, iPhone, Apple Watch, Apple TV und Apple Vision Pro. Das Changelog sagt, in welcher Version jede Funktion kam.
Fügt jedem Thema einen Button „In Calíope öffnen“ hinzu. Funktioniert nur mit installierter App.
Öffne und befrage lokale dateibasierte DuckDB-Datenbanken, ohne Server.
Wo es zu finden ist: Workspace › Werkzeuge › DuckDB-Editor
Der DuckDB-Editor ist ein eigenständiges Werkzeug für lokale .duckdb-Dateien, mit demselben Aufbau wie der SQLite-Editor: Struktur, Daten, SQL ausführen und Einstellungen, und er funktioniert ohne Verbindung zu einem Server.
Er kann auch eine Datenbank im Arbeitsspeicher öffnen — ohne Datei — über Datendatei abfragen…, um mit einer CSV-, JSON- oder Parquet-Datei zu arbeiten, ohne etwas auf der Festplatte anzulegen.
Was Calíope mit DuckDB nicht tut. Es lädt keine Erweiterungen herunter — INSTALL, LOAD und UPDATE EXTENSIONS werden abgelehnt, bevor sie die Engine erreichen —, nur die vier mitgelieferten sind vorhanden. Aus demselben Grund gibt es keine Secrets für Fernzugriff (CREATE SECRET), und ein ATTACH einer SQLite- oder Postgres-Datei ist nicht möglich, da dafür eine nicht eingebundene Erweiterung nötig wäre. Die Konfiguration der Engine wird beim Öffnen festgeschrieben: Kein SET außer threads/memory_limit aus den Einstellungen funktioniert, und selbst diese nicht per direktem SQL. Was dagegen funktioniert, ist das Verschieben der ganzen Datenbank: Ganze Datenbank und Sichern unter… laufen außerhalb der offenen Transaktion, wo die gesperrte Konfiguration nicht stört.
Öffne eine vorhandene .duckdb-Datei oder erstelle eine neue.
Wo es zu finden ist: Workspace › Werkzeuge › DuckDB-Editor
Verwende Öffnen…, um eine vorhandene .duckdb-Datei auszuwählen, oder Neue Datenbank…, um eine leere zu erstellen. Zuletzt verwendete Dateien erscheinen auf dem Startbildschirm. Ein Schreibgeschützt-Zeichen erscheint, wenn eine Datei nicht geändert werden kann.
Liegt die Datei außerhalb des eigenen Ordners von Calíope, wird beim ersten Öffnen um Zugriff auf ihren Ordner gebeten: DuckDB muss eine .wal-Datei neben der .duckdb-Datei anlegen, und die Sandbox der App erlaubt das nur innerhalb eines vom Nutzer gewählten Ordners. Beim nächsten Öffnen einer Datei aus demselben Ordner wird das gemerkt. Keine DuckDB-Datei zur Hand? Im leeren Zustand öffnet Beispieldatenbank laden die Seite der Website mit dem öffentlichen Beispiel — ein kleiner Shop mit 50.000 Bestellungen, mit Calíope erstellt. Die App lädt nichts herunter: Sie öffnet die Seite, entscheiden tust du.
Durchsuche Tabellen, Views und Indizes und erstelle sie.
Der Bereich Struktur zeigt den Schemabaum mit den Spalten und dem DDL jedes Objekts. DuckDB hat keine Trigger, daher zeigt der Baum Tabellen, Views, Indizes, Sequenzen, Typen, Makros und Tabellenmakros. Sequenzen, Typen und Makros werden über SQL ausführen angelegt —CREATE SEQUENCE, CREATE TYPE, CREATE MACRO, CREATE MACRO … AS TABLE—; hier siehst und löschst du sie. Hat die Datei mehrere Schemas, steht vor jeder Gruppe der Name ihres Schemas, und der Kommentar eines Objekts (COMMENT ON) erscheint beim Darüberfahren. Verwende Neu, um Tabellen, Indizes oder Views zu erstellen, Spalte hinzufügen oder Tabelle umbenennen für die ausgewählte Tabelle, und Löschen, um ein Objekt zu entfernen.
Von Datendatei abfragen… erstellte Views tragen ein anderes Symbol — eine Büroklammer — und ihr Tooltip zeigt den Pfad der Quelldatei.
Datenbank anhängen… öffnet eine weitere DuckDB-Datenbank neben der aktuellen; ihr Inhalt erscheint im Baum mit dem Datenbanknamen davor und wird als datenbank.schema.tabelle abgefragt. Sie wird immer nur lesend angehängt —Schreiben hieße, ihre .wal-Datei daneben anzulegen, was die Sandbox nicht erlaubt— und Trennen entfernt sie. Eine SQLite-Datei lässt sich hier nicht anhängen: Das sind zwei verschiedene Engines, und dafür gibt es den SQLite-Editor.
Zeilen anzeigen, filtern, sortieren und bearbeiten.
Der Bereich Daten zeigt die Zeilen einer Tabelle seitenweise, mit der Anzahl und den Pfeilen rechts in der Leiste. Wie viele Zeilen auf eine Seite passen, wird unter Einstellungen › Texteditor › Ergebnisse › Zeilen pro Seite festgelegt — Einstellungen, auf dem iPad. Sortiere durch Antippen einer Spaltenüberschrift, grenze spaltenweise mit Filtern ein, oder tippe in das Suchfeld, um alle auf einmal zu durchsuchen.
Eine Zelle bearbeiten
macOS: Doppelklick darauf. iPad: ein einzelnes Tippen. Eingabe bestätigt; Esc bricht ab.
Zeilen hinzufügen und löschen
Zeile hinzufügen öffnet ein Formular mit einer Zeile pro Spalte. Anders als SQLite weist DuckDB den Primärschlüssel nicht automatisch zu: Jede Pflichtspalte braucht ihren eigenen Wert, auch der Schlüssel. Zum Löschen die Zeile über ihre Nummer auswählen und Zeile löschen verwenden.
Nichts davon ändert die Datei, bis du Änderungen speichern drückst: Bearbeitungen bleiben in einer ausstehenden Transaktion, die Änderungen verwerfen vollständig rückgängig macht.
Syntaxhervorhebung und Autovervollständigung, mit Zeilenlimit und Stopp-Taste.
Der Bereich SQL ausführen verwendet dasselbe Textfeld und dasselbe Ergebnisraster wie der SQL-Editor für Server, über der geöffneten Datei und ohne jede Verbindung.
Der Text wird hervorgehoben. Drücke Ausführen oder ⌘↩, um das ganze Skript auszuführen; gezeichnet wird das Ergebnis der letzten Anweisung, die Zeilen zurückgab. Ein großes SELECT wird nicht vollständig geladen: Es wird bei Einstellungen › Texteditor › Ergebnisse › Zeilenlimit abgeschnitten — demselben Limit, das der SQL-Editor verwendet —, und das Raster zeigt, wie viele von wie vielen geladen wurden.
Während eine Abfrage läuft, unterbricht die Taste Stoppen sie wirklich: Die Engine bricht mittendrin ab, statt auf das Ende zu warten.
INSTALL und LOAD werden abgelehnt: Calíope lädt keine DuckDB-Erweiterungen herunter, also läuft eine Abfrage, die eine braucht, nicht — mit dem Grund in der Meldung.
Was du in die Datei schreibst, bleibt ausstehend, genau wie eine Bearbeitung in Daten: Es ändert die Datei erst bei Änderungen speichern.
Funktionseinträge
Fährst du auf macOS mit dem Zeiger über eine Funktion oder setzt du auf dem iPad den Textcursor darauf, erscheint ihr Eintrag, der von DuckDB: Syntax, Rückgabe, Parameter und ein Beispiel. Das Thema Kontexthilfe für SQL-Funktionen erklärt es.
Änderungen bleiben ausstehend, bis du sie speicherst.
Bearbeitungen werden zu einer ausstehenden Transaktion zusammengefasst, genau wie im SQLite-Editor. Ein bernsteinfarbener Punkt zeigt ungespeicherte Änderungen an. Verwende Änderungen speichern, um sie zu übernehmen, oder Änderungen verwerfen, um sie zu verwerfen. Beim Schließen mit ausstehenden Änderungen wird eine Bestätigung verlangt. Und schlägt eine Anweisung fehl —oder stoppst du sie mit Stoppen—, während Änderungen ausstehen, bricht DuckDB die ganze Transaktion ab: Die Änderungen gehen verloren, und Calíope sagt es.
DuckDB schreibt zuerst in eine .wal-Datei neben der .duckdb-Datei; das Übertragen in die Hauptdatei (CHECKPOINT) geschieht asynchron, sodass die .wal-Datei nach dem Speichern und Schließen noch einige Sekunden bestehen bleiben kann — die Daten sind bereits sicher, auch wenn diese Nebendatei noch einen Moment da ist.
Gib DuckDB Threads und Speicher, und führe einen Checkpoint aus oder verdichte die Datei.
Der Bereich Einstellungen ist im DuckDB-Editor, was im SQLite-Editor der Bereich Pragmas ist. Unter Bearbeitbar werden Threads und Speicherlimit (MB) mit Anwenden wirksam: Die Konfiguration von DuckDB ist gesperrt, solange eine Datei geöffnet ist —ein SET ändert sie nicht—, also merkt sich Calíope den Wert und öffnet die Datei damit neu. Sie gehören zu diesem Gerät —ein Mac und ein iPad haben weder dieselben Kerne noch denselben Speicher— und reisen nicht mit deinen übrigen Einstellungen. Bei einer Datenbank im Arbeitsspeicher gibt es keine Datei zum Neuöffnen, und sie greifen nicht.
Wartung führt Checkpoint aus —das die .wal in die Datei überträgt—, Checkpoint erzwingen, Vacuum und Analysieren, und die Antwort der Engine erscheint unter den Schaltflächen. Wie die Einstellungen sind die Schaltflächen gesperrt, solange es ungespeicherte Änderungen gibt: erst speichern oder verwerfen. Die übrigen Einstellungen der Engine stehen unter Schreibgeschützt mit ihrem aktuellen Wert.
CSV importieren und als CSV, JSON oder SQL exportieren.
Über Importieren / Exportieren kannst du eine CSV-Datei in eine neue Tabelle mit Textspalten importieren, eine Tabelle als CSV oder JSON exportieren, oder die gesamte Datenbank als SQL-Dump (Schema und Daten) exportieren.
Das unterscheidet sich von Datendatei abfragen…: Hier wird die CSV-Datei als neue Tabelle in die .duckdb-Datei kopiert; dort bleibt die Datei, wo sie ist, und wird nur über eine View abgefragt.
Bei DuckDB liest die Engine die CSV selbst (COPY … AUTO_DETECT), jede Spalte kommt also mit ihrem Typ an und nicht als Text. Und Ganze Datenbank schreibt die komplette Datenbank in einen Ordner deiner Wahl —als CSV oder Parquet, mit dem Schema daneben— oder liest in die offene Datenbank, was ein anderer Export hinterlassen hat. Liegt die Datenbank im Arbeitsspeicher, schreibt Sichern unter… sie ganz in eine .duckdb-Datei und arbeitet dann damit weiter.
Alle drei verlangen, dass nichts ungesichert ist: Die Engine führt sie in einer offenen Transaktion nicht aus.
Befrage eine CSV-, JSON- oder Parquet-Datei wie eine Tabelle, ohne sie zu kopieren.
Die Taste Datendatei abfragen… erstellt für jede gewählte Datei eine View darauf — je nach Endung read_csv_auto, read_json_auto oder read_parquet: Die Datei bleibt, wo sie ist, und wird bei jeder Abfrage der View neu eingelesen, ohne ihre Daten in die Datenbank zu kopieren.
Der Name der View stammt vom Dateinamen ohne Endung; würden zwei Dateien denselben Namen ergeben, erhält die zweite _2, die dritte _3 und so weiter. In Struktur tragen diese Views ein anderes Symbol — eine Büroklammer — und ihr Tooltip zeigt den Pfad der Quelldatei.
Ist keine Datenbank geöffnet, öffnet die Taste zuerst eine Datenbank im Arbeitsspeicher: Es gibt keine .duckdb-Datei auf der Festplatte, daher ist Sichern unter… der Weg, die Arbeit beim Schließen nicht zu verlieren: Es schreibt sie ganz in eine .duckdb-Datei, und der Editor arbeitet damit weiter.