Ich habe in letzter Zeit mit Turso herumgespielt, und es trifft einen Sweet Spot, von dem ich gar nicht wusste, dass ich ihn wollte: die Einfachheit von SQLite kombiniert mit dem Komfort einer Cloud-Datenbank.
Was ist Turso?
Turso begann als libSQL, ein Fork von SQLite mit offenem Contribution-Modell. Inzwischen hat sich das Projekt zu dem entwickelt, was die Macher „die nächste Evolution von SQLite" nennen — ein kompletter Rewrite in Rust, der vollständig rückwärtskompatibel zu SQLite bleibt und gleichzeitig Dinge mitbringt, die das Original nie hatte:
- Native Vektorsuche für AI- und RAG-Anwendungen
- Asynchrones Design auf Basis moderner Primitive wie Linux’ io_uring
- Nebenläufige Schreibzugriffe ohne Lock-Konflikte
- Ein offenes Contribution-Modell — im Gegensatz zu SQLite selbst, das zwar Open Source ist, aber bekanntermaßen keine externen Beiträge annimmt
Das Produkt hat zwei Seiten:
- Turso Database — die Embedded-Engine, die in der App, auf dem Gerät oder sogar im Browser läuft
- Turso Cloud — die Managed-Plattform mit Branching, Backups und Analytics
Embedded Replicas
Das ist für mich das Killer-Feature. Eine Embedded Replica hält eine lokale Kopie der Cloud-Datenbank direkt neben der Anwendung:
- Lesezugriffe gehen auf die lokale Datei und kommen in Mikrosekunden zurück
- Schreibzugriffe gehen an den Cloud-Primary und werden zurück in die Replica gespiegelt
- Man bekommt Read-your-writes-Semantik — nach einem erfolgreichen Write sieht die Replica die neuen Daten sofort, ganz ohne explizites
sync()
Das Setup besteht im Wesentlichen aus zwei Parametern: einer lokalen url für die Datei und einer syncUrl, die auf die Remote-Datenbank zeigt. Synchronisieren kann man periodisch per syncInterval oder manuell per sync() beim Start oder in einem Background-Job.
Es ist das Datenbank-Äquivalent eines CDN: Die Daten leben am Edge, direkt im eigenen Prozess, aber die Single Source of Truth bleibt in der Cloud.
Offline-Writes
Standardmäßig brauchen Schreibzugriffe eine Verbindung, weil sie an den Primary gehen. Man kann aber den Offline-Modus aktivieren (offline: true) und stattdessen lokal schreiben — synchronisiert wird später. Für Mobile-Apps oder alles, was mit wackeligen Netzen klarkommen muss, ist das genau das Local-First-Muster, das bisher alle von Hand auf SQLite nachgebaut haben.
Einschränkungen
- Die lokale Datenbankdatei nicht mit einem anderen Prozess öffnen, während sie aktiv synchronisiert — sonst droht Datenkorruption.
- Embedded Replicas brauchen ein echtes Dateisystem und funktionieren daher nicht in Serverless-Umgebungen ohne eines.
Fazit
SQLite war für mich schon immer die Lieblingsdatenbank der Kategorie „funktioniert einfach", und Turso behält dieses Gefühl bei, während es nebenbei die zwei Probleme löst, die mich bisher immer zu Postgres getrieben haben: Replikation und Backups. SDKs gibt es für TypeScript, Go, Rust, PHP und mehr, es fügt sich also problemlos in die meisten Stacks ein.
Wer je gedacht hat „ich würde gern einfach SQLite ausliefern, aber mit Sync", sollte hier einen Nachmittag investieren.