Describe the bug
Summary
@tanstack/solid-form@2.0.0-alpha.1 declares peerDependencies: { "solid-js": ">=1.9.5" }.
That range has no upper bound, so it resolves happily against solid-js@2.0.0-rc.0 —
but the package cannot even be imported under Solid 2.
The sibling Solid packages have already landed Solid 2 builds and bound their ranges:
@tanstack/solid-router 2.0.0-rc.0 solid-js: >=2.0.0-0 <3.0.0
@tanstack/solid-start 2.0.0-rc.0 solid-js: >=2.0.0-0 <3.0.0
@tanstack/solid-query 6.0.0-rc.0 solid-js: >=2.0.0-rc.0 <3.0.0
@tanstack/solid-form 2.0.0-alpha.1 solid-js: >=1.9.5 <-- unbounded
@tanstack/solid-store 0.11.1 solid-js: ^1.6.0
solid-form is the last package blocking an otherwise complete Solid 2 upgrade
for us — router, start and query all work unmodified.
Reproduction
bun add solid-js@2.0.0-rc.0 @tanstack/solid-form@2.0.0-alpha.1
echo "import '@tanstack/solid-form'" > probe.ts
bun probe.ts
Result:
error: Cannot find module 'solid-js/web' from
node_modules/@tanstack/solid-store/dist/createStoreContext.js
Solid 2 removed the solid-js/web subpath (the DOM runtime moved to
@solidjs/web), and @tanstack/solid-store@0.11.1 — pulled in as a direct
dependency of solid-form — still imports from it. So the failure is at module
resolution, before any component renders.
On the peer warnings
The install does emit four incorrect peer dependency "solid-js@2.0.0-rc.0"
warnings, but none of them come from solid-form itself, whose >=1.9.5 is
satisfied. They come from:
@tanstack/solid-store@0.11.1 peer: ^1.6.0
vite-plugin-solid@2.11.14 peer: ^1.7.2
babel-preset-solid@1.9.12 peer: ^1.9.12
solid-refresh@0.6.3 peer: ^1.3
So the warnings point at the toolchain rather than at the package that is
actually incompatible, which makes the cause harder to find than it needs to be.
Possibly unintended: vite-plugin-solid is a runtime dependency
"dependencies": {
"@tanstack/solid-store": "^0.11.1",
"vite-plugin-solid": "^2.11.10",
"@tanstack/form-core": "2.0.0-alpha.1"
}
vite-plugin-solid is a build-time plugin, but it sits in dependencies, which
drags babel-preset-solid and solid-refresh into the runtime graph — three of
the four peer warnings above. Moving it to devDependencies (or peerDependencies
if consumers are meant to supply it) would remove that noise independently of
anything Solid 2 related.
Solid 2 port checklist
We have this working through a patches/ override. Every hunk maps to a
documented Solid 1 -> 2 change, so this doubles as a checklist:
@tanstack/solid-store (2 changes, both in createStoreContext):
createComponent imports from solid-js, not solid-js/web
- Context objects are the provider:
<Ctx.Provider> -> createComponent(Ctx, ...)
@tanstack/solid-form:
3. mergeProps renamed to merge
4. Same Ctx.Provider -> Ctx change in AppForm/Components
5. splitProps replaced by omit in FieldGroup/withFields
6. createRenderEffect is now two-arg (compute, apply); the single-arg form
throws MISSING_EFFECT_FN. Five call sites.
7. createMemo dropped its 3-arg form:
createMemo(fn, undefined, { equals: false }) -> createMemo(fn, { equals: false })
8. Writes from inside an owned scope need the opt-in — createFieldSelector
needs createSignal(initial, { equals, ownedWrite: true })
9. The JSX type moved from solid-js to @solidjs/web (type-only, 5 files)
Runtime files affected: SolidFormApi.lib.js, createField.lib.js,
AppForm/Components.lib.js, FieldGroup/withFields.lib.js.
Questions
- Is Solid 2 support planned for the
solid-form v2 line, or is v2 scoped to
the Form API changes (AppForm, FieldGroup, withFields), with Solid 2
support to follow separately?
- Independently of that — would you consider bounding the
solid-js peer range
on the current alphas? Right now the incompatibility surfaces as a missing
module deep in a transitive dependency rather than at install.
- Is
@tanstack/solid-store in scope for a Solid 2 release too? It is the
actual point of failure here, and solid-form depends on it directly.
Happy to open a PR for the Solid 2 changes if useful
Environment
solid-js 2.0.0-rc.0
@tanstack/solid-form 2.0.0-alpha.1
@tanstack/solid-store 0.11.1 (direct dependency of solid-form)
@tanstack/solid-router 2.0.0-rc.0 (works unmodified)
@tanstack/solid-query 6.0.0-rc.0 (works unmodified)
@tanstack/solid-start 2.0.0-rc.0 (works unmodified)
bun 1.3.14
Your minimal, reproducible example
Steps to reproduce
Expected behavior
How often does this bug happen?
None
Screenshots or Videos
No response
Platform
TanStack Form adapter
None
TanStack Form version
2.0.0-alpha.1
TypeScript version
No response
Additional context
No response
Describe the bug
Summary
@tanstack/solid-form@2.0.0-alpha.1declarespeerDependencies: { "solid-js": ">=1.9.5" }.That range has no upper bound, so it resolves happily against
solid-js@2.0.0-rc.0—but the package cannot even be imported under Solid 2.
The sibling Solid packages have already landed Solid 2 builds and bound their ranges:
solid-formis the last package blocking an otherwise complete Solid 2 upgradefor us — router, start and query all work unmodified.
Reproduction
Result:
Solid 2 removed the
solid-js/websubpath (the DOM runtime moved to@solidjs/web), and@tanstack/solid-store@0.11.1— pulled in as a directdependency of
solid-form— still imports from it. So the failure is at moduleresolution, before any component renders.
On the peer warnings
The install does emit four
incorrect peer dependency "solid-js@2.0.0-rc.0"warnings, but none of them come from
solid-formitself, whose>=1.9.5issatisfied. They come from:
So the warnings point at the toolchain rather than at the package that is
actually incompatible, which makes the cause harder to find than it needs to be.
Possibly unintended: vite-plugin-solid is a runtime dependency
vite-plugin-solidis a build-time plugin, but it sits independencies, whichdrags
babel-preset-solidandsolid-refreshinto the runtime graph — three ofthe four peer warnings above. Moving it to
devDependencies(orpeerDependenciesif consumers are meant to supply it) would remove that noise independently of
anything Solid 2 related.
Solid 2 port checklist
We have this working through a
patches/override. Every hunk maps to adocumented Solid 1 -> 2 change, so this doubles as a checklist:
@tanstack/solid-store(2 changes, both increateStoreContext):createComponentimports fromsolid-js, notsolid-js/web<Ctx.Provider>->createComponent(Ctx, ...)@tanstack/solid-form:3.
mergePropsrenamed tomerge4. Same
Ctx.Provider->Ctxchange inAppForm/Components5.
splitPropsreplaced byomitinFieldGroup/withFields6.
createRenderEffectis now two-arg(compute, apply); the single-arg formthrows
MISSING_EFFECT_FN. Five call sites.7.
createMemodropped its 3-arg form:createMemo(fn, undefined, { equals: false })->createMemo(fn, { equals: false })8. Writes from inside an owned scope need the opt-in —
createFieldSelectorneeds
createSignal(initial, { equals, ownedWrite: true })9. The
JSXtype moved fromsolid-jsto@solidjs/web(type-only, 5 files)Runtime files affected:
SolidFormApi.lib.js,createField.lib.js,AppForm/Components.lib.js,FieldGroup/withFields.lib.js.Questions
solid-formv2 line, or is v2 scoped tothe Form API changes (
AppForm,FieldGroup,withFields), with Solid 2support to follow separately?
solid-jspeer rangeon the current alphas? Right now the incompatibility surfaces as a missing
module deep in a transitive dependency rather than at install.
@tanstack/solid-storein scope for a Solid 2 release too? It is theactual point of failure here, and
solid-formdepends on it directly.Happy to open a PR for the Solid 2 changes if useful
Environment
Your minimal, reproducible example
Steps to reproduce
Expected behavior
How often does this bug happen?
None
Screenshots or Videos
No response
Platform
TanStack Form adapter
None
TanStack Form version
2.0.0-alpha.1
TypeScript version
No response
Additional context
No response