Open-Source Wikis

/

Solid

/

Lore

solidjs/solid

Lore

A timeline of how solidjs/solid evolved. Dates are derived from git tags, the CHANGELOG.md, and the most relevant commits.

Eras

The S.js inheritance (Apr 2018 – Jan 2019)

The repository's first commit (2018-04-24 open source repo) imported a project Ryan Carniato had been prototyping. The original reactive runtime was inspired by Adam Haile's S.js — the MIT license preamble and the comment block at the top of packages/solid/src/reactive/signal.ts still credit S.js as the inspiration. mapArray (packages/solid/src/reactive/array.ts) is similarly noted as a port of S-array.

Across 2018 (52 commits) the surface stabilized around what would become the public reactive primitives: createSignal, createMemo, createEffect, createRoot. The compiler half of the project (babel-plugin-jsx-dom-expressions) lived in a sibling repository.

Rapid public iteration (Feb 2019 – Dec 2020)

2019 (277 commits) and 2020 (463 commits) were the highest-velocity period in Solid's history — almost half of the project's commits land in this 24-month window. solid-js/web, solid-js/store, solid-js/h, solid-js/html, and solid-element were all introduced or matured during this era. The first SSR primitives appeared, eventually growing into packages/solid/src/server/.

Custom-element support landed via the solid-element package (packages/solid-element/src/index.ts), built on top of component-register to expose Solid components as Web Components.

v1.0 and the era of stability (Jan 2021 – Dec 2021)

2021 (400 commits) saw the path to v1.0. The repository converted to a pnpm + Turborepo monorepo. The current top-level layout — packages/{solid, babel-preset-solid, solid-element, solid-ssr, test-integration} — dates from this era. pnpm-workspace.yaml and turbo.json are both products of the v1 cutover.

The CHANGELOG entry for v1.3 records feat: add enableExternalSource for reactivity interoperability (#739, Dec 2021), which still ships from packages/solid/src/reactive/signal.ts today as enableExternalSource.

TypeScript-first ergonomics (Jan 2022 – Dec 2022)

2022 (276 commits) tightened the TypeScript story. The bulk of the very large packages/solid/test/signals.type-tests.ts was authored across this period. v1.4 (May 2022, Solid 1.4 PR #974), v1.5 (Aug 2022, PR #1176), and v1.6 (Oct 2022, PR #1286) shipped progressive type fixes for createSignal, createResource, Setter<T>, and the JSX intrinsic element types.

v1.7 and the migration to v2.0 begins (Jan – Dec 2023)

The CHANGELOG.md v1.7.0 entry (Mar 2023) describes this version as "the beginning of the migration roadmap to v2.0." Major TypeScript refinements landed:

  • Null-asserted control flow callbacks for <Show> and <Match>.
  • Better event types for input elements (onInput, onChange, etc.).
  • Stricter JSX element types — TS now warns when JSX shorthands accidentally bypass reactivity.

v1.8 (Oct 2023) added "de-duping streaming serialization" via seroval (still the SSR serializer in packages/solid/web/server/), hydration improvements for fragments under streaming, and the omitNestedClosingTags template optimization.

Maintenance mode and the v2 fork (2024 – present)

The CHANGELOG flags 1.8 as the start of a holding pattern: "We are in that holding pattern between the end of 1.x and the start of 2.0." Active reactive research moved to @solidjs/signals. 2024 saw 115 commits, 2025 dropped to 54, and 2026 (through end of April) had 16 commits.

The current focus in this repo is conservative: bug fixes (prevent createDeferred from keeping Node.js process alive, #2588; lazily create inTransition external source, #2589), dependency updates, and stabilizing flaky tests (Stabilize transition coverage timing, Stabilize transition regression test).

In parallel, the v2.0.0-experimental.* and v2.0.0-beta.0 tags in this repository indicate a v2 line is being staged here as well — see reference/dependencies.md for what those builds depend on.

Longest-standing modules

These files are old, central, and still actively referenced:

Module Introduced Notes
packages/solid/src/reactive/signal.ts 2018 (initial commit) The reactive heart. Has weathered every architecture change in Solid's history. Recently touched (Apr 2026) to fix a createDeferred Node-process-keepalive bug.
packages/solid/src/reactive/array.ts 2018 (initial commit) The keyed mapArray reconciler that powers <For>. The MIT preamble at the top still attributes it to S-array.
packages/solid/src/render/component.ts 2019 createComponent, mergeProps, splitProps. The component contract has remained stable through 5+ years of point releases.
packages/solid/src/render/Suspense.ts 2019-2020 <Suspense> and <SuspenseList>. SuspenseList is still flagged "experimental" in its JSDoc.
packages/babel-preset-solid/index.js 2019 A 35-line file that has barely changed because the moving parts live in babel-plugin-jsx-dom-expressions.

Major rewrites and refactors

  • pnpm + Turborepo monorepo cutover (2021). The repo converted from a flatter layout to the current packages/* workspaces with turbo.json orchestrating builds. The pre-monorepo history is still reachable via git but every active package now lives under packages/.
  • createResource overhaul (1.4, May 2022). Resources picked up dedicated loading / error accessors and integrated more directly with <Suspense>. The current createResource lives in packages/solid/src/reactive/signal.ts.
  • Streaming SSR via seroval (1.8, Oct 2023). Replaced bespoke promise serialization with the generic seroval library, decoupling promise serialization from resources. See packages/solid/web/server/index.ts.
  • <Show> / <Match> callback narrowing (1.7, Mar 2023). A non-keyed callback form was added that gives proper type narrowing without forcing component re-creation. Implementation is in packages/solid/src/render/flow.ts (and the SSR mirror in packages/solid/src/server/rendering.ts).
  • NGINX SSI compatibility (1.8, Oct 2023). Hydration markers changed from <!--#--> to <!--$--> because # is treated specially by some servers.

Deprecated / replaced

Feature Replacement When
pipeToWritable / pipeToNodeWritable renderToStream Marked @deprecated in packages/solid/web/src/server-mock.ts; current canonical entry is renderToStream in packages/solid/web/server/.
ssrSpread ssrElement Marked @deprecated in the same file.
Sync resource fetcher returns inside createResource triggering re-track Replaced by explicit ResourceSource source signal Throughout the v1.x → v1.7 evolution; see the type changes in packages/solid/src/reactive/signal.ts.
PropsWithChildren ParentProps packages/solid/src/render/component.ts keeps PropsWithChildren as a @deprecated alias.

Growth trajectory

The packages/ workspace has held its current 5-package shape since the v1 cutover. Most of the growth since then has happened inside packages/solid/ (the web/, store/, web/storage/, h/, html/, universal/ sub-trees were added or expanded between 2020 and 2023, not the package count itself).

Contributor growth: Ryan Carniato accounts for ~1,426 of ~1,875 commits — an unusually high ratio even for an open-source project. The next-most-prolific contributors are Damian Tarnawski (33), Dan Jutan (23), Xavier Loh (22), Joe Pea (18), and dependabot (15+). See maintainers.md for a per-subsystem breakdown.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Lore – Solid wiki | Factory