Open-Source Wikis

/

Solid

/

By the numbers

solidjs/solid

By the numbers

A quantitative snapshot of the solidjs/solid repository.

Data collected on 2026-04-30, against main at commit 878f94a.

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.

By the numbers – Solid wiki | Factory