|
1 | 1 | export const metadata = { |
2 | | - title: "Conversations", |
| 2 | + title: "Comparison", |
3 | 3 | description: |
4 | | - "On this page, we’ll dive into the different conversation endpoints you can use to manage conversations programmatically.", |
| 4 | + "A comparison of Evolu with other local-first frameworks and solutions, exploring their trade-offs and use cases.", |
5 | 5 | }; |
6 | 6 |
|
7 | | -<Warn> |
8 | | - This doc is from an earlier version of Evolu. While some concepts still apply, |
9 | | - others may have changed — double-check with the latest source or tests. |
10 | | -</Warn> |
11 | | - |
12 | 7 | # Comparison |
13 | 8 |
|
14 | | -Local-first software, a paradigm emphasizing data sovereignty and network-independent functionality, is rapidly emerging as a cutting-edge trend in technology. The expanding ecosystem of frameworks and libraries makes it hard to choose the right tool for a job. Let's talk about the choices developers have. |
15 | | - |
16 | | -## Evolu vs Custom Solution |
17 | | - |
18 | | -Let's face it. Developers love to create new things from scratch. "Not Invented Here" syndrome is real. But sometimes it's also necessary, especially when we have special requirements. |
19 | | - |
20 | | -I decided to create Evolu because I made a few local-first apps, but I spent too much time on data persistence and synchronization details with each of them. Typically, I started with the front end and had much fun until I had to implement a server. Local-first apps are effectively distributed systems, and distributed systems are one of the most challenging topics in computer science. |
21 | | - |
22 | | -Just try to google "app sync problem," and you will see that even the most prominent companies fail to deliver reliable software. Apple Notes, for example: "11 Ways to Fix Apple Notes Not Syncing Between", "Notes Not Syncing Across Devices", and many more. If it's hard for Apple, how hard will it be for smaller companies? |
23 | | - |
24 | | -Creating a custom solution is possible but requires a deep understanding of distributed systems. Did you know that computer clocks can go backward? What should happen if the user edits the same data on two different offline devices? Can we enforce database constraints like transactions? And what about database schema changes? Should we migrate all data? How can we ensure outdated clients can work with new data or don't crash, at least? And that's only the tip of the iceberg. A local-first platform should work with all desktop, mobile, and native platforms. |
25 | | - |
26 | | -And the last and most crucial question: What will happen when the author of a custom solution leaves the company? |
27 | | - |
28 | | -| Feature | **Evolu** | **Custom Solutions** | |
29 | | -| ------------------------ | ---------------------------- | --------------------------------------------------- | |
30 | | -| **Development Time** | Fast, ready-to-use framework | Long, requires building infrastructure from scratch | |
31 | | -| **Data Synchronization** | Built-in and automatic | Needs manual implementation | |
32 | | -| **Conflict Resolution** | Handled internally with CRDT | Complex and time-consuming | |
33 | | - |
34 | | -<Note> |
35 | | - If someone still decides to write the most straightforward working code, they |
36 | | - will end up with something similar to Evolu minus years of Evolu evolving. |
37 | | -</Note> |
38 | | - |
39 | | -## Evolu vs ElectricSQL |
40 | | - |
41 | | -It's not secure by default and stable yet. It also requires a proprietary server. I like what [ElectricSQL](https://electric-sql.com/) does, but it is not local-first as described in [the essay](https://www.inkandswitch.com/local-first/). If ElectricSQL goes out of business and shuts down its servers, I wonder if an external developer will maintain their sophisticated open-sourced sync service written Elixir. It is not impossible, but there is another problem. The ElectricSQL server is not generic by design. It's not a bug; it's a feature, but the feature that is making ElectricSQL a non-local-first. Evolu is different. The Evolu Server is actually a simplified Evolu Client generic for all Evolu applications. Zero-configuration and nothing to maintain. |
42 | | - |
43 | | -| Feature | **Evolu** | **ElectricSQL** | |
44 | | -| ----------------------- | --------------------------- | --------------------------- | |
45 | | -| **Security** | End-to-end encryption | Not secure by default | |
46 | | -| **Server Requirements** | Can run on your own servers | Requires proprietary server | |
47 | | -| **Vendor Lock-in** | No | Yes | |
48 | | - |
49 | | -## Evolu vs Vulcan Web (CR-SQLite) |
50 | | - |
51 | | -**TLDR:** It isn't stable yet and is not secure by default. TODO: Compare CRDT approaches. |
52 | | - |
53 | | -| Feature | **Evolu** | **Vulcan Web (CR-SQLite)** | |
54 | | -| ------------- | --------------------- | -------------------------- | |
55 | | -| **Stability** | Production-ready | Still in development | |
56 | | -| **Security** | End-to-end encryption | Not secure by default | |
57 | | - |
58 | | -## Evolu vs Loro and other SQL-less CRDTs |
| 9 | +This page compares Evolu with other local-first frameworks and solutions to help you make an informed decision about which tool best fits your needs. |
59 | 10 |
|
60 | | -Evolu CRDT is built on SQLite, which gives it SQL queries and scalability. CRDTs can also be made with custom data structures, often for particular purposes like rich text data. Custom data structures can be super efficient and fast, but they're not SQL anymore. As always, choosing the right tool depends on requirements. Evolu was made for general-purpose apps where SQL is a must. We observe the competition among SQL-less CRDTs and will choose the winner (or make our own). |
| 11 | +The goal of Evolu is to be as simple, stable, and private as possible. It uses SQLite because SQL is a must for business apps, providing the query flexibility and reliability that production applications require. |
61 | 12 |
|
62 | | -| Feature | **Evolu** | **Loro and Similar Solutions** | |
63 | | -| ----------------------- | ------------ | ------------------------------ | |
64 | | -| **Query Flexibility** | Supports SQL | Limited to specific use cases | |
65 | | -| **General-Purpose Use** | Yes | No | |
| 13 | +**Note:** This page is currently in progress and will be updated with detailed comparisons soon. |
0 commit comments