Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 5 additions & 2 deletions .changeset/config.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
{
"$schema": "https://unpkg.com/@changesets/config@2.1.1/schema.json",
"$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [],
"linked": [],
"access": "restricted",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": ["web", "@example/*"]
"ignore": ["web", "@example/*"],
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
"onlyUpdatePeerDependentsWhenOutOfRange": true
}
}
2 changes: 1 addition & 1 deletion .changeset/gentle-pumas-eat.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"@evolu/react": major
"@evolu/vue": major
"@evolu/web": major
"@evolu/relay": major
"relay": major
---

Updated minimum Node.js version from 22 to 24 (current LTS)
25 changes: 25 additions & 0 deletions .changeset/pre.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"mode": "pre",
"tag": "next",
"initialVersions": {
"relay": "2.0.8",
"web": "2.0.0",
"@example/angular-vite-pwa": "0.0.0",
"@example/react-electron": "0.0.0",
"@example/react-expo": "1.0.0",
"@example/react-nextjs": "0.1.0",
"@example/react-vite-pwa": "0.0.0",
"@example/svelte-vite-pwa": "0.0.0",
"@example/vue-vite-pwa": "0.0.0",
"@evolu/common": "7.4.1",
"@evolu/nodejs": "2.4.0",
"@evolu/react": "10.4.0",
"@evolu/react-native": "14.3.0",
"@evolu/react-web": "2.4.0",
"@evolu/svelte": "2.4.0",
"@evolu/typescript-config": "0.0.2",
"@evolu/vue": "1.4.0",
"@evolu/web": "2.4.0"
},
"changesets": []
}
7 changes: 5 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,13 @@ bun run verify

## Upstream Sync Rules

- keep compatibility with `upstream/common-v8` unless an explicit fork decision exists
- keep compatibility with `upstream/main` unless an explicit fork decision exists
- avoid dependency downgrades during sync work
- keep fork-specific behavior isolated and documented
- always run final gate before sync PR: `bun verify`
- always run final sync guards before sync PR:
- `bun run sync:guard:upstream:strict`
- `bun run sync:guard:common-v8:strict` (deprecated alias, temporary)
- always run final gate before sync PR: `bun run verify:fast`

## Pull Requests

Expand Down
74 changes: 49 additions & 25 deletions UPSTREAM_DIFF.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,59 @@
# Evolu Plan B vs Upstream Evolu (High-Level)
# Evolu Plan B vs Upstream Evolu

This document summarizes the main differences between `SQLoot/evolu-plan-b` and upstream `evoluhq/evolu`.
This document tracks the current upstream sync baseline and the remaining fork
delta for `SQLoot/evolu-plan-b`.

Scope: high-level product and engineering deltas, not a full commit-by-commit changelog.
## Canonical References

## What Is Different
- upstream baseline: `upstream/main@e201eeb5`
- common-v8 merge anchor in upstream: `5aed29ff`
- current fork main after this sync wave: `origin/main` plus post-wave commits from
`sync/upstream-main-2026-04-03`

| Area | Plan B Delta | Why |
| --- | --- | --- |
| Tooling baseline | Bun-first monorepo workflows (`bun install`, `bun run ...`) with Turborepo orchestration. | Faster local workflows and a single runtime/tooling story. |
| Formatting and linting | Biome-first formatting/linting policy. | Reduce tooling complexity and keep style/lint fast and consistent. |
| Upstream sync process | Added sync guard tooling and explicit compatibility tracking for `common-v8` sync waves. | Keep upstream parity while avoiding accidental regressions in fork-specific work. |
| Coverage governance | Added file-level coverage gates for critical local-first paths (`Sync`, `Db`, `Worker`, `DbWorker`, etc.). | Enforce reliability on highest-risk runtime paths before merges. |
| Bun runtime adapter | Added Bun-specific worker/db adapter package (`@evolu/bun`, currently private). | Native Bun runtime support and experimentation without changing upstream APIs. |
| Test expansion | Extra tests for sync/worker/sqlite/refactor edge cases, including runtime adapter races (`DbWorker initPromise` cleanup, Relay WS lifecycle/broadcast flows). | Protect against regressions during aggressive sync and refactor work. |
## Post-Merge Upstream Commits Synced In This Wave

## What Is Intentionally the Same
- `a3cf8bf3` Rename `@evolu/relay` package to `relay`
- `9143c9f4` Bump changesets schema; remove assemble patch
- `aa5cbbe8` Update `bun.lock`
- `e201eeb5` Create `.changeset/pre.json`

| Area | Compatibility Target |
| --- | --- |
| Public local-first API | Keep API compatibility with upstream where possible. |
| Protocol and schema direction | Follow upstream `common-v8` refactor direction and naming. |
| Core behavior | Preserve upstream semantics unless explicitly documented as fork-only behavior. |
## Current Audit Summary

## What Is Extra in Plan B
### Root / Tooling

- Integration coverage dashboards/gates in fork workflow.
- Bun-focused adapter experiments and tests.
- SQLoot-specific maintenance/docs structure for sync operations.
- `same`: changesets schema/pre mode now match upstream post-merge baseline.
- `merge-both`: relay naming follows upstream `relay`, while Bun-first scripts,
coverage gates and fork-specific maintenance scripts remain intact.
- `fork-intentional`: sync guard is generalized to `upstream/main`, but the
legacy `common-v8` command stays as a deprecated alias for one wave.

## Non-Goals
### Runtime / API Parity

- This fork is not intended to fragment protocol behavior from upstream.
- This file is not a replacement for release notes.
- No post-merge upstream code delta was found in:
`packages/common`, `packages/nodejs`, `packages/web`, `packages/react`,
`packages/react-web`, `packages/react-native`, `packages/vue`, `packages/svelte`.
- Result for this wave: no additional runtime/API cherry-picks are required
before rebasing SQLoot compat metadata to the new upstream baseline.

### Remaining Fork Delta

- `fork-intentional`
- Bun-first monorepo workflow and dependency policy.
- Extra coverage gates and compat tree-shaking checks.
- Bun-specific adapter/runtime experimentation and related tests.
- SQLoot-facing maintenance/docs structure.
- `fork-suspect`
- None identified by this post-merge sync sweep in compat-relevant package
paths.
- `deferred`
- Broader historical fork-vs-upstream drift outside this post-merge wave is
still handled by targeted sync work, not by this summary file.

## Maintainer Rules

- Treat `upstream/main` as the canonical semantic baseline.
- Treat `evolu-plan-b/main` as the operational baseline for downstream compat
consumers.
- If a compat-relevant package diff is not explained by upstream history or an
explicit fork decision, classify it as `fork-suspect` and fix it in this repo
before propagating it downstream.
2 changes: 1 addition & 1 deletion apps/relay/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# @evolu/relay
# relay

## 2.0.8

Expand Down
12 changes: 6 additions & 6 deletions apps/relay/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ FROM base AS builder
WORKDIR /app
COPY . .

# Generate a partial monorepo with a pruned lockfile for the relay workspace
RUN bunx turbo@2.8.2 prune @evolu/relay --docker
# Generate a partial monorepo for the relay workspace.
RUN bunx turbo@2.8.2 prune relay --docker

# ------------------------------------------------------------
# Installer stage - build the pruned workspace
Expand All @@ -22,10 +22,10 @@ RUN bun install --frozen-lockfile
COPY --from=builder /app/out/full/ .
# Ensure README.md is available at the root for the build process
COPY --from=builder /app/README.md ./README.md
RUN bunx turbo@2.8.2 run build
RUN bunx turbo@2.8.2 run build --filter relay

# Prune dev dependencies to create a production-ready environment
RUN bun install --production
# Keep only production dependencies for relay runtime.
RUN bun install --frozen-lockfile --production --filter relay

# ------------------------------------------------------------
# Runner stage - minimal runtime image
Expand Down Expand Up @@ -59,4 +59,4 @@ HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
CMD bun -e "const net=require('net');const s=net.connect(4000,'127.0.0.1',()=>{s.end();process.exit(0)});s.on('error',()=>process.exit(1))"

# Start the application
CMD ["bun", "apps/relay/dist/index.js"]
CMD ["bun", "apps/relay/dist/index.js"]
2 changes: 1 addition & 1 deletion apps/relay/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "@evolu/relay",
"name": "relay",
"version": "2.0.8",
"private": true,
"type": "module",
Expand Down
35 changes: 16 additions & 19 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading