Skip to content

Releases: evoluhq/evolu

evolu@3.0.1

20 Mar 18:11
d214b42
Compare
Choose a tag to compare

Patch Changes

evolu@3.0.0

20 Mar 17:24
a8af363
Compare
Choose a tag to compare

Major Changes

  • 11f1a40: Better and more versatile encryption

    For the upcoming integration of Evolu with Trezor (a cryptographic hardware wallet developed by SatoshiLabs), we changed the owner id and encryption key derivation to use SLIP-21 (hierarchical derivation of symmetric keys).

    As a result, the existing owner will get a new id and encryption key, requiring all data to be re-sync. Evolu provides automatic migration for these breaking changes, so no further actions are needed.

Minor Changes

  • 9be7e78: Add support for SQLite binary

evolu@2.2.0

14 Mar 19:19
ae0d11e
Compare
Choose a tag to compare

Minor Changes

  • 0fb793f: Enable OPFS for Firefox 111+

evolu@2.1.3

14 Mar 11:16
85af3b4
Compare
Choose a tag to compare

Patch Changes

  • b8296f7: Update peer dependencies

evolu@2.1.2

12 Mar 15:43
373ebca
Compare
Choose a tag to compare

Patch Changes

evolu@2.1.1

11 Mar 14:59
50ba2c2
Compare
Choose a tag to compare

Patch Changes

evolu@2.1.0

09 Mar 23:36
18b6e32
Compare
Choose a tag to compare

Minor Changes

  • be95d2c: Documentation for the whole public API

evolu@2.0.0

06 Mar 14:48
d12db1f
Compare
Choose a tag to compare

Major Changes

  • 2f0a596: Evolu 2.0

    • Zod replaced with effect-ts/schema.
    • Types are more strict, readable, fast, reusable, and descriptive for the domain model. We also simplified type hints in IDEs.
    • The mutate function was replaced with the create and update functions.
    • We removed internals from public API.
    • Evolu enforces the useQuery filterMap helper usage because it's super-useful.

    We removed internals from public API because exporting all under the same namespace wasn't ideal for DX. If necessary, we will reexport them but namespaced. If you already have an app made with Evolu, the only breaking changes are in the API; the persistence remains the same.

    We replaced Zod with Schema because Schema is fantastic and going to be even better. Let me explain it. There are several well-established runtime type checkers in the TypeScript ecosystem. The best was io-ts from Giulio Canti, but during its further development, Giulio hit the wall of architectural design. After a few attempts, it looked like he had given up. Then Zod was created to continue the mission of the best runtime types checker. That's why Evolu chose Zod. Zod is good. But several months ago, Giulio Canti restarted its open-source work and joined his endeavor with the Effect team to work full-time on Schema and other awesome libs. While fresh new, Schema is already very powerful and faster than Zod. It's also very well documented. Evolu has big plans with type-driven development, and Schema is ideal.

    Switching to Schema allowed us to improve Evolu DX by making types more strict, readable, fast, reusable, and descriptive for the domain model. Before this change, every column except for Id was nullable. Evolu 2.0 makes nullability explicit and optional. That's why the mutate function was refactored to the create and update functions. The create function enforces non-nullable columns now. To leverage this feature, use TypeScript 4.7 or newer with strict and exactOptionalPropertyTypes flags enabled in your tsconfig.json file.

    The last change is that Evolu enforces useQuery filterMap usage. While Evolu enforces creating new rows with the desired Schema, it can't enforce the order of messages from other devices. That's a rule in distributed systems and local-first software: messages can and will come in any order. Also, local-first apps have to handle all schema versions gracefully. That's what filterMap is for.

evolu@1.0.2

12 Feb 20:22
a1a79d3
Compare
Choose a tag to compare

Patch Changes

  • ddac0d6: Silence SQLite console output

evolu@1.0.1

11 Feb 23:48
3447b76
Compare
Choose a tag to compare

Patch Changes

  • f2c88d3: Use SQLite without rowid

    A WITHOUT ROWID table is an optimization that can reduce storage and processing requirements.