JSX with the performance of Svelte. Solid looks like React, but compiles to fine-grained reactive updates — components run once, signals do the work.
← Back to Client SidecreateSignal) are the reactive primitive — read with a getter, write with a setter.createMemo) cache derived values; Effects (createEffect) run side effects.import { createSignal, createResource, For, Show } from "solid-js"; function ProductList() { const [products] = createResource(() => fetch("/api/products").then(r => r.json()) ); return ( <Show when={!products.loading} fallback={<p>Loading…</p>}> <ul> <For each={products()}> {p => <li>{p.name} — ${p.price}</li>} </For> </ul> </Show> ); }
A createSignal() returns a getter and a setter. When you read the getter inside a JSX expression or memo, Solid records the dependency. When you call the setter, only those exact DOM bindings update — no diffing, no reconciliation.
createResource is a first-class async primitive — fetch + loading + error in one. Pair with <Suspense> for declarative loading boundaries.
<For>, <Show>, <Switch>, <Suspense>, <ErrorBoundary> — these compile to optimal DOM updates. Avoid .map() and ?: for lists/conditions.
Solid's meta-framework — file-based routing, server functions, SSR, streaming. Solid's answer to Next.js / SvelteKit.
Dashboards, real-time data, low-end devices.
Familiar JSX, dramatically better runtime.
Tiny bundles fit in widgets & edge environments.
No legacy React habits to unlearn.