Local-first platform and TypeScript library
See the codeEvolu is a local-first platform and TypeScript library.
For detailed information and usage examples, please visit evolu.dev.
The Evolu community is on GitHub Discussions, where you can ask questions and voice ideas.
To chat with other community members, you can join the Evolu Discord.
Evolu monorepo uses the latest Node.js LTS release and
pnpm. With nvm, install the Node.js version selected by
.nvmrc:
nvm install
Install Corepack independently of Node.js and enable the pnpm version pinned in
package.json:
npm install --global corepack@latest
corepack enable pnpm
Install dependencies:
pnpm install
The playgrounds in apps/web, the examples, and the integration, bundle and
E2E tests load packages/sqlite-wasm/wasm/sqlite3.wasm. It is never committed,
so download it:
pnpm sqlite-wasm:download
It takes the wasm from the published @evolu/sqlite-wasm and writes it only if
its sha256 is the pinned one. The playgrounds and tests fail when the file is
missing or is not the pinned wasm. The examples don't check it, because they are
templates to copy.
When no release holds the pinned wasm yet, the download says so. Then build it
with an emsdk that
has Emscripten 6.0.3 installed and activated, as the
@evolu/sqlite-wasm README
describes:
EMSDK=/path/to/emsdk node packages/sqlite-wasm/scripts/build-wasm.mts
Install Playwright browsers for local test and verify runs:
pnpm playwright:install
Run the browser install step again after Playwright updates or if the browser cache was removed.
Build scripts
pnpm build - Build packages (required once after clone/pull for IDE types)pnpm build:docs - Build doc (required once after clone/pull)pnpm build:web - Build docs and webWeb build notes
ulimit -n is not enough):
sudo launchctl limit maxfiles 262144 262144Start dev
pnpm dev - Start relay and web serverspnpm relay - Start relay server only (for mobile development)pnpm ios - Run iOS example (start relay first)pnpm android - Run Android example (start relay first)Examples
Note: Examples use the local packages. To try them with the published packages, run
pnpm examples:toggle-depsand choose production; choose development to switch back.
pnpm examples:react-nextjs:dev - Dev server for React Next.js examplepnpm examples:react-vite-pwa:dev - Dev server for React Vite PWA examplepnpm examples:svelte-vite-pwa:dev - Dev server for Svelte Vite PWA examplepnpm examples:vue-vite-pwa:dev - Dev server for Vue Vite PWA examplepnpm examples:build - Build all examplesLinting
pnpm lint - Run all linterspnpm lint:oxlint - Lint code with Oxlintpnpm lint:sherif - Lint monorepo structure with SherifFormatting
pnpm format - Write Prettier formatting changespnpm format:check - Check Prettier formatting without writing changesTesting
pnpm playwright:install - Install browsers required by Playwright-based Vitest projectspnpm test - Run all unit, integration, bundle, and documentation-example testspnpm test:node "<test-file-or-glob>" - Run selected native Node tests with coveragepnpm test:unit - Run all unit tests with test-file durations and coveragepnpm test:integration - Run Node.js and browser integration testspnpm test:integration:nodejs - Run Node.js integration tests without source coveragepnpm test:integration:browsers - Run browser integrations in Chromium with coverage and in Firefox and WebKit for compatibilitypnpm test:bundle - Run production bundle and tree-shaking testspnpm test:bundle:update - Rebuild common and regenerate bundle-size snapshotspnpm test:jsdoc - Compile and run documentation examplespnpm test:sqlite-wasm - Run the @evolu/sqlite-wasm unit and Node.js integration tests, failing below 100% line, branch or function coveragepnpm check:sqlite-wasm - Check that the generated @evolu/sqlite-wasm C API and constants match their pins and metadataUnit, integration, and bundle test suites randomize execution order and print a seed that reproduces the same ordering. See Randomized test order for the rationale and replay commands.
See the testing convention for test placement, runner, and assertion guidance.
Release
pnpm changeset - Describe changes for release logVerify
pnpm verify - Run all checks (build, lint, test) locally; CI runs them on pull requests and pushes to main(top 24 of 35)
10,162 followers · starred Aug 2023
1,314 followers · starred May 2023
3,743 followers · starred Nov 2025
1,937 followers · starred Feb 2023
Local-first platform and TypeScript library
See the codeEvolu is a local-first platform and TypeScript library.
For detailed information and usage examples, please visit evolu.dev.
The Evolu community is on GitHub Discussions, where you can ask questions and voice ideas.
To chat with other community members, you can join the Evolu Discord.
Evolu monorepo uses the latest Node.js LTS release and
pnpm. With nvm, install the Node.js version selected by
.nvmrc:
nvm install
Install Corepack independently of Node.js and enable the pnpm version pinned in
package.json:
npm install --global corepack@latest
corepack enable pnpm
Install dependencies:
pnpm install
The playgrounds in apps/web, the examples, and the integration, bundle and
E2E tests load packages/sqlite-wasm/wasm/sqlite3.wasm. It is never committed,
so download it:
pnpm sqlite-wasm:download
It takes the wasm from the published @evolu/sqlite-wasm and writes it only if
its sha256 is the pinned one. The playgrounds and tests fail when the file is
missing or is not the pinned wasm. The examples don't check it, because they are
templates to copy.
When no release holds the pinned wasm yet, the download says so. Then build it
with an emsdk that
has Emscripten 6.0.3 installed and activated, as the
@evolu/sqlite-wasm README
describes:
EMSDK=/path/to/emsdk node packages/sqlite-wasm/scripts/build-wasm.mts
Install Playwright browsers for local test and verify runs:
pnpm playwright:install
Run the browser install step again after Playwright updates or if the browser cache was removed.
Build scripts
pnpm build - Build packages (required once after clone/pull for IDE types)pnpm build:docs - Build doc (required once after clone/pull)pnpm build:web - Build docs and webWeb build notes
ulimit -n is not enough):
sudo launchctl limit maxfiles 262144 262144Start dev
pnpm dev - Start relay and web serverspnpm relay - Start relay server only (for mobile development)pnpm ios - Run iOS example (start relay first)pnpm android - Run Android example (start relay first)Examples
Note: Examples use the local packages. To try them with the published packages, run
pnpm examples:toggle-depsand choose production; choose development to switch back.
pnpm examples:react-nextjs:dev - Dev server for React Next.js examplepnpm examples:react-vite-pwa:dev - Dev server for React Vite PWA examplepnpm examples:svelte-vite-pwa:dev - Dev server for Svelte Vite PWA examplepnpm examples:vue-vite-pwa:dev - Dev server for Vue Vite PWA examplepnpm examples:build - Build all examplesLinting
pnpm lint - Run all linterspnpm lint:oxlint - Lint code with Oxlintpnpm lint:sherif - Lint monorepo structure with SherifFormatting
pnpm format - Write Prettier formatting changespnpm format:check - Check Prettier formatting without writing changesTesting
pnpm playwright:install - Install browsers required by Playwright-based Vitest projectspnpm test - Run all unit, integration, bundle, and documentation-example testspnpm test:node "<test-file-or-glob>" - Run selected native Node tests with coveragepnpm test:unit - Run all unit tests with test-file durations and coveragepnpm test:integration - Run Node.js and browser integration testspnpm test:integration:nodejs - Run Node.js integration tests without source coveragepnpm test:integration:browsers - Run browser integrations in Chromium with coverage and in Firefox and WebKit for compatibilitypnpm test:bundle - Run production bundle and tree-shaking testspnpm test:bundle:update - Rebuild common and regenerate bundle-size snapshotspnpm test:jsdoc - Compile and run documentation examplespnpm test:sqlite-wasm - Run the @evolu/sqlite-wasm unit and Node.js integration tests, failing below 100% line, branch or function coveragepnpm check:sqlite-wasm - Check that the generated @evolu/sqlite-wasm C API and constants match their pins and metadataUnit, integration, and bundle test suites randomize execution order and print a seed that reproduces the same ordering. See Randomized test order for the rationale and replay commands.
See the testing convention for test placement, runner, and assertion guidance.
Release
pnpm changeset - Describe changes for release logVerify
pnpm verify - Run all checks (build, lint, test) locally; CI runs them on pull requests and pushes to main(top 24 of 35)
10,162 followers · starred Aug 2023
1,314 followers · starred May 2023
3,743 followers · starred Nov 2025
1,937 followers · starred Feb 2023