solidjs/solid
By the numbers
A quantitative snapshot of the solidjs/solid repository.
Data collected on 2026-04-30, against
mainat commit878f94a.
Size
Source counted under packages/, excluding node_modules/, dist/, and generated types/ directories.
| Language / kind | Lines |
|---|---|
TypeScript (.ts) |
12,593 |
TSX (.tsx, mostly tests) |
2,920 |
JavaScript (.js, including rollup.config.js and benchmarks) |
838 |
| Total source | 16,351 |
xychart-beta horizontal
title "Source lines by file kind"
x-axis [".ts", ".tsx", ".js"]
y-axis "Lines" 0 --> 13000
bar [12593, 2920, 838]| File counts | Count |
|---|---|
Source files (.ts / .js / .tsx, non-test) |
89 |
Test files (*.spec.ts(x), *.bench.ts, *.type-tests.ts) |
15 |
| Workspace packages | 5 (solid-js, babel-preset-solid, solid-element, solid-ssr, test-integration) |
Distinct solid-js entry points |
7 (root, /web, /store, /web/storage, /h, /html, /universal) |
packages/solid/rollup.config.js produces 16 separate Rollup bundles (one per entry × build flavor), each going to dist/, web/dist/, store/dist/, web/storage/dist/, h/dist/, h/jsx-runtime/dist/, html/dist/, or universal/dist/.
The biggest files
| File | Lines | Role |
|---|---|---|
packages/solid/src/reactive/signal.ts |
1,821 | Signals, memos, effects, resources, transitions, error boundaries — the runtime core |
packages/solid/test/signals.type-tests.ts |
1,129 | Compile-time tests for the reactive type surface |
packages/solid/store/test/store.spec.ts |
1,124 | Behavioural tests for createStore |
packages/solid/test/signals.spec.ts |
836 | Behavioural tests for the reactive primitives |
packages/solid/src/server/rendering.ts |
715 | Server-side createComponent, control flow, createResource, lazy, escape helpers |
packages/solid/store/src/store.ts |
523 | Proxy traps and lazy DataNode allocation for stores |
packages/solid/test/signals.memo.spec.ts |
515 | Tests for createMemo semantics |
packages/solid/src/render/component.ts |
401 | createComponent, mergeProps, splitProps, dev component instrumentation |
packages/solid/src/server/reactive.ts |
389 | Server-side stub of the reactive system |
packages/solid/rollup.config.js |
268 | Bundle definitions for all 16 entry-point builds |
Activity
git log distribution by year (all commits, including release tags):
xychart-beta horizontal
title "Commits per year"
x-axis ["2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026"]
y-axis "Commits" 0 --> 500
bar [52, 277, 463, 400, 276, 222, 115, 54, 16]- First commit: 2018-04-24 (
open source repo). - Last commit on
main: 2026-04-29 (Fix solid-element readme typo,878f94a). - Total commits: ≈ 1,875 across the lifetime of the repo.
- Commits in the last year: 49.
- Commits in the last 90 days: 10.
The codebase has matured into a slow-burn maintenance cadence, consistent with the CHANGELOG note that 2.x reactive work has moved to solidjs/signals.
Recent churn (last 90 days)
| File | Touches |
|---|---|
packages/solid/web/test/transition.spec.tsx |
4 |
packages/solid/src/reactive/signal.ts |
2 |
packages/solid/src/reactive/scheduler.ts |
2 |
packages/babel-preset-solid/package.json |
2 |
Most recent feature-shaped commits: prevent createDeferred from keeping Node.js process alive (#2588), lazily create inTransition external source to prevent use-after-dispose (#2589), Set committed value for computations created during transition (#2617).
Bot-attributed commits
Filtering by author/committer trailers:
| Source | Count | % of total |
|---|---|---|
dependabot[bot] |
15 commits | ~0.8% |
Co-authored-by: trailers |
160 commits | ~8.5% |
This is a lower bound on AI-assisted contributions, since inline AI tools (Copilot etc.) leave no trace in git history. No factory-droid[bot] or github-actions[bot] commits were detected on main.
Complexity
The reactive core (packages/solid/src/reactive/signal.ts) is the dominant complexity hotspot at 1,821 lines. It encapsulates the entire reactive graph algorithm, transition logic, error boundary handling, and dev hooks in a single file by design — splitting it would force the internal types (Owner, Computation, SignalState, TransitionState) to leak across module boundaries.
Tests vs source
15 spec/bench/type-test files cover 89 source files, but the LOC ratio (~6,300 test lines vs ~16,300 source lines) tells the real story: each spec is large and exercises many code paths. packages/solid/test/signals.spec.ts alone has 836 lines and over 100 individual test cases.
TODO / FIXME / HACK
A rg -c "TODO|FIXME|HACK" sweep across packages/ finds:
| File | Hits |
|---|---|
packages/solid/test/signals.type-tests.ts |
24 |
packages/solid/store/test/store.spec.ts |
5 |
packages/solid/src/reactive/signal.ts |
3 |
packages/solid/bench/libraries/kairo.cjs |
3 |
packages/solid/store/test/modifiers.spec.ts (commented in code) |
tracked separately |
| Other (single hits) | 4 |
Most of these are inside test fixtures and benchmarks rather than production source. The 3 hits in signal.ts are the closest thing to in-runtime tech debt markers.
External dependencies
packages/solid/package.json runtime dependencies:
| Dependency | Version | Used for |
|---|---|---|
csstype |
^3.1.0 |
TypeScript types for style attribute |
seroval |
~1.5.0 |
Promise / resource serialization for streaming SSR |
seroval-plugins |
~1.5.0 |
Web-specific seroval plugins |
packages/babel-preset-solid/package.json runtime dependency:
| Dependency | Version |
|---|---|
babel-plugin-jsx-dom-expressions |
^0.40.6 |
packages/solid-element/package.json runtime dependency:
| Dependency | Version |
|---|---|
component-register |
^0.8.7 |
The dom-expressions, hyper-dom-expressions, and lit-dom-expressions packages are dev-only at this layer — their runtime is bundled via Rollup nodeResolve into solid-js/web, solid-js/h, and solid-js/html respectively.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.