Before submitting
Area
apps/server
Steps to reproduce
On macOS with Node 24 / npm 11, run the published CLI through npm exec or npx from a clean install context:
rm -rf /tmp/t3-asEffect-cache /tmp/t3-asEffect-state
npm --cache /tmp/t3-asEffect-cache exec --package t3@0.0.23 -- \
t3 serve --base-dir /tmp/t3-asEffect-state --host 127.0.0.1 --port 3999 --no-browser
I see the same behavior with the current nightly:
rm -rf /tmp/t3-nightly-asEffect-cache /tmp/t3-nightly-asEffect-state
npm --cache /tmp/t3-nightly-asEffect-cache exec --package t3@nightly -- \
t3 serve --base-dir /tmp/t3-nightly-asEffect-state --host 127.0.0.1 --port 3999 --no-browser
This also reproduces with a fresh state directory, so it does not appear to be a migrated local state problem.
Expected behavior
The published t3 CLI should start the server successfully from a clean npx / npm exec install, using the same Effect package family versions that the monorepo catalog and published package metadata intend.
Actual behavior
The CLI exits immediately during startup:
[14:04:58.797] ERROR (#1): TypeError: state.value.asEffect is not a function
The failure appears to come from npm dependency resolution producing a mixed Effect runtime. In a clean npm exec --package t3@0.0.23 install, the package metadata declares/publishes:
"effect": "4.0.0-beta.59",
"@effect/platform-node": "4.0.0-beta.59",
"overrides": {
"@effect/platform-node-shared": "4.0.0-beta.59",
"effect": "4.0.0-beta.59"
}
But the actual install tree can still resolve a root/transitive @effect/platform-node-shared@4.0.0-beta.66 / effect@4.0.0-beta.66 alongside t3's nested effect@4.0.0-beta.59. My understanding is that npm does not apply a dependency package's own overrides as if they were root-project overrides, so the published guard in t3/package.json is not enough for the npx / npm exec --package t3@... install shape.
I verified the version-skew hypothesis by forcing the Effect packages at the exec root. This starts successfully:
rm -rf /tmp/t3-forced-effect-cache /tmp/t3-forced-effect-state
npm --cache /tmp/t3-forced-effect-cache exec \
--package t3@0.0.23 \
--package effect@4.0.0-beta.59 \
--package @effect/platform-node-shared@4.0.0-beta.59 \
-- \
t3 serve --base-dir /tmp/t3-forced-effect-state --host 127.0.0.1 --port 3999 --no-browser
The same forced-package workaround also makes the current t3@nightly start.
Impact
Blocks work completely
Version or commit
t3@0.0.23 / tag v0.0.23 (3c32bc8fd1f5970e65988e36937cb8e2921437f9)
Also reproduced with t3@0.0.24-nightly.20260512.271.
Environment
macOS, Node v24.14.0, npm 11.9.0, launching via npm exec --package t3@... / npx.
Logs or stack traces
$ npm --cache /tmp/t3-asEffect-cache exec --package t3@0.0.23 -- \
t3 serve --base-dir /tmp/t3-asEffect-state --host 127.0.0.1 --port 3999 --no-browser
[13:48:33.120] ERROR (#1): TypeError: state.value.asEffect is not a function
Clean install tree evidence:
t3@0.0.23
effect@4.0.0-beta.59
root/transitive install also contains:
effect@4.0.0-beta.66
@effect/platform-node-shared@4.0.0-beta.66
Related issue/PR search:
Screenshots, recordings, or supporting files
None.
Workaround
Force the Effect packages at the npm exec root to the version declared by the published t3 package:
effect_version="$(npm view t3@latest dependencies.effect)"
npm exec \
--package "t3@latest" \
--package "effect@${effect_version}" \
--package "@effect/platform-node-shared@${effect_version}" \
-- \
t3 serve --host 127.0.0.1 --port 3773 --no-browser
A durable fix might need the published package/install path to avoid relying on dependency-level overrides, or otherwise ensure @effect/platform-node-shared cannot float beyond the Effect version used by the bundled CLI.
Before submitting
Area
apps/server
Steps to reproduce
On macOS with Node 24 / npm 11, run the published CLI through
npm execornpxfrom a clean install context:rm -rf /tmp/t3-asEffect-cache /tmp/t3-asEffect-state npm --cache /tmp/t3-asEffect-cache exec --package t3@0.0.23 -- \ t3 serve --base-dir /tmp/t3-asEffect-state --host 127.0.0.1 --port 3999 --no-browserI see the same behavior with the current nightly:
rm -rf /tmp/t3-nightly-asEffect-cache /tmp/t3-nightly-asEffect-state npm --cache /tmp/t3-nightly-asEffect-cache exec --package t3@nightly -- \ t3 serve --base-dir /tmp/t3-nightly-asEffect-state --host 127.0.0.1 --port 3999 --no-browserThis also reproduces with a fresh state directory, so it does not appear to be a migrated local state problem.
Expected behavior
The published
t3CLI should start the server successfully from a cleannpx/npm execinstall, using the same Effect package family versions that the monorepo catalog and published package metadata intend.Actual behavior
The CLI exits immediately during startup:
[14:04:58.797] ERROR (#1): TypeError: state.value.asEffect is not a functionThe failure appears to come from npm dependency resolution producing a mixed Effect runtime. In a clean
npm exec --package t3@0.0.23install, the package metadata declares/publishes:But the actual install tree can still resolve a root/transitive
@effect/platform-node-shared@4.0.0-beta.66/effect@4.0.0-beta.66alongsidet3's nestedeffect@4.0.0-beta.59. My understanding is that npm does not apply a dependency package's ownoverridesas if they were root-project overrides, so the published guard int3/package.jsonis not enough for thenpx/npm exec --package t3@...install shape.I verified the version-skew hypothesis by forcing the Effect packages at the exec root. This starts successfully:
rm -rf /tmp/t3-forced-effect-cache /tmp/t3-forced-effect-state npm --cache /tmp/t3-forced-effect-cache exec \ --package t3@0.0.23 \ --package effect@4.0.0-beta.59 \ --package @effect/platform-node-shared@4.0.0-beta.59 \ -- \ t3 serve --base-dir /tmp/t3-forced-effect-state --host 127.0.0.1 --port 3999 --no-browserThe same forced-package workaround also makes the current
t3@nightlystart.Impact
Blocks work completely
Version or commit
t3@0.0.23/ tagv0.0.23(3c32bc8fd1f5970e65988e36937cb8e2921437f9)Also reproduced with
t3@0.0.24-nightly.20260512.271.Environment
macOS, Node
v24.14.0, npm11.9.0, launching vianpm exec --package t3@.../npx.Logs or stack traces
Clean install tree evidence:
Related issue/PR search:
node-ptyinstall failures, not this crash.Screenshots, recordings, or supporting files
None.
Workaround
Force the Effect packages at the
npm execroot to the version declared by the publishedt3package:A durable fix might need the published package/install path to avoid relying on dependency-level
overrides, or otherwise ensure@effect/platform-node-sharedcannot float beyond the Effect version used by the bundled CLI.