Provides SolidJS 2.0 beta knowledge: API renames like Loading/Errored, reactivity batching/flush, async createMemo, draft stores, control flow updates. Load for post-1.8 SolidJS tasks.
npx claudepluginhub nevaberry/nevaberry-plugins --plugin solidjs-knowledge-patchThis skill uses the workspace's default tool permissions.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Implements structured self-debugging workflow for AI agent failures: capture errors, diagnose patterns like loops or context overflow, apply contained recoveries, and generate introspection reports.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Claude's baseline knowledge covers SolidJS through 1.8.x. This skill provides features from 1.9 (Sep 2024) through the 2.0 beta (Mar 2026), plus SolidStart 1.0-1.1.
| 1.x | 2.0 |
|---|---|
Suspense | Loading |
ErrorBoundary | Errored |
mergeProps | merge |
splitProps | omit |
unwrap | snapshot |
onMount | onSettled |
classList | class (object/array) |
createResource | async createMemo + Loading |
createSelector | createProjection |
createComputed | split createEffect or createSignal(fn) |
batch() | flush() |
use:directive | ref={directive(opts)} |
Context.Provider | <Context value={...}> |
| 1.x | 2.0 |
|---|---|
solid-js/web | @solidjs/web |
solid-js/store | solid-js (stores merged into core) |
solid-js/h | @solidjs/h |
solid-js/html | @solidjs/html |
solid-js/universal | @solidjs/universal |
const [count, setCount] = createSignal(0);
setCount(1);
count(); // still 0 -- reads return last committed value
flush();
count(); // now 1
See references/reactivity-effects.md for split effects, onSettled, dev warnings.
| Pattern | Code |
|---|---|
| Fetch data | const user = createMemo(() => fetchUser(id())); |
| Loading boundary | <Loading fallback={<Spinner />}><Profile /></Loading> |
| Revalidation check | const pending = () => isPending(() => users()); |
| Peek stale value | const val = () => latest(signal); |
| Refresh after mutation | refresh(derivedStore); |
See references/async-actions.md for actions, optimistic updates, refresh.
// Draft-first setter (produce-style)
const [store, setStore] = createStore({ user: { name: 'A' } });
setStore((s) => {
s.user.name = 'B';
});
// 1.x-style path setter via storePath helper
setStore(storePath('user', 'name', 'B'));
// Snapshot for serialization
const plain = snapshot(store);
See references/stores.md for derived stores, projections, deep(), merge, omit.
// For with accessors (keyed by identity, the default)
<For each={items()}>
{(item, i) => <Row item={item()} index={i()} />}
</For>
// Index-style (reuse by position)
<For each={items()} keyed={false}>
{(item, i) => <Row item={item()} index={i()} />}
</For>
// Repeat (no diffing, for skeletons/ranges)
<Repeat count={10}>{(i) => <Skeleton index={i} />}</Repeat>
See references/control-flow-dom.md for Show, Switch/Match, Errored, DOM changes.
| Feature | Detail |
|---|---|
| Package | @solidjs/start |
| Routing | File-based via <FileRoutes /> + @solidjs/router |
| Dynamic routes | [id].tsx, optional [[id]].tsx, catch-all [...path].tsx |
| Route groups | (groupName)/ folders |
| Nested layouts | blog.tsx + blog/ directory |
| API routes | Files in routes/ exporting HTTP methods |
| Vite 6 | Supported since SolidStart 1.1 |
| Roadmap | SolidStart 2.0 replaces Vinxi with pure Vite ("DeVinxi") |
See references/solidstart.md for routing details, route config, preload.
| File | Contents |
|---|---|
reactivity-effects.md | Split effects, flush, onSettled, dev warnings, ownership |
async-actions.md | Async computations, Loading, isPending, actions, optimistic updates |
stores.md | Draft-first setters, storePath, projections, snapshot, merge, omit |
control-flow-dom.md | For/Repeat/Show/Switch, Loading/Errored, DOM attributes, directives |
solidstart.md | SolidStart 1.0-1.1, file routing, layouts, DeVinxi roadmap |
New features in 1.9 (the last 1.x release before 2.0):
bool: attribute namespace for custom elements: <my-el bool:enable={flag()} />on: with handleEvent objects for advanced event options (passive, once, capture):<div
on:wheel={{
handleEvent(e) {
e.preventDefault();
},
passive: false,
}}
/>;
<a> inside <a>)oncapture: deprecated in favor of on: with event objectsSolid 2.0 warns in dev when you read reactive values at the top level of a component body. This catches a class of bugs where reactivity is accidentally lost.
// BAD: warns -- destructuring loses reactivity
function Bad({ title }) {
return <h1>{title}</h1>;
}
// GOOD: keep props object
function Good(props) {
return <h1>{props.title}</h1>;
}
// GOOD: intentional one-time read
function OneTime(props) {
const t = untrack(() => props.title);
return <h1>{t}</h1>;
}
Writing to signals inside reactive scopes (effects, memos, component body) warns. Derive instead of writing back.
// BAD: warns
createMemo(() => setDoubled(count() * 2));
// GOOD: derive
const doubled = createMemo(() => count() * 2);
// Escape hatch for internal state only
const [ref, setRef] = createSignal(null, { pureWrite: true });
const Theme = createContext('light');
// 1.x
<Theme.Provider value="dark"><Page /></Theme.Provider>
// 2.0 -- context IS the provider
<Theme value="dark"><Page /></Theme>
// 1.x
<button use:tooltip={{ content: 'Save' }} />
// 2.0 -- ref with directive factory
<button ref={tooltip({ content: 'Save' })} />
// Multiple directives via array
<button ref={[autofocus, tooltip({ content: 'Save' })]} />