Closed exaby73 closed 4 months ago
I'm not that familiar with turso, but can libsql (as a C library) be used to connect to remote turso databases? That would make it easy to use with drift, since libsql is apparently compatible with libsqlite3 and package:sqlite3
(which drift uses internally) provides bindings to that.
I'll take a quick look at the Python Client SDK...
What turso did was add networking to sqlite.
We wouldn't be using package:sqlite3
at all.
We would just need a websocket or http client. They created a protocol that could use either https://github.com/tursodatabase/libsql/blob/main/docs/HRANA_3_SPEC.md
We could use this to create a websocket client. The tricky part is parsing the returns correctly.
There are multiple clients that are available to port from.
Straight from the horses mouth
https://x.com/glcst/status/1806414220902215981 https://x.com/mickrich384/status/1806534564124201389 https://x.com/glcst/status/1806535191818641460
If they pull through on a Dart client/server, we could use it to replace package:sqlite3
too !
It looks like a pretty simple RPC protocol so it shouldn't be super hard to implement. I'm not interested in anything Turso-specific, but I'll take a look at implementing a hrana client with drift support.
I'm not interested in anything Turso-specific
There is one major benefit to Turso. It's not a synchronous library. It wouldn't need an Isolate. For Dart Native, using an Isolate is good practice anyway. But for Dart Web it would be a major help. No dealing with Javascript workers.
I remember reading this somewhere, trying to find it now.
There is one major benefit to Turso. It's not a synchronous library. It wouldn't need an Isolate.
I meant that I'm happy to write bindings to servers following the open-source Hrana protocol (which is asynchronous in nature, we're using websockets to send commands), but not for the Turso SDK responsible for giving us a connection URL and JWT token to connect to.
Anyway, here's drift_hrana, fresh from the press. I'll add a page to the documentation as well, but there's an example in the package too. You only have to swap out the NativeDatabase
with a HranaDatabase
to use a server, the rest of drift behaves exactly the same.
You're an absolute beast!
Is your feature request related to a problem? Please describe. Turso is a "serverless"/"edge" database that uses SQLite (libsql). My request is to provide a way to connect to remote SQLite / libsql databases like Turso
Describe the solution you'd like Since the package already has SQLIte parsing, it could be used over a remote connection as well. This would be good as we could write Dart backends on Globe that would take advantage of Turso's distributed nature