Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2797 commits
Select commit Hold shift + click to select a range
2f91f83
Use destructured fetch in task example; update tests
steida Jan 31, 2026
137ab13
Clarify Test.ts docs and example name
steida Jan 31, 2026
496ebd7
Remove example block and reword InferType note
steida Jan 31, 2026
2ae4726
Clarify and tidy dependency-injection docs
steida Jan 31, 2026
ca0bffe
Use child console in relay main
steida Jan 31, 2026
6d29f66
Rename test helpers to testCreate*
steida Jan 31, 2026
01147fc
Migrate storage/protocol to Task-based runner
steida Jan 31, 2026
f13aac5
Add expectTypeOf examples for todo
steida Feb 1, 2026
4f2f271
Require capitalized discriminant 'type'
steida Feb 1, 2026
0e75984
Update feature copy and adjust test gzip size
steida Feb 1, 2026
118b193
Use Awaitable/isPromiseLike instead of MaybeAsync
steida Feb 1, 2026
a18a60e
Stub WebSocket transport with todo()
steida Feb 1, 2026
37fd12b
Force disposal tasks to have no domain errors
steida Feb 1, 2026
2166331
Mark Resources tests as TODO
steida Feb 1, 2026
afa8422
Remove legacy OldTask implementation
steida Feb 1, 2026
55b87d7
Update pnpm-lock.yaml
steida Feb 1, 2026
c04d6b0
Add Promise-based setTimeout to Time module
steida Feb 1, 2026
b0288ea
Replace wait() with setTimeout() in Relay tests
steida Feb 1, 2026
ecf32ba
Add isHermes/isServer flags and tests
steida Feb 1, 2026
7b65d1a
Update TreeShaking test size values
steida Feb 1, 2026
acca39d
Refactor WebSocket to Task-based API and update tests
steida Feb 1, 2026
34d7664
Remove redundant comment about retry behavior
steida Feb 2, 2026
0c4ce6b
Add shutdown-aware createRunner; rename relay API
steida Feb 2, 2026
284d9cc
Update pnpm-lock.yaml
steida Feb 2, 2026
e3739cc
Add browser Task runner with global error handling
steida Feb 2, 2026
6d368c2
Remove re-export of @evolu/web from react-web
steida Feb 2, 2026
364b359
Refactor abort handling in Task and update sizes
steida Feb 2, 2026
fdbc834
Remove Feature.id and use name as key
steida Feb 2, 2026
9b576d1
Enable React strict mode in Next.js config
steida Feb 3, 2026
c75b321
Update browserslist and add @evolu/web dependency
steida Feb 3, 2026
5acfef4
Update pnpm-lock.yaml
steida Feb 3, 2026
2e81edc
Rename TaskDisposableStack to AsyncDisposableStack
steida Feb 3, 2026
c93474f
Fix lint-monorepo
steida Feb 3, 2026
a0d1a8f
Refactor Console docs and expand examples
steida Feb 3, 2026
1d27962
Use default time dep in console formatter
steida Feb 3, 2026
cae05f6
Limit published files to dist/src and src
steida Feb 3, 2026
4d99d53
Remove createTime usage in console formatter
steida Feb 3, 2026
b1b17bc
Add React Native runner and ErrorUtils handling
steida Feb 3, 2026
aea7f85
Bump several package versions in pnpm-lock
steida Feb 3, 2026
635cfa9
Reorder package exports and add default entries
steida Feb 3, 2026
e57edbe
Use workspace deps and react catalog in examples
steida Feb 3, 2026
133fc15
Adjust tests to use mocked listeners and console
steida Feb 3, 2026
e8ad8cc
Clarify ESLint 'Unsafe...' troubleshooting
steida Feb 3, 2026
3f4ebaf
Migrate to monorepo Vitest config
steida Feb 3, 2026
797c53d
Expand TDD guidance and add Vitest examples
steida Feb 3, 2026
ab88e4c
Update pnpm-lock.yaml
steida Feb 3, 2026
ee15fba
Update TreeShaking.test.ts
steida Feb 3, 2026
098935c
Use 'observability' term in error comment
steida Feb 3, 2026
5425031
Rename vitest config to .mts and add scripts tests
steida Feb 3, 2026
5275b07
Add createQueryBuilder, replace createQuery usage
steida Feb 3, 2026
19fef0c
Remove multitenant Example
steida Feb 3, 2026
a5cdd8c
Clarify test naming and execution guidance
steida Feb 4, 2026
8d4c871
Add zipArray utility and tests
steida Feb 4, 2026
630a8a3
Upgrade Biome to v2.3.14
steida Feb 4, 2026
6cbe5bd
Update Features content and icons
steida Feb 4, 2026
80168d9
Normalize casing in docs, tests, and JSDoc groups
steida Feb 4, 2026
06330b8
Rename Runner to Run
steida Feb 4, 2026
4a67e14
Add build/test docs and architecture overview
steida Feb 5, 2026
82c941a
Rename test app owners
steida Feb 5, 2026
f79f9f8
Add incremental TS builds and workspace references
steida Feb 5, 2026
585a79a
Enable ESLint cache and remove monorepo note
steida Feb 5, 2026
cadf5c0
Update pnpm-lock.yaml
steida Feb 6, 2026
6cf8870
Cleaned up tsconfig files across packages
steida Feb 6, 2026
bba6488
Fixed package.json export paths to include src directory
steida Feb 6, 2026
9950864
Added build dependency to turbo dev task
steida Feb 6, 2026
0618f54
Improved createRun JSDoc across platforms
steida Feb 6, 2026
30ee124
Sorted imports in Task.test.ts
steida Feb 6, 2026
eff36aa
Rewrote Evolu as Task-based createEvolu
steida Feb 6, 2026
26bc572
Simplified platform Evolu deps for web, React Native, and React Web
steida Feb 6, 2026
ccf4da1
Restructured React hooks into local-first directory
steida Feb 6, 2026
83f6d3d
Updated Svelte appOwnerState for synchronous appOwner
steida Feb 6, 2026
304da2d
Removed useEvoluError from Vue and sorted exports
steida Feb 6, 2026
6c793b2
Update tsconfig.json
steida Feb 6, 2026
6d98bd2
Update tsconfig.json
steida Feb 6, 2026
1563099
Update index.tsx
steida Feb 6, 2026
5b7f2f9
Stub EvoluFullExample; comment out implementation
steida Feb 6, 2026
84f907e
Update EvoluMinimalExample.tsx
steida Feb 6, 2026
cdf7f89
Shorten Console note in DI docs
steida Feb 6, 2026
53c2ce9
Update Copilot instructions and streamline guidelines
steida Feb 6, 2026
e276095
Update copilot-instructions.md
steida Feb 7, 2026
d41877a
Update pnpm-lock.yaml
steida Feb 7, 2026
2abf93d
Improve SQLite API and test
steida Feb 8, 2026
ab5fdba
Enforce TypeScript usage and 100% coverage
steida Feb 8, 2026
7af128d
Refactor Console formatter and update test snapshot
steida Feb 8, 2026
a506eb8
Cast EvoluContext value to Evolu
steida Feb 8, 2026
ca11fd0
Refactor schema & mutations to Standard Schema v1
steida Feb 8, 2026
89caf30
Remove bench scripts from package.json
steida Feb 8, 2026
c6c4fae
Reduce benchmark timestamp count to 50k
steida Feb 8, 2026
dc7d100
Clarify ESLint restart instruction in docs
steida Feb 9, 2026
eecfbf2
Exclude node_modules in VSCode settings
steida Feb 9, 2026
223a9fc
Use run_vscode_command for ESLint restart
steida Feb 9, 2026
97f5314
Refactor Console: formatter API & store/multi outputs
steida Feb 9, 2026
a76fef8
Update copilot-instructions.md
steida Feb 9, 2026
dfea0cf
Refactor worker abstraction and web worker APIs
steida Feb 9, 2026
3c79301
Bump pnpm to 10.29.2
steida Feb 10, 2026
d70872e
Update pnpm-lock.yaml
steida Feb 10, 2026
8751700
Add inline note for fileParallelism=false
steida Feb 10, 2026
01dd176
Add Console.write to replay entries
steida Feb 11, 2026
671b21c
Update pnpm-lock.yaml
steida Feb 11, 2026
5c134fc
Allow defer to accept cleanup callbacks
steida Feb 13, 2026
815ecf9
Update pnpm-lock.yaml
steida Feb 13, 2026
dc509ca
Bump Biome schema to v2.3.15
steida Feb 13, 2026
3ee6a43
Bump pnpm to 10.29.3
steida Feb 13, 2026
9b2e5ab
Add source exports and Next.js transpile config
steida Feb 13, 2026
9620c0a
Rename SimpleName to Name across codebase
steida Feb 13, 2026
3102f39
Add @emotion/is-prop-valid dependency
steida Feb 13, 2026
6043c38
Align Worker semantics
steida Feb 13, 2026
7ff9555
Initialize local-first Worker wiring
steida Feb 13, 2026
5257fb9
Update tree-shaking test snapshot
steida Feb 13, 2026
0187df6
Expose DisposableStack dependency in Evolu deps
steida Feb 13, 2026
dd66bf2
Update minimal playground to new Evolu config
steida Feb 13, 2026
fc99998
Add evoluError tab channel and error handling
steida Feb 13, 2026
f16f563
Only transpile workspace packages in dev
steida Feb 14, 2026
c3e32b0
Update pnpm-lock.yaml
steida Feb 14, 2026
e62d12a
Add microtask batch utility
steida Feb 14, 2026
5d7cf73
Add ref count utility
steida Feb 14, 2026
31e07eb
Implement mutation methods
steida Feb 14, 2026
9d3a49e
Add commit batches prompt
steida Feb 14, 2026
da75834
Renamed local-first worker module to Shared and aligned shared worker…
steida Feb 14, 2026
019ad76
Add testCreateWorker and worker tests
steida Feb 14, 2026
b90fae5
Wire createEvolu to DB worker init
steida Feb 14, 2026
d4fb5ba
Wire platform DB workers and worker rename
steida Feb 14, 2026
a986d23
Add leader lock and worker init wiring
steida Feb 14, 2026
cc87fde
Add canonical test name constants
steida Feb 14, 2026
857608f
Rename common test deps module
steida Feb 14, 2026
d5e7e3c
Add React Native leader lock tests
steida Feb 14, 2026
27a34ec
Add web leader lock browser tests
steida Feb 14, 2026
cb1e7e0
Use store-only worker console output
steida Feb 14, 2026
f05ec75
Use Run<D> type for run.daemon
steida Feb 14, 2026
af7aca4
Update TreeShaking.test.ts
steida Feb 14, 2026
2cc6272
Sort imports
steida Feb 14, 2026
2a585dc
Centralize deterministic test values
steida Feb 14, 2026
fb46547
Use deterministic AppOwner in playground
steida Feb 14, 2026
fefc8e3
Refactor db worker init flow
steida Feb 14, 2026
db759d4
Added broker channel wiring and leader acquired output handling
steida Feb 15, 2026
a2a448d
Added typed NativeMessagePort generics
steida Feb 15, 2026
746ea84
Refactored local-first worker channel wiring
steida Feb 15, 2026
0b390f6
Clarified SharedWorker communication comment
steida Feb 15, 2026
0bbef0a
Simplified worker deps and forwarded DbWorker console entries
steida Feb 15, 2026
57d2390
Wired DbWorker init payload and worker output flow
steida Feb 15, 2026
d4f0e5f
Wired sqlite driver into React Native deps
steida Feb 15, 2026
096326e
Documented type aliases for composed deps
steida Feb 15, 2026
7f12041
Refactored DB worker startup to initialize schema and bootstrap clock…
steida Feb 15, 2026
f94006d
Refactored SQLite APIs to throw-first semantics and aligned protocol/…
steida Feb 15, 2026
1f7be0d
Update pnpm-lock.yaml
steida Feb 15, 2026
b9fcb47
Add getOk for never-error Results
steida Feb 15, 2026
af2e3f6
Use getOk in SQLite setup paths
steida Feb 15, 2026
717abb4
Upgrade Biome to v2.4.0 and update config
steida Feb 15, 2026
c089ae9
Queue mutations, add quarantine, rename messages
steida Feb 16, 2026
0ccedcf
Add top-down code ordering guidance
steida Feb 19, 2026
c8d1bf9
Bump pnpm to 10.30.0 in package.json
steida Feb 19, 2026
01e588d
Update pnpm-lock.yaml
steida Feb 19, 2026
ae95d0e
Make MicrotaskBatch disposable
steida Feb 19, 2026
e047437
Wrap mutateBatch with stack.use and add test
steida Feb 19, 2026
ebf0d31
Bump pnpm packageManager to 10.30.1
steida Feb 20, 2026
1ab01ab
Update pnpm-lock.yaml
steida Feb 20, 2026
43ba3f2
Add TODO: Example to Instances
steida Feb 20, 2026
5c163a9
Add ExtractType utility and tests
steida Feb 21, 2026
cec27bc
Clarify exhaustiveCheck docs and add example
steida Feb 21, 2026
ec8a83b
Add ArrayBuffer external link in typedoc
steida Feb 21, 2026
121ee93
Update pnpm-lock.yaml
steida Feb 21, 2026
f81b896
Update biome.json
steida Feb 21, 2026
42dcbd5
Ensure exported SQLite bytes use ArrayBuffer backing
steida Feb 21, 2026
e6997a1
Alias int factory; use TypeName for typed tags
steida Feb 21, 2026
21203bb
Refactor DbWorker, storage, and messaging
steida Feb 21, 2026
96d9593
Make Callbacks disposable and clear on dispose
steida Feb 21, 2026
89786b7
Add createSet constructor and unit tests
steida Feb 22, 2026
3e70326
Add Deferreds registry; adjust Deferred/Callbacks
steida Feb 22, 2026
3614a4e
Refactor query patches and shared worker flow
steida Feb 22, 2026
041a28c
Remove RunConfigDep import and update docs
steida Feb 22, 2026
ed91d5c
Made database exports sequential
steida Feb 22, 2026
36aef0c
Added memory workers and RN reuse
steida Feb 22, 2026
c5ec10a
Expanded Evolu tests and test helpers
steida Feb 22, 2026
e23305e
Increased Protocol test timeout
steida Feb 22, 2026
84e4681
Use shared emptyArray instead of emptyRows
steida Feb 22, 2026
4f20936
Add JSDoc alignment lint note
steida Feb 22, 2026
80919ed
Restore Evolu query behavior
steida Feb 23, 2026
fe6937c
Add 'vByK' naming guideline for indexed collections
steida Feb 23, 2026
0d8d8f4
Add run.orThrow helper and update tests
steida Feb 23, 2026
7e132bc
Update pnpm-lock.yaml
steida Feb 23, 2026
94064ee
Rename int helper to safeInt and use it for Int
steida Feb 23, 2026
bf48e6a
Fix indentation of PRAGMA SQL block
steida Feb 23, 2026
23c5750
Add debug logs and re-scope postMessage
steida Feb 23, 2026
bf156ee
Improve logging in Db worker
steida Feb 23, 2026
49eda0d
Revive minimal example
steida Feb 23, 2026
e6b0a6e
Clarify AppOwner privacy and unnull mnemonic
steida Feb 23, 2026
96f1fa8
Add prepack build hook to support Git install testing
steida Feb 23, 2026
042ab1d
Add prepack script to package.jsons
steida Feb 23, 2026
b0e91f5
Migrate monorepo from pnpm to Bun
steida Feb 24, 2026
4a9e7ec
Fix deps in react-expo example
steida Feb 24, 2026
0128c74
Fix RN build
steida Feb 24, 2026
87265f1
Use prepared statement for all exec calls
steida Feb 24, 2026
670795d
Use object tokens for native message ports
steida Feb 24, 2026
f05eda7
Resolve Expo babel plugins; bump electron-builder
steida Feb 24, 2026
7d58c30
Test for install from Github
steida Feb 24, 2026
572ac04
Fix build from Github
steida Feb 24, 2026
cd900c8
Next attempt
steida Feb 24, 2026
d960c68
Normalize SQLCipher key handling and Expo statement lifecycle
steida Feb 24, 2026
7d536e3
Align @types/react-dom to ~19.1.10
steida Feb 24, 2026
91640f5
Fix tree shaking test
steida Feb 24, 2026
9f7a60f
Refine CI workflow triggers
steida Feb 24, 2026
ae805e2
Run CI on all branches
steida Feb 24, 2026
4f32b08
Update bun.lock
steida Feb 24, 2026
04e1976
Fix dev
steida Feb 24, 2026
507617b
Update bun.lock
steida Feb 24, 2026
fec57e4
Skip typedoc-plugin-evolu test and remove from verify
steida Feb 24, 2026
eb19992
Refactor SQLite schema handling
steida Feb 25, 2026
c57571c
Unify leader lock implementations
steida Feb 25, 2026
253271b
Expand tests for SQLite refactor
steida Feb 25, 2026
01ed6e2
Update sqlite-refactor.md
steida Feb 25, 2026
7d92eb7
Update bun.lock
steida Feb 25, 2026
e057828
Use testCreateRunWithSqlite test helper
steida Feb 25, 2026
2e2c35c
Simplify SQLite schema extraction and tests
steida Feb 25, 2026
507d493
Make in-memory workers/message delivery async
steida Feb 26, 2026
2b2575a
Add testWaitForWorkerMessage and update tests
steida Feb 26, 2026
d92d031
Make Evolu.exportDatabase return Promise
steida Feb 26, 2026
3353955
Remove coverage directory in clean script
steida Feb 26, 2026
8876c09
Update bun.lock
steida Feb 26, 2026
3fdd983
Restore and improve Resources
steida Feb 26, 2026
359f393
Update copilot-instructions.md
steida Feb 27, 2026
9364b02
Refactored shared sync resource management
steida Mar 1, 2026
a428756
Improved polyfills for web and React Native runtimes
steida Mar 1, 2026
ec61d7f
Updated Expo example and packages to Expo 55
steida Mar 1, 2026
c06944f
Updated docs and minimal playground for latest APIs
steida Mar 1, 2026
edf950f
Use js/ts.tsdk.path and remove node_modules exclude
steida Mar 1, 2026
e903c47
Add Set shim typings and refactor Abort polyfills
steida Mar 1, 2026
8c4101a
Simplified cleaning
steida Mar 1, 2026
73fd2e5
sync(common-v8): port e903c47d Abort polyfills and Set typings
miccy Mar 1, 2026
77af922
sync(common-v8): port a4287569 polyfills coverage (selective)
miccy Mar 1, 2026
c208a2d
sync(common-v8): port 8c4101ac cleaning patterns (selective)
miccy Mar 1, 2026
9af8b32
sync(common-v8): align polyfills imports and deps for fork
miccy Mar 1, 2026
db68e41
sync(common-v8): defer worker polyfill bootstrap in web runtime
miccy Mar 1, 2026
915eefd
sync(common-v8): tighten Promise polyfill typing for TS 5.9
miccy Mar 1, 2026
98e23b6
chore: Update minor dependencies across packages and improve README t…
miccy Mar 1, 2026
0d6d853
Create .gitignore
steida Mar 1, 2026
58b0fe3
Remove stray console.log of Symbol.asyncDispose
steida Mar 1, 2026
904c47e
Add arrayFromAsync and tests
steida Mar 1, 2026
87f87d5
Add array/promise polyfills and remove runtime checks
steida Mar 1, 2026
012108c
react-native: isolate worker runs and add tests
steida Mar 1, 2026
3c0f25c
Upgrade ESLint to v10 and adjust tests
steida Mar 1, 2026
81a9d0a
sync(common-v8): finalize RN polyfills review fixes
miccy Mar 1, 2026
6d94b0b
sync(common-v8): port 904c47e Add arrayFromAsync and tests
miccy Mar 1, 2026
208a3a1
sync(common-v8): port 012108c react-native isolate worker runs
miccy Mar 1, 2026
1b9164a
sync(common-v8): port 58b0fe3 remove stray Symbol.asyncDispose log
miccy Mar 1, 2026
4cb1edc
chore(sync): organize imports after wave2 ports
miccy Mar 1, 2026
0ad065c
sync(common-v8): cautious wave2 runtime sync (no-eslint) (#60)
miccy Mar 1, 2026
8ad8292
chore: Update `@tabler/icons` and `@tabler/icons-react` to `3.38.0` a…
miccy Mar 1, 2026
32ee93c
chore(test): resolve biome warnings in react-native polyfills tests
miccy Mar 1, 2026
2aacb1a
docs(readme): simplify wide tables for GitHub layout
miccy Mar 1, 2026
854bdc4
chore(sync): connect upstream/common-v8 history to wave1
miccy Mar 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .changeset/array-module-refactor.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ if (isNonEmptyArray(mutableArr)) { ... }
### New Functions

- **`arrayFrom`** — creates a readonly array from an iterable or by generating elements with a length and mapper
- **`arrayFromAsync`** — creates a readonly array from an async iterable (or iterable of promises) and awaits all values
- **`flatMapArray`** — maps each element to an array and flattens the result, preserving non-empty type when applicable
- **`concatArrays`** — concatenates two arrays, returning non-empty when at least one input is non-empty
- **`sortArray`** — returns a new sorted array (wraps `toSorted`), preserving non-empty type
Expand Down
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,19 @@ coverage
tmp
__screenshots__
*.tsBuildInfo
*.tsbuildinfo
.generated

.ai/
.vite
next-env.d.ts

# apps/relay
apps/relay/data/*
!apps/relay/data/.gitkeep

# examples/react-expo
examples/react-expo/.expo/
examples/react-expo/expo-env.d.ts
examples/react-expo/ios
examples/react-expo/android
84 changes: 50 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,39 +14,55 @@ Evolu is a TypeScript library and local-first platform.
## 🪴 Project Activity

<p align="center">
<img src="https://repobeats.axiom.co/api/embed/<hash>.svg" alt="Repobeats analytics image" />
<img src="https://repobeats.axiom.co/api/embed/9dbe31e742524e552a28ac3a7edf1d06e987b2ae.svg" alt="Repobeats analytics image" />
</p>

## Integration Matrix

Coverage snapshot date: `2026-02-27` (from `bun run test:coverage` and `bun run test:coverage:bun`).

| Package | Supported Versions | Implementation Status | Coverage (Statements / Branches) | Notes |
| --- | --- | --- | --- | --- |
| `@evolu/common` | Node `>=24.0.0` | Stable core | `94.47% / 89.57%` | Main engine + local-first protocol/runtime. |
| `@evolu/web` | `@evolu/common ^7.4.1` | Stable | `99.33% / 93.71%` | Browser runtime (Worker/SharedWorker/Web Locks path). |
| `@evolu/nodejs` | Node `>=24.0.0`, `@evolu/common ^7.4.1` | Stable | `95.74% / 87.50%` | Includes relay adapter hardening (WS lifecycle + subscribe/broadcast/unsubscribe + restart coverage). |
| `@evolu/react-web` | React `>=19`, React DOM `>=19`, `@evolu/web ^2.4.0` | Stable thin adapter | `100% / 100%` | Thin web integration wrapper. |
| `@evolu/react-native` | React Native `>=0.84`, Expo `>=55`, `@op-engineering/op-sqlite >=12` | Lane-gated hardening | `100.00% / 100.00%` (lane gate) | Strict file gates (`react-native` + `expo`) are enforced at `100/100/100/100` for scoped source files. |
| `@evolu/react` | React `>=19` | Wrapper support | `0% / 0%` | Hook wrappers; coverage expansion planned. |
| `@evolu/vue` | Vue `>=3.5.29` | Wrapper support | `0% / 0%` | Composition API wrappers; coverage expansion planned. |
| `@evolu/svelte` | Svelte `>=5.53.3`, `@evolu/web ^2.4.0` | Wrapper support | `0% / 0%` | Store-based wrappers; coverage expansion planned. |
| `@evolu/bun` (private) | `@evolu/common ^7.4.1`, Bun `1.3.x` | Experimental adapter | `100% / 100%` | Measured via Bun coverage runner on `BunDbWorker.ts`. |
Coverage snapshot date: `2026-03-01` (from `bun run verify`).

| Package | Baseline | Status |
| ---------------------- | --------------------------------------- | -------------------- |
| `@evolu/common` | Node `>=24.0.0` | Stable core |
| `@evolu/web` | Browser + `@evolu/common ^7.4.1` | Stable |
| `@evolu/nodejs` | Node `>=24.0.0` + `@evolu/common ^7.4.1` | Stable |
| `@evolu/react-web` | React `>=19` + `@evolu/web ^2.4.0` | Thin adapter |
| `@evolu/react-native` | RN `>=0.84`, Expo `>=55` | Lane-gated hardening |
| `@evolu/react` | React `>=19` | Wrapper support |
| `@evolu/vue` | Vue `>=3.5.29` | Wrapper support |
| `@evolu/svelte` | Svelte `>=5.53.3` | Wrapper support |
| `@evolu/bun` (private) | Bun `1.3.x` + `@evolu/common ^7.4.1` | Experimental adapter |

Coverage notes (Statements / Branches):

- `@evolu/common`: `94.46% / 89.64%`
- `@evolu/web`: `98.90% / 93.30%`
- `@evolu/nodejs`: `95.74% / 85.71%`
- `@evolu/react-native`: `99.32% / 98.17%` + strict `react-native`/`expo` file gates at `100/100/100/100`
- `@evolu/bun` (private): `100% / 100%` (`BunDbWorker.ts`)
- Wrapper packages (`@evolu/react`, `@evolu/vue`, `@evolu/svelte`) are still coverage-expansion candidates.

## Planned Integrations (Roadmap View)

| Integration | Fit | Priority | Expected Path | Main Risk / Blocker |
| --- | --- | --- | --- | --- |
| Next.js (App Router) | Very high | P0 | Official `@evolu/react-web` guide + production example for Server/Client boundaries. | SSR/client boundary handling and Worker lifecycle in edge runtimes. |
| TanStack Start | Very high | P0 | Use `@evolu/react` + `@evolu/web`, focus on SSR/client boundary docs and example app. | SSR edge cases (worker lifecycle and hydration boundary). |
| Astro | High | P0 | Client-island integration on top of `@evolu/web`, starter template + docs. | Island hydration timing and worker boot ordering. |
| SvelteKit | High | P1 | `@evolu/svelte` + `@evolu/web` reference app with SSR-aware browser-only init. | Avoiding server-side execution for browser worker primitives. |
| Nuxt 3 | High | P1 | Vue composables + client-only plugin/module (`@evolu/vue` + `@evolu/web`). | Nitro/SSR split and client plugin ordering. |
| Remix / React Router | High | P1 | React adapter with explicit browser init boundaries and route loader guidance. | Loader/action patterns can accidentally cross server/client boundary. |
| Tauri | High | P1 | Web runtime in WebView + optional Rust-side relay bridge for desktop sync scenarios. | Packaging/runtime differences across desktop targets. |
| Electron | High | P1 | Reuse web runtime in renderer + optional Node relay bridge in main process. | Multi-process lifecycle and secure IPC boundaries. |
| Capacitor (Ionic) | Medium | P2 | Reuse web runtime in WebView first, then mobile storage/perf hardening. | Mobile WebView storage consistency and background lifecycle constraints. |
| Flutter | Medium/Low | P2 | Separate adapter/SDK (likely not a thin wrapper) or protocol-level bridge. | Different runtime/language model (Dart), no direct reuse of TS hooks. |
| Integration | Priority | Focus |
| -------------------- | -------- | ---------------------------------------------- |
| Next.js (App Router) | P0 | Official web guide + SSR/client boundary docs |
| TanStack Start | P0 | React/web adapter docs + production example |
| Astro | P0 | Client-island starter + worker boot guidance |
| SvelteKit | P1 | Browser-only init reference app |
| Nuxt 3 | P1 | Client plugin/module integration path |
| Remix / React Router | P1 | Explicit browser init in route patterns |
| Tauri | P1 | WebView runtime + optional relay bridge |
| Electron | P1 | Renderer runtime + optional main-process relay |
| Capacitor (Ionic) | P2 | WebView-first runtime hardening |
| Flutter | P2 | Separate SDK/bridge exploration |

Main blockers to track:

- SSR/client boundaries and hydration order in framework runtimes.
- Worker lifecycle consistency across browser, edge, and desktop shells.
- Desktop packaging/process boundaries (Electron/Tauri).
- Mobile WebView storage consistency and background lifecycle.

Current recommendation:

Expand All @@ -63,15 +79,15 @@ Current recommendation:

Third-party runtime dependencies used by `@evolu/common`:

| Dependency | Why It Is Used |
| --- | --- |
| `@noble/ciphers` | Audited cryptographic ciphers for encryption flows. |
| `@noble/hashes` | Audited hash primitives used by protocol/auth internals. |
| `@scure/bip39` | Mnemonic handling for owner/account recovery flows. |
| Dependency | Why It Is Used |
| ----------------- | ------------------------------------------------------------- |
| `@noble/ciphers` | Audited cryptographic ciphers for encryption flows. |
| `@noble/hashes` | Audited hash primitives used by protocol/auth internals. |
| `@scure/bip39` | Mnemonic handling for owner/account recovery flows. |
| `disposablestack` | Disposable stack compatibility utility for cleanup semantics. |
| `kysely` | Typed SQL query builder integration. |
| `msgpackr` | Binary message serialization for protocol payloads. |
| `zod` | Runtime schema validation and parsing. |
| `kysely` | Typed SQL query builder integration. |
| `msgpackr` | Binary message serialization for protocol payloads. |
| `zod` | Runtime schema validation and parsing. |

Dependency policy:

Expand Down
2 changes: 1 addition & 1 deletion apps/relay/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
},
"devDependencies": {
"@evolu/tsconfig": "workspace:*",
"@types/node": "^25.3.2",
"@types/node": "^25.3.3",
"typescript": "^5.9.3"
},
"engines": {
Expand Down
Loading
Loading