Comment by schickling

1 year ago

Hi folks, creator of LiveStore here (prev. founder Prisma).

Very excited to launch LiveStore in beta today after having worked on it over the past 4 years. I've built it for myself working on Overtone, an ambitious music client aiming for a native-grade high-performance app feel.

LiveStore embraces SQLite by adding a signals-based reactivity layer and combines it with event-sourced based syncing (similar to Git).

Happy to answer any question! Looking forward to thoughts and feedback!

I have evaluated the local first landscape and few solutions are as neat as this one! The only other (more mature seems to be) is tinyBase but that's based on a different model (CRDTs vs Event sourcing)

Few questions:

Would it not be possible to store and rely on larger amount of data on SQLite and keeping it on disk as an option? I see that there's a limitation of 1 GB. So maybe just a config flip to change the mode of persistence?

Also - multi-tenancy could be an interesting scenario. Think JIRA but each organisation needs their own namespace and each user/client wouldn't need all the tickets from all the organisation but only of their own (or even more scoped to department and team) therefore the local database would alway be a subset of the whole universe.

An out of the box sync server that could be run directly on Bun/Node (without Cloudflare) could be a nice addition.

But overall, really elegant solution. I like it, might give it a try in an idea I am evaluating various tools for. Unfortunately, the multi-tenancy story is critical for that.

  • curious: did you literally use the Local-first Landscape[1] to do the evaluation? (full disclosure: co-author of landscape)

    [1] https://localfirst.fm/landscape

    • Yes already did through most of them. Either we have libraries around CRDTs or we have full BaaS (think Parse if anyone remembers or Firebase) soft of things that possibly can be self deployed but have a very heavy and iron clad curtain on the underlying storage medium (Postgres/SQLite) etc exposing a world view of their own.

      tinyBase seems to be the only one that stands out in that regard or this LiveStore now.

      PS: Thank you for putting this landscape. That really has enabled me or anyone else to look at what options are there. No amount of googling would do that kind of compilation. I find it very useful.

I'm so glad to see this.

I was just looking into LiveStore this past month for a hobby project, but it was behind a beta preview, so I hope to be able to dig in soon to see if it can be useful to me.

I love how you're pushing forward the localfirst conversation.

If you've spent any time building offline capable web apps with some sort of syncing mechanism, you begin to very quickly see the usefulness of a sync engine.

I really enjoyed the talk at Local-First Conf today — well done. I thought it was very well explained and made compelling arguments for the event-sourcing materialized into SQLite architecture.

Thank you for championing SQLite and especially OPFS Wasm SQLite on the web — we (PowerSync) are clearly also big proponents of it, so love to see other projects having success with it too.

> LiveStore extends its local event-sourcing model globally by synchronizing events across all clients, typically through a central sync backend.

Is that a requirement or could there also be federated nodes, or a full p2p modus operandus? Think for use in decentralized social networking.

Do you think it (in combination with React, WASM) could replace something like the Juce framework that most music apps use? I'm a beatmaker myself and would like to get into music apps but found the Juce stuff and C++ always scary.

  • Juce is more common for music creation apps right? I believe Overtone is more of a Spotify alternative.

    • Yes, Juce is used to develop DAWs and VST plugins. The way I understand it, LiveStore basically creates a client side loop in the browser comparable to apps you would install and run locally on your device. Having the data (e.g. samples) stored in sqlite within the client side loop would make a huge difference vs. web apps fetching and caching from a backend I assume.