.claude/skills/solidjs/solid-core/solid-core-overview/SKILL.md
Use when starting a SolidJS project, checking API availability, or looking up import paths and version compatibility. Prevents using deprecated APIs such as SolidStart 0.x patterns or pre-0.15 router cache function. Covers version matrix for SolidJS 1.x/2.x and SolidStart, import reference, ecosystem package map, and getting started guidance. Keywords: SolidJS API, version matrix, SolidStart, solid-js imports, @solidjs/router, ecosystem, Vite.
npx skillsauth add OpenAEC-Foundation/OpenAEC-Workspace-Composer solid-core-overviewInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Package | Version | Status | Notes |
|---------|---------|--------|-------|
| solid-js | 1.x (1.8+) | Stable | Fine-grained reactivity, signals, stores, effects, SSR, streaming |
| solid-js | 2.0 | Beta | Microtask batching, async first-class, onSettled replaces onMount |
| @solidjs/start | 0.x | Deprecated | Used createServerData$, createServerAction$ — NEVER use for new projects |
| @solidjs/start | 1.0 | Stable | Uses "use server" directive, built on Vinxi/Vite/Nitro |
| @solidjs/router | < 0.15 | Legacy | Used cache function (now deprecated) |
| @solidjs/router | 0.15+ | Stable | Introduced query (replaces cache), current API |
| Dependency | Requirement |
|-----------|-------------|
| SolidStart 1.0 | Requires @solidjs/router 0.15+ |
| @solidjs/router | Requires solid-js 1.8.4+ |
| createAsync | Bridge API between 1.x and 2.0 — use it NOW |
| babel-preset-solid | Required build dependency for JSX compilation |
NEVER use SolidStart 0.x APIs (createServerData$, createServerAction$) in new projects — they are removed in SolidStart 1.0. ALWAYS use "use server" with query/action instead.
NEVER use cache from @solidjs/router — it is deprecated. ALWAYS use query (available in router 0.15+).
NEVER import store utilities from solid-js — stores live in solid-js/store. Wrong imports cause runtime errors with no compile-time warning.
NEVER import rendering utilities from solid-js — SSR/hydration functions live in solid-js/web.
NEVER confuse @solidjs/router (current) with the old solid-app-router package — the old package is abandoned.
solid-js)| API | Purpose |
|-----|---------|
| createSignal | Reactive value with getter/setter |
| createEffect | Side effects that auto-track dependencies |
| createMemo | Cached derived values (reactive source) |
| createResource | Async data fetching with loading/error states |
| createComputed | Synchronous pre-render state sync |
| createRenderEffect | Synchronous render-phase effects |
solid-js)| API | Purpose |
|-----|---------|
| batch | Defer updates until callback completes |
| untrack | Read signals without creating dependencies |
| on | Explicit dependency specification for effects |
| observable | Convert signal to RxJS-compatible Observable |
| from | Bridge external reactive systems into signals |
solid-js)| API | Purpose | SolidJS 2.x |
|-----|---------|-------------|
| onMount | Run once after DOM mount (non-tracking) | Replaced by onSettled |
| onCleanup | Cleanup on unmount or effect re-run | Unchanged |
solid-js/store)| API | Purpose |
|-----|---------|
| createStore | Proxy-based reactive nested state |
| createMutable | Direct-mutation reactive state (MobX-style) |
| produce | Immer-style mutation syntax for stores |
| reconcile | Diff-based store updates (API responses) |
| unwrap | Strip reactive proxy, get plain object |
solid-js)| API | Purpose |
|-----|---------|
| splitProps | Split props into groups without losing reactivity |
| mergeProps | Merge props with defaults reactively |
| createContext | Create context for dependency injection |
| useContext | Consume context value |
| lazy | Code-split component with dynamic import |
| children | Resolve and track children reactively |
solid-js)| Component | Purpose |
|-----------|---------|
| <Show> | Conditional rendering |
| <For> | Keyed list rendering (reference identity) |
| <Index> | Indexed list rendering (position identity) |
| <Switch>/<Match> | Multi-branch conditional |
| <Suspense> | Async loading boundary |
| <ErrorBoundary> | Error catching boundary |
| <Portal> | Render outside component tree |
| <Dynamic> | Dynamic component selection |
solid-js/web)| API | Purpose |
|-----|---------|
| render | Mount app to DOM element |
| hydrate | Attach reactivity to server-rendered HTML |
| renderToString | Synchronous SSR |
| renderToStream | Streaming SSR |
| isServer | Boolean constant for environment detection |
@solidjs/router)| API | Purpose |
|-----|---------|
| Router, Route, A | Core routing components |
| useNavigate, useParams | Navigation hooks |
| useSearchParams, useLocation | URL state hooks |
| query | Cached server data fetching |
| createAsync | Reactive async primitive (recommended) |
| action | Server mutation wrapper |
| useSubmission | Track mutation status |
@solidjs/start)| API | Purpose |
|-----|---------|
| FileRoutes | File-based route generation |
| "use server" | Server function directive |
| API routes | HTTP method handlers (GET, POST, etc.) |
| Feature | SolidJS 1.x | SolidJS 2.x |
|---------|-------------|-------------|
| Reactivity | Synchronous by default | Microtask-batched |
| Async | Manual with createResource | First-class Promises/async iterables |
| Effects | Single createEffect | Split compute/apply pattern |
| Lifecycle | onMount | onSettled (can return cleanup) |
| Store setters | Path-style | Draft-first by default |
| List rendering | <Index> component | <For keyed={false}> with accessors |
| Derived state | createMemo only | createSignal(fn) for derived-but-writable |
<Loading> — Fallback during initial render without tearing down UIisPending() — Track refreshing stateaction() — Dedicated mutation primitive with optimistic patternscreateOptimistic / createOptimisticStore — Explicit optimistic UInpm init solid@latest
my-app/
├── public/
├── src/
│ ├── routes/
│ │ └── index.tsx # / route
│ ├── entry-client.tsx # Client hydration entry
│ ├── entry-server.tsx # Server handler entry
│ └── app.tsx # Root component
├── app.config.ts # SolidStart configuration
├── package.json
├── tsconfig.json
└── vite.config.ts
import { Suspense } from "solid-js";
import { Router } from "@solidjs/router";
import { FileRoutes } from "@solidjs/start/router";
export default function App() {
return (
<Router root={(props) => <Suspense>{props.children}</Suspense>}>
<FileRoutes />
</Router>
);
}
import { render } from "solid-js/web";
import { createSignal } from "solid-js";
function App() {
const [count, setCount] = createSignal(0);
return <button onClick={() => setCount((c) => c + 1)}>Count: {count()}</button>;
}
render(() => <App />, document.getElementById("root")!);
| Package | npm Name | Purpose |
|---------|----------|---------|
| Solid Router | @solidjs/router | Client/server routing, data loading, actions |
| SolidStart | @solidjs/start | Full-stack meta-framework (SSR, API routes) |
| Solid Primitives | @solid-primitives/* | 40+ community reactive utilities |
| Kobalte | @kobalte/core | Accessible unstyled UI components (like Radix UI) |
| Solid Testing Library | @solidjs/testing-library | Testing utilities (Testing Library conventions) |
| Solid DevTools | solid-devtools | Browser extension for signal/component inspection |
| Babel Preset | babel-preset-solid | JSX compilation (required build dependency) |
| Solid Transition Group | solid-transition-group | CSS enter/exit animations |
development
Use when integrating Vite with a backend framework, rendering Vite assets from server-side templates, or setting up dev/production HTML serving. Prevents incorrect manifest.json traversal and missing CSS chunk resolution in production. Covers build.manifest configuration, .vite/manifest.json structure, ManifestChunk properties, dev mode HTML setup, production rendering, CSS/JS chunk resolution, and modulepreload polyfill. Keywords: backend integration, manifest.json, ManifestChunk, Django, Laravel, Rails, modulepreload.
development
Use when encountering dev server startup failures, HMR issues, proxy errors, CORS blocks, or module not found errors during development. Prevents misconfiguring server.hmr behind reverse proxies and forgetting appType: 'custom' in middleware mode. Covers HMR full-reload debugging, proxy configuration, CORS setup, HTTPS certificates, server.fs.strict violations, port conflicts, WebSocket failures, file watcher issues, and middleware mode. Keywords: dev server, HMR, proxy, CORS, HTTPS, WebSocket, port conflict, server.fs.strict, middleware mode, file watcher.
development
Use when encountering pre-bundling errors, dependency resolution failures, stale cache issues, or slow development server startup. Prevents excluding CJS dependencies from pre-bundling (which breaks runtime module resolution) and misconfiguring optimizeDeps. Covers CJS/ESM conversion failures, missing dependency auto-discovery, optimizeDeps configuration, monorepo linked dependencies, cache invalidation, browser cache staleness, and large dependency tree performance. Keywords: pre-bundling, optimizeDeps, CJS, ESM, cache, dependency resolution, monorepo, node_modules/.vite.
development
Use when encountering Vite build failures, chunk size warnings, or version-specific build errors. Prevents the common mistake of using deprecated rollupOptions in v8 or misconfiguring build targets and minifiers. Covers Rolldown/Rollup bundling failures, CSS minification errors, sourcemap problems, library mode build failures, BundleError handling, and asset processing errors. Keywords: build error, Rolldown, chunk size, sourcemap, library mode, minify, BundleError, rollupOptions, build.target.