mrkeyoor.com_
Tue 08 Sept 16:07 UTC
Webevaluationupdated 08 Sept 2026

solid review

Solid is a TypeScript and JavaScript library for building web interfaces with JSX, signals, and direct DOM updates instead of a virtual DOM. It tracks which expressions read each piece of state, then reruns those expressions rather than calling the whole component again.

Verdict

Our Solid run installed 676 packages in 14 seconds and passed all 487 tests, so the current core repository is easy to try and clean under Node 22. Use Solid when fine-grained DOM updates and JSX appeal enough to justify learning its accessor-based reactivity. Stay with React or Vue when ecosystem compatibility and existing team habits are worth more than changing the rendering model.

We ran it

Lab card: what happened when we ran solidScreenshot of solid (solidjs.com)
Install✓ · 14s676 packages · 215 MB
Build✓ · 48s
Tests✓ · 36s487 passed · 0 failed of 487 (vitest)
Repo187 files~22,926 lines of source · 1.4 MB · 2 CI workflows

Answers from our run

Does solid build from source?

Dependencies installed in 14 seconds (676 packages), and the build succeeded in 48 seconds. We cloned commit b25c557 into a clean Debian container with 3 CPUs and no project-specific setup.

Do solid's tests pass?

Yes: 487 of 487 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use solid?

Products that must support Internet Explorer or browsers outside the last two years: the README excludes those targets.

What are the alternatives to solid?

React, Vue, Svelte. Our Solid run installed 676 packages in 14 seconds and passed all 487 tests, so the current core repository is easy to try and clean under Node 22.

Setup5/514-second install, 48-second build, and all 487 tests passed
Docs4/5Strong concepts and setup; core versus app tooling needs context
Community5/535,993 stars and active September 2026 issue and pull request work
Maturity5/5Established 1.9.x line with 487 passing tests and active 2.0 work

Who it’s for

TypeScript teams that want JSX with fine-grained reactive state.
Developers willing to learn signal accessors and a render-once component model.
Interface authors who need SSR, streaming, progressive hydration, portals, or custom renderers.
Teams that prefer browser-native DOM inspection over a virtual component tree.
Library builders targeting current browsers, Node LTS, Deno, or Cloudflare Workers.

Who it’s NOT for

Products that must support Internet Explorer or browsers outside the last two years: the README excludes those targets.
React teams expecting a drop-in change of package name: Solid component functions normally run once, and reactive values are read through accessors.
Build setups that cannot run a JSX transform: the recommended path needs babel-preset-solid plus Solid-specific TypeScript JSX settings.
Applications that render portals into iframes and require nodes from the iframe's own realm: issue 2358 reports nodes being created from the parent document.
Form-heavy apps unwilling to test dynamic selects: issues 1754 and 2241 describe value-order problems with spread props and asynchronously loaded options.

Setup reality

Our sandbox installed 676 pnpm packages in 14 seconds and used 215 MB. The build succeeded in 48 seconds, and Vitest finished in 36 seconds with 487 passed and 0 failed out of 487. The commit b25c557 checkout had 187 files, about 22,926 source lines, and occupied 1.4 MB.

Repository work requires pnpm 9.15 and a Node environment; our run used Node 22. An application using JSX also needs the Solid Babel or Vite transform, while TypeScript must preserve JSX and set jsxImportSource to solid-js. Routing and application structure come from surrounding Solid tooling rather than this core checkout.

Components use a render-once model, so React habits around rerenders and destructuring do not transfer unchanged. The README supports modern browsers from the last two years, Node LTS, current Deno, and Cloudflare Workers. The monorepo has two CI workflows, no Dockerfile, and no top-level tests directory.

Components run once while signals update DOM expressions

Solid uses JSX, but its execution model differs from React's. A component function normally runs once to create the view. createSignal returns an accessor and setter; reading the accessor inside an expression records a dependency. When the value changes, Solid reruns the dependent expression and updates the associated DOM node. There is no virtual tree diff for the whole component. The result is direct and inspectable, though developers must learn where a reactive read occurs.

The repository we measured was compact before installation: 187 files, about 22,926 source lines, and 1.4 MB checked out. Its packages still cover signals, stores, DOM rendering, server rendering, web storage, hyperscript, tagged templates, and universal renderers. Suspense, portals, error boundaries, streaming SSR, and progressive hydration are in scope. This is a focused UI core, while routing, project scaffolding, and full application conventions live in adjacent Solid tooling.

The 1.4 MB checkout expands to 215 MB after install

Pnpm installed 676 packages and used 215 MB in our sandbox. The repository is a workspace monorepo, so contributors receive compilers, types, test runners, DOM emulation, build tools, and several renderer packages. Application users installing solid-js do not inherit this exact development tree. The distinction matters when judging adoption: our figures describe a source checkout at commit b25c557, not a generated Solid application or the published runtime bundle.

The build took 48 seconds on 3 CPUs with 8 GB of RAM and Node 22. The root package requires pnpm 9.15 and rejects other package managers during repository installation. Two CI workflow files were present, with no Dockerfile and no top-level tests directory. Tests live with the packages rather than in a root tests folder, so that repository signal should be read alongside the successful suite rather than as missing coverage.

What happened when we ran it

Our sandbox installed the workspace in 14 seconds, built it in 48 seconds, and ran Vitest in 36 seconds. All 487 tests passed, with 0 failures. The run took place in a fresh unprivileged Node 22 container against commit b25c557. No install, build, or test problem appeared in the supplied result, which makes this the cleanest possible repository trial.

The 487 passing cases do not establish browser rendering speed or application bundle size. We did not run a UI benchmark, deploy SSR, hydrate a page, or compare Solid with another framework. Performance claims need a representative application, production compiler settings, and the target browsers. What our 98 seconds of install, build, and test work does show is that the current monorepo can be reproduced without hidden services or credentials.

JSX needs a Solid compiler transform

The recommended application path installs solid-js and babel-preset-solid, or uses the Solid Vite integration through a starter. TypeScript must keep JSX for the transform and set jsxImportSource to solid-js. Those settings let the compiler separate static HTML from reactive insertions. Teams using unusual bundlers should prove that development and server export conditions resolve correctly, especially because the v1.9.0 release removed the older browser field to avoid bundler conflicts.

Our 48-second build validates the repository's configured toolchain, not every custom bundler. The render-once model also changes coding habits. A signal value is read by calling its accessor, and reactive tracking depends on where that call happens. Developers coming from React should complete the concepts tutorial and port one stateful form before estimating a migration. Familiar JSX shortens the syntax learning curve, but it does not make component lifecycles equivalent.

Two open select issues matter for dynamic forms

Issue 1754 reports that spreading props onto a select can set its value before child options exist, leaving the value empty in the provided reproduction. Issue 2241 reports a related case where options arrive later and the already-set value is not reflected. Both are narrowly described open reports, not evidence that every Solid form fails. A form-heavy application should include asynchronous options, spread props, reset behavior, and server hydration in its acceptance tests.

The clean 487-test run did not execute either linked browser reproduction in our sandbox. Cross-document rendering has another documented edge: issue 2358 says elements placed into an iframe through Portal are created from the parent window's Node realm. Most sites will never care. Editors, preview tools, and embedded design systems may care a great deal, so those teams should test instanceof, styles, events, and cleanup inside their actual iframe boundary.

Package 1.9.15 is active while 2.0 RC work continues

The current package file identifies solid-js 1.9.15. GitHub's latest formal release is v1.9.0 from September 2024, yet the repository was pushed on September 8, 2026 and had several pull requests updated that day. GitHub showed 35,993 stars and 31 open issues and pull requests. That activity makes the older release page poor evidence of project health; the combined open count is not a count of confirmed bugs.

Solid 2.0 RC work is visible in the current queue, including issue 3274 about an uninitialized derived setter receiving a value inconsistent with its type. Teams that need stable contracts should remain on a pinned 1.9.x package until the 2.0 behavior and migration guidance settle. For a new interface, the 14-second install and 487 passing tests make evaluation cheap. The decision turns on whether the team prefers explicit signal accessors and direct DOM updates enough to retrain its JSX instincts.

Alternatives

ProjectWhat it isPick it when
React gh↗A component library for web and native interfaces with a much larger surrounding ecosystem.pick this instead when React Native, existing React libraries, or team familiarity outweigh Solid's fine-grained update model.
Vue gh↗A progressive web framework with reactive state and single-file components.pick this instead when template syntax, incremental adoption, and Vue's established application stack fit the team better.
Svelte gh↗A compiler-based UI framework with its own concise component syntax.pick this instead when you prefer Svelte files and compiler-managed reactivity over JSX and explicit signal accessors.

What people are saying

  1. [velocity-scout] solidjs/solid
  2. [theverge] This ultra-thin Lenovo laptop concept uses solid-state cooling
  3. [theverge] Belkin introduces its first longer-lasting semi-solid-state power banks
  4. [hackernews] Malleable software = solid bases and custom code
  5. [hackernews] Show HN: Desktopcolors.com – A museum for solid background colors of classic OS
  6. [hackernews] John C. Lilly on solid state intelligence and the elimination of man (1978)

Sources

  1. Solid README
  2. Solid package manifest
  3. Solid v1.9.0 release
  4. Select spread ordering issue 1754
  5. Async select options issue 2241
  6. Iframe portal node issue 2358
  7. Solid 2.0 RC setter type issue 3274

More web reviews

quasar · filament · gitbook · socket.io · material-design-icons · helium · the whole board →