Skip to content
CAI
Software that uses CAICheck a score

solidjs/solid

55.3

Adequate · 28 September 2026

12k

lines of production code

JavaScript

with TypeScript

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the Solid.js framework, a reactive UI library that provides core primitives for state management, rendering, and control flow. It supports multiple execution environments through dedicated packages for client-side web, server-side rendering, and static site generation, while also offering utilities for custom elements and hyperscript. The codebase includes comprehensive tooling for development, testing, and performance benchmarking to ensure compatibility and efficiency across different runtimes.

How it got here

2018–2019 — Monorepo migration and modernization

10 changes.

The project underwent a comprehensive architectural overhaul, migrating from a legacy CoffeeScript-based setup to a TypeScript pnpm monorepo managed by Turborepo. This period focused on modernizing the build tooling, removing obsolete core modules, and expanding the ecosystem with new packages like babel-preset-solid and solid-element to support web components and improved SSR capabilities.

2020 — SSR runtime and control flow expansion

10 changes.

This period focused on establishing a robust server-side rendering infrastructure, introducing dedicated SSR runtimes, static generation APIs, and streaming support. It also expanded the core rendering engine with new control flows like SuspenseList and array utilities, while refining web package entry points and hyperscript implementations for broader interoperability.

2021–2026 — Solid.js package modularization and benchmarking

11 changes.

This period focused on modularizing the Solid.js codebase by introducing dedicated packages for store management, JSX runtime, and server-side request context storage. Concurrently, a comprehensive benchmarking suite was established to compare Solid's reactive primitives against other libraries, while integration and server-side tests were added to ensure stability across ESM exports and rendering contexts.

Features

Add Solid JSX runtime package

A new \solid/h/jsx-runtime\ package has been introduced to provide the JSX runtime implementation for Solid. This package re-exports the \h\ function from \solid-js/h\ as \jsx\, \jsxs\, and \jsxDEV\, while also exposing a \Fragment\ component and JSX type definitions, enabling compatibility with tools expecting a standard JSX runtime interface.

packages/solid/h/jsx-runtime · high confidence

Add Solid reactivity benchmarks and comparative results

Added a new benchmark suite in \packages/solid/bench\ that measures the performance of Solid's reactive primitives (signals and computations) under various creation and update scenarios. The suite includes a Node.js runner (\bench.cjs\) and a results document (\results.md\) comparing Solid against other libraries such as S.js, Kairo, Preact Signals, usignal, Vue reactivity, and Sinuous, providing data on signal creation and memo update costs.

packages/solid/bench · high confidence

Add server-side request context storage for Solid.js

Introduces a new \packages/solid/web/storage\ module that provides a \provideRequestEvent\ function. This function uses Node's \AsyncLocalStorage\ to attach and retrieve the current \RequestEvent\ during server-side rendering, ensuring that server context is not accessible in client-side builds. The package includes necessary TypeScript configuration files to support this functionality.

packages/solid/web/storage · high confidence

Added benchmark implementations for Kairo, Preact Signals, uSignal, and modified S.js/Sinuous variants

The benchmark suite in \packages/solid/bench/libraries\ now includes standalone implementations for Kairo, Preact Signals (v1.1.0), and uSignal (v0.7.0), alongside modified versions of S.js (\s-mod.cjs\) and Sinuous (\sinuous-mod.cjs\) to facilitate performance comparison against Solid.

packages/solid/bench/libraries · high confidence

Added simplified signal propagation prototypes to benchmarks

Added four new benchmark prototype files (message-noarray.cjs, message.cjs, queue-noarray.cjs, queue.cjs) that implement simplified versions of Solid's signal propagation and queue execution logic. These prototypes provide alternative implementations of core reactive primitives like createSignal, createComputed, and createMemo, allowing for performance comparison against existing benchmark implementations.

packages/solid/bench/prototypes · high confidence

Initial release of babel-preset-solid

This change introduces the babel-preset-solid package, which transforms JSX into Solid runtime calls using the babel-plugin-jsx-dom-expressions plugin. The preset is configured with default options for DOM generation, including built-in support for Solid primitives like For, Show, and Suspense, and allows users to specify SSR generation via preset options.

packages/babel-preset-solid · high confidence

Initial release of solid-element package with context and attribute fixes

The solid-element package is introduced, providing utilities to create Custom Web Components from Solid components. This release includes a fix for owner marker lookup, allowing nested custom elements to correctly inherit context from ancestor host markers and assigned slot markers, and resolves an issue where empty attributes were not handled correctly in custom elements. The package also updates its dependency on solid-js to version 1.9.14.

packages/solid-element · high confidence

Introduce server-side rendering runtime with error handling and hydration support

The Solid.js server package now includes a dedicated runtime for server-side rendering, exposing core reactive primitives (signals, effects, memos) and DOM control flow components (For, Show, Switch, ErrorBoundary) in \packages/solid/src/server\. This implementation adds \catchError\ to propagate errors to parent boundaries during SSR, supports hydration via \sharedConfig\ and \createUniqueId\, and ensures that error boundaries and resource states behave correctly on the server, allowing applications to render consistently before client hydration.

packages/solid/src/server · high confidence

Introduce solid-element package for registering Solid components as custom elements

A new \solid-element\ package has been added, providing utilities to register Solid.js components as native Web Components. The \customElement\ function allows developers to define custom tags that render Solid components, handling prop synchronization and lifecycle management via the underlying \component-register\ library. This enables the use of Solid's reactive primitives within standard browser custom element APIs.

packages/solid-element/src · high confidence

Introduce solid/store package with client, server, and mutable implementations

Adds the \solid/store\ package, providing a reactive state management solution for Solid.js. The package exports \createStore\ and \createMutable\ for creating reactive state objects, along with \reconcile\ for efficient array/object diffing and \produce\ for immutable-style updates. It includes distinct implementations for client-side (proxy-based, with dev hooks) and server-side (plain object, no proxies) environments, ensuring safe prototype pollution guards and correct behavior across both runtimes.

packages/solid/store/src · high confidence

Introduce static site generation entry points

The \packages/solid-ssr/static\ directory now exposes \renderStatic\ functions (in both CommonJS and ES module formats) that accept a configuration object specifying an entry point, output path, and URL. These functions orchestrate the static generation process by invoking a dedicated \writeToDisk\ runner script, which loads the server module, fetches the rendered content for the specified URL, and writes the result to the file system. This change provides the concrete API and execution logic for generating static HTML files from Solid SSR applications.

packages/solid-ssr/static · high confidence

New HTML rendering package using lit-dom-expressions

A new \solid/html\ package has been introduced to provide HTML rendering capabilities. The implementation delegates to the \lit-dom-expressions\ library, exposing a default \html\ tag function that utilizes Solid's core primitives (such as \effect\, \spread\, and \classList\) for efficient DOM updates.

packages/solid/html/src · high confidence

New SSR, SSG, and Streaming examples with code-splitting and error handling

The \packages/solid-ssr/examples\ directory now includes a complete, structured set of demonstration applications for Server-Side Rendering (SSR), Static Site Generation (SSG), and Streaming SSR. These examples feature a shared UI with client-side routing, lazy-loaded components for code splitting, and \ErrorBoundary\ support to handle rendering failures gracefully. The setup demonstrates modern Solid patterns, including the use of \renderToStringAsync\ for SSR, \renderToStream\ for streaming responses, and \HydrationScript\ for efficient client hydration.

packages/solid-ssr/examples · high confidence

New SuspenseList component for controlling suspended content reveal order

The \packages/solid/src/render\ module now exports a new \SuspenseList\ component that allows developers to control the order in which suspended content is revealed (forwards, backwards, or together) and manage the visibility of fallbacks for pending items. This component works in conjunction with the existing \Suspense\ component to provide coordinated rendering of multiple asynchronous resources, addressing issues with nested Suspense behavior and hydration stability.

packages/solid/src/render · high confidence

New hyperscript (h) function implementation

The \packages/solid/h\ package now provides a dedicated \h\ hyperscript function for creating Solid elements. This implementation re-exports the core hyperscript logic from \hyper-dom-expressions\ and wires it with Solid's web primitives (such as \spread\, \assign\, \insert\, and \createComponent\) to enable JSX-like syntax support.

packages/solid/h/src · high confidence

New reactive array, scheduler, and observable utilities

The \packages/solid/src/reactive\ directory now includes new modules for array mapping (\mapArray\, \indexArray\), a concurrent task scheduler (\scheduler.ts\), and interoperability with external observables (\observable\, \from\). These additions provide the underlying implementation for the \\<For\>\ and \\<Index\>\ control flows, introduce a new scheduling mechanism for effect execution, and enable binding Solid signals to libraries like RxJS.

packages/solid/src/reactive · high confidence

Removals

Removal of legacy state management and reactive types

The \ImmutableState\, \State\, \Selector\, \Signal\, and \Sync\ classes have been removed from the \src/types\ directory. This eliminates the previous implementation of immutable state handling, reactive property subscriptions, and computed selectors, indicating a shift away from this specific architecture in the codebase.

src/types · high confidence

Architecture

Repository restructured into a pnpm monorepo with Turborepo and updated tooling

The repository has been reorganized into a pnpm workspace monorepo, managed by Turborepo for task orchestration. This change introduces new configuration files including \pnpm-workspace.yaml\, \turbo.json\, and updated \tsconfig.json\ files targeting NodeNext modules. Development tooling is standardized with the addition of \.editorconfig\, \.prettierrc\, and \.gitpod.yml\ configurations. The legacy CoffeeScript build setup (\rollup.config.js\) and \.npmignore\ have been removed, and the project now enforces stricter TypeScript settings for tests via \tsconfig.test.json\. Additionally, the \seroval\ dependency is pinned to version 1.5.4 in the workspace overrides to address security fixes.

(repo-wide) · high confidence

Behavioural changes

Introduce server-side rendering entry points and SSR-specific utilities

The \packages/solid/web/server\ module is introduced to provide a dedicated entry point for server-side rendering. This includes re-exporting core primitives like \For\, \Show\, \Suspense\, and \mergeProps\ from \solid-js\, while exposing server-specific flags such as \isServer\ and \isDev\. The module implements SSR-aware versions of dynamic component handling via \createDynamic\ and \Dynamic\, which render function components directly or generate HTML strings for native elements, and provides a \Portal\ component that returns an empty string to prevent client-side portal logic on the server.

packages/solid/web/server · high confidence

New universal renderer with merged props support

The solid/universal package now provides a new entry point that exports a \createRenderer\ function and the \RendererOptions\ and \Renderer\ types. This renderer wraps the underlying DOM expressions implementation and explicitly integrates \mergeProps\ from solid-js, ensuring that property merging behavior is consistent within the universal rendering context.

packages/solid/universal/src · high confidence

Removal of legacy CoffeeScript core and renderer modules

The library has removed its legacy implementation files, specifically \src/Core.coffee\, \src/Renderer/index.coffee\, \src/Renderer/reconcileArrays.coffee\, and \src/index.coffee\. This deletion eliminates the previous task queueing, context management, and DOM reconciliation logic written in CoffeeScript, indicating a shift to a new internal architecture or language implementation.

src · high confidence

Reworked web package entry points and added createDynamic utility

The \solid-js/web\ package now exposes a cleaner module structure with dedicated entry points (\client.ts\, \core.ts\, \server-mock.ts\) that re-export or mock functionality as appropriate for the environment. A key behavioral addition is the \createDynamic\ function, which allows rendering arbitrary components or elements programmatically with props, offering a lower-level alternative to the \Dynamic\ component for performance-sensitive scenarios. The \Portal\ component has been updated to support SVG elements and shadow DOM isolation, and SSR rendering functions are now properly mocked in the browser environment to throw errors, preventing accidental usage.

packages/solid/web/src · high confidence

Solid.js 1.5 core restructure and API expansion

This change introduces Solid.js version 1.5, restructuring the core package to expose a comprehensive set of new reactivity primitives and utilities. Users now have access to concurrent scheduling via \enableScheduling\, external source interoperability through \enableExternalSource\, and improved control flow with the \on\ operator and \createReaction\. The update also adds \catchError\ for error handling, \createSelector\ for derived state, and \runWithOwner\ for context management, while exporting detailed type definitions for signals, resources, and JSX elements to improve TypeScript support.

packages/solid/src · high confidence

Switch test runner from Jest to Vitest

The test infrastructure for the solid-js package has migrated from Jest to Vitest. This change introduces new configuration files (vite.config.mjs, vitest.server.config.mjs) and updates the TypeScript configuration to include test files, ensuring that IDEs type-check tests using the same settings as the source code. The test environment is now split into client (jsdom) and server (node) contexts, replacing the previous Jest setup.

packages/solid · high confidence

Test coverage

Added comprehensive test suite for Solid store and mutable state; Added integration tests for downloaded packages; Added tests for server-side lazy() error handling and retry logic; Establish integration test package for Solid.js ESM exports; Expanded test coverage for Solid.js core primitives and utilities; Expanded test coverage for Solid.js web control flows and utilities.

Dependencies

Solid.js v1.9.15 release with modern build tooling and workspace structure

This update releases Solid.js version 1.9.15, introducing a comprehensive restructuring of the package ecosystem and build tooling. The core \solid-js\ package now utilizes conditional exports to support multiple environments including Node, Deno, Workers, and Browser (with specific development builds), alongside dedicated subpath exports for \store\, \web\, \universal\, \h\, and \html\. The monorepo has migrated to pnpm workspaces, replacing the previous npm-based setup with a new \pnpm-lock.yaml\ and root \package.json\ that enforces pnpm v9.15.0. Build tooling has been modernized with Rollup v4, Vitest v4, and TypeScript v5.7, while dependencies like \babel-plugin-jsx-dom-expressions\ and \dom-expressions\ are aligned at version 0.40.10. New packages such as \babel-preset-solid\ and \solid-element\ are introduced, and the root package name is standardized to \solid-js\.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 33 → 55 (+22.0)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.16) — scores are not directly comparable.

Lenses

  • Code Health 54 → 74 (+19.8)
  • Architecture 68 (new)
  • Maturity 44 → 60 (+15.8)
  • Readiness 17 → 42 (+25.3)
  • Security 56 → 70 (+13.8)
  • Performance 100 (new)

Resolved (80)

  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Dimension evaluation failed
  • FileTooLong: libraries/preact.cjs (packages/solid/bench/libraries/preact.cjs)
  • FileTooLong: libraries/s-mod.cjs (packages/solid/bench/libraries/s-mod.cjs)
  • FileTooLong: libraries/s.cjs (packages/solid/bench/libraries/s.cjs)
  • FileTooLong: libraries/vuerx.cjs (packages/solid/bench/libraries/vuerx.cjs)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • High CVE: [GHSA redacted] (pnpm-lock.yaml)
  • …and 60 more

New (173)

  • Change coupling: index.ts ↔ index.ts (packages/solid/h/src/index.ts)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • Critical CVE: [GHSA redacted] (pnpm-lock.yaml)
  • FileTooLong: reactive/signal.ts (packages/solid/src/reactive/signal.ts)
  • FileTooLong: server/rendering.ts (packages/solid/src/server/rendering.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • FixmeComment (packages/solid/test/signals.type-tests.ts)
  • …and 153 more

Changes since last survey

  • 11 commits — 7 feature/other, 4 fixes

By area

  • packages/solid — 6 commits
  • (root) — 3 commits
  • .github/workflows — 1 commit
  • packages/babel-preset-solid — 1 commit

Notable commits

  • fix: fix(reactive): make createSelector transition-aware
  • fix: fix: exclude shared keys from later splitProps groups
  • fix: fix: re-subscribe external sources after a transition
  • fix: fix: surface lazy() rejections and allow retry
  • change: Update DOM expression runtimes
  • change: chore: refresh lockfile after 1.9.15 peer bump
  • change: chore: upgrade CI tooling and add CVE Lite scan
  • change: chore: version packages for 1.9.15 release
  • change: ci: bump cve-lite-cli action from v1.29.0 to v1.32.0 (#3273)
  • change: test: isolate transition #2046 from leaked enableScheduling
  • change: test: reset hydration leftovers after lazy() reject

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

solidjs/solid was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit b25c557754f2ced0d86490e6dbfded9b1745b663 — the exact code this score is about.
  • Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-24a00d372a4b.