[v2] solid-form 2.0.0-alpha.1 cannot be imported under Solid 2, but its peer range permits it
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 6.7k
- Forks
- 682
- Avg merge
- 5d 18h
- Merged PRs (30d)
- 7
Description
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):
createComponentimports fromsolid-js, notsolid-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-formv2 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-jspeer 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-storein scope for a Solid 2 release too? It is the
actual point of failure here, andsolid-formdepends 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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the Bun reproduction and inspect the SolidFormApi.lib.js, createField.lib.js, AppForm/Components.lib.js, and FieldGroup/withFields.lib.js runtime files, plus the package dependency metadata. Compare the listed Solid 2 port checklist against the corresponding solid-store createStoreContext changes. Done means solid-form can be imported under Solid 2 without the missing subpath failure and its peer range no longer advertises unsupported versions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100