Skip to content

Upgrade Effect to 4.0.0-rc.108 - #98

Merged
SandroMaglione merged 2 commits into
mainfrom
codex/upgrade-effect-rc
Aug 13, 2026
Merged

Upgrade Effect to 4.0.0-rc.108#98
SandroMaglione merged 2 commits into
mainfrom
codex/upgrade-effect-rc

Conversation

@SandroMaglione

Copy link
Copy Markdown
Member

Summary

  • upgrade effect, @effect/vitest, and @effect/atom-react from 4.0.0-beta.107 to 4.0.0-rc.108
  • refresh the root and standalone example lockfiles
  • add a minor changeset for @typeonce/effect-machine
  • no source compatibility changes were required

Changeset

  • Added or updated for a library or package-metadata change
  • Not required because this PR does not change src/ or package.json

Validation

  • pnpm check
  • Relevant example checks, when examples changed
  • Reviewed the automated type-performance report, when the public TypeScript API or inference changed
  • Reviewed the automated runtime-performance report, when runtime behavior changed

Local performance validation also passed with pnpm perf:types (all enforced instantiation budgets) and pnpm perf:runtime (completed successfully on Node 24.16.0 / Apple M1). The GitHub workflows will provide the base-versus-PR comparisons.

@github-actions

github-actions Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Type performance

Measured with TypeScript 6.0.3 and skipLibCheck=true.

Scenario Base PR Difference
Effect only 55 55 0 (0.0%)
Import effect-machine 55 55 0 (0.0%)
Machine.defineStates (3 states) 2,965 2,965 0 (0.0%)
Machine.make (3 states, 2 events) 8,715 8,715 0 (0.0%)
machine.handle (3 states, 2 transitions) 23,492 23,492 0 (0.0%)
machine.handle (depth 8) 117,075 117,075 0 (0.0%)
machine.handle (depth 12) 129,713 129,713 0 (0.0%)
machine.handle (depth 16) 145,055 145,055 0 (0.0%)
machine.handle (depth 24) 183,851 183,851 0 (0.0%)
machine.handle (wide depth 16) 214,189 214,189 0 (0.0%)
machine.handle (parallel/history/choice) 132,667 132,667 0 (0.0%)
machine.handle (4 successive calls) 128,674 128,674 0 (0.0%)
machine exact input/output/error/services 110,584 110,584 0 (0.0%)
execution adapter readiness 127,854 127,854 0 (0.0%)

Marginal instantiations are measured against the matching setup without that API call:

Scenario Base PR Difference
Import effect-machine 0 0 0
Machine.defineStates (3 states) 2,910 2,910 0 (0.0%)
Machine.make (3 states, 2 events) 5,742 5,742 0 (0.0%)
machine.handle (3 states, 2 transitions) 14,777 14,777 0 (0.0%)
machine.handle (depth 8) 109,601 109,601 0 (0.0%)
machine.handle (depth 12) 121,039 121,039 0 (0.0%)
machine.handle (depth 16) 135,181 135,181 0 (0.0%)
machine.handle (depth 24) 171,577 171,577 0 (0.0%)
machine.handle (wide depth 16) 202,224 202,224 0 (0.0%)
machine.handle (parallel/history/choice) 114,331 114,331 0 (0.0%)
machine.handle (4 successive calls) 113,703 113,703 0 (0.0%)
machine exact input/output/error/services 100,670 100,670 0 (0.0%)
execution adapter readiness 102,092 102,092 0 (0.0%)
Check times (informational)
Scenario Base PR
Effect only 0.05s 0.03s
Import effect-machine 0.03s 0.03s
Machine.defineStates (3 states) 0.09s 0.09s
Machine.make (3 states, 2 events) 0.15s 0.15s
machine.handle (3 states, 2 transitions) 0.20s 0.20s
machine.handle (depth 8) 0.46s 0.49s
machine.handle (depth 12) 0.53s 0.51s
machine.handle (depth 16) 0.54s 0.54s
machine.handle (depth 24) 0.64s 0.63s
machine.handle (wide depth 16) 0.69s 0.70s
machine.handle (parallel/history/choice) 0.56s 0.57s
machine.handle (4 successive calls) 0.52s 0.54s
machine exact input/output/error/services 0.46s 0.47s
execution adapter readiness 0.51s 0.52s

Type instantiations are the comparison metric. Check time varies with runner load and is informational only.

@github-actions

Copy link
Copy Markdown
Contributor

Runtime performance

Median of 5 independent benchmark processes on AMD EPYC 7763 64-Core Processor with Node v24.18.0.

Pull request baseline

Scenario Effect Machine XState 5 XState 6 alpha
Plan counter transitions 132,585 transitions/s 134,424 transitions/s 283,917 transitions/s
Drain burst with terminal fence 513,109 increments/s 393,669 increments/s 540,236 increments/s
Drain burst with a change observer 471,808 increments/s 391,108 increments/s 538,743 increments/s
Lookup and send to one child 408,153 increments/s 386,967 increments/s 506,539 increments/s
Start and stop a machine 173,310 machines/s 187,617 machines/s 184,843 machines/s
Start and stop a parent with one child 36,819 families/s 70,636 families/s 47,059 families/s
Plan transitions through a compound state 119,680 transitions/s
Plan transitions through parallel regions 91,389 transitions/s
Drain burst through a compound state 502,861 events/s 344,262 events/s 514,198 events/s
Drain burst through two parallel regions 465,777 events/s 261,562 events/s 430,419 events/s
Drain a compound-state burst with a change observer 458,241 events/s

Effect runtime reference points

Scenario Effect Machine Effect runtime primitives
Start and stop a raw generic process 16,886 processes/s
Start and stop a raw compiled process 67,259 processes/s
Start and interrupt a suspended fiber 166,611 fibers/s
Start and stop a queue worker 114,850 workers/s
Start and stop an actor shell 106,180 actors/s
Start and stop two actor shells 66,278 families/s
Update an owner-only mutable snapshot 316,856,781 updates/s
Update a synchronized snapshot 1,529,342 updates/s
Create, resolve, and await a terminal latch 1,456,758 latches/s
Memory profile Effect Machine XState 5 XState 6 alpha Effect runtime primitives
Idle machine 1.5 KiB 3.8 KiB 1.5 KiB
Raw generic managed process 12.7 KiB
Raw compiled process 2.8 KiB
Two independent idle machines 3.0 KiB 7.3 KiB 2.7 KiB
Idle parent with one child 4.8 KiB 5.5 KiB 3.4 KiB
Parent with observed child registry 9.0 KiB
Parent with observed invoked child snapshots 5.0 KiB
Suspended Effect fiber 0.6 KiB
Effect queue with waiting fiber 2.8 KiB
Effect mailbox actor shell 3.2 KiB
Two Effect actor shells 6.8 KiB

Effect Machine change from base

Metric Base Base variability PR PR variability Difference
Plan counter transitions 124,936 transitions/s 3.0% MAD 132,585 transitions/s 1.5% MAD +6.1%
Drain burst with terminal fence 486,632 increments/s 1.8% MAD 513,109 increments/s 2.8% MAD +5.4%
Drain burst with a change observer 453,124 increments/s 1.9% MAD 471,808 increments/s 2.2% MAD +4.1%
Lookup and send to one child 390,692 increments/s 2.5% MAD 408,153 increments/s 0.6% MAD +4.5%
Start and stop a machine 172,384 machines/s 2.5% MAD 173,310 machines/s 0.5% MAD +0.5%
Start and stop a parent with one child 33,282 families/s 3.0% MAD 36,819 families/s 5.6% MAD +10.6%
Plan transitions through a compound state 118,365 transitions/s 0.3% MAD 119,680 transitions/s 0.8% MAD +1.1%
Plan transitions through parallel regions 92,762 transitions/s 0.6% MAD 91,389 transitions/s 1.7% MAD -1.5%
Drain burst through a compound state 470,999 events/s 5.0% MAD 502,861 events/s 0.5% MAD +6.8%
Drain burst through two parallel regions 460,354 events/s 4.4% MAD 465,777 events/s 0.8% MAD +1.2%
Drain a compound-state burst with a change observer 454,892 events/s 5.2% MAD 458,241 events/s 1.6% MAD +0.7%
Idle machine heap per unit 1.5 KiB 0.1% MAD 1.5 KiB 0.1% MAD -0.1%
Raw generic managed process heap per unit 12.6 KiB 0.0% MAD 12.7 KiB 0.0% MAD +0.0%
Raw compiled process heap per unit 2.8 KiB 0.1% MAD 2.8 KiB 0.0% MAD -0.1%
Two independent idle machines heap per unit 3.0 KiB 0.0% MAD 3.0 KiB 0.0% MAD -0.0%
Idle parent with one child heap per unit 4.8 KiB 0.0% MAD 4.8 KiB 0.0% MAD -0.0%
Parent with observed child registry heap per unit 9.0 KiB 0.0% MAD 9.0 KiB 0.0% MAD +0.0%
Parent with observed invoked child snapshots heap per unit 5.0 KiB 0.0% MAD 5.0 KiB 0.0% MAD +0.0%

Effect runtime reference change from base

Metric Base Base variability PR PR variability Difference
Start and stop a raw generic process 17,007 processes/s 1.7% MAD 16,886 processes/s 1.1% MAD -0.7%
Start and stop a raw compiled process 67,995 processes/s 0.7% MAD 67,259 processes/s 2.2% MAD -1.1%
Start and interrupt a suspended fiber 164,690 fibers/s 0.5% MAD 166,611 fibers/s 0.5% MAD +1.2%
Start and stop a queue worker 116,185 workers/s 1.5% MAD 114,850 workers/s 2.0% MAD -1.1%
Start and stop an actor shell 107,446 actors/s 1.1% MAD 106,180 actors/s 0.6% MAD -1.2%
Start and stop two actor shells 67,714 families/s 0.4% MAD 66,278 families/s 0.7% MAD -2.1%
Update an owner-only mutable snapshot 316,856,781 updates/s 0.0% MAD 316,856,781 updates/s 0.0% MAD 0.0%
Update a synchronized snapshot 1,564,975 updates/s 0.7% MAD 1,529,342 updates/s 1.2% MAD -2.3%
Create, resolve, and await a terminal latch 1,452,853 latches/s 0.6% MAD 1,456,758 latches/s 2.9% MAD +0.3%
Versions and interpretation
  • Effect Machine: 0.5.1
  • XState 5: 5.32.5
  • XState 6 alpha: 6.0.0-alpha.36
  • Effect runtime primitives: 4.0.0-rc.108

Higher throughput is better; lower heap is better. Variability is the median absolute deviation across independent processes, relative to their median. Runtime measurements on shared GitHub-hosted hardware remain informational, so small differences should be confirmed across multiple workflow runs.

@SandroMaglione
SandroMaglione merged commit e786835 into main Aug 13, 2026
9 checks passed
@SandroMaglione
SandroMaglione deleted the codex/upgrade-effect-rc branch August 13, 2026 07:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant