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 withturbo.jsonorchestrating builds. The pre-monorepo history is still reachable via git but every active package now lives underpackages/. createResourceoverhaul (1.4, May 2022). Resources picked up dedicatedloading/erroraccessors and integrated more directly with<Suspense>. The currentcreateResourcelives inpackages/solid/src/reactive/signal.ts.- Streaming SSR via seroval (1.8, Oct 2023). Replaced bespoke promise serialization with the generic
serovallibrary, decoupling promise serialization from resources. Seepackages/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 inpackages/solid/src/render/flow.ts(and the SSR mirror inpackages/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.