sveltejs/svelte
web development for the rest of us
How svelte is put together
This is the sveltejs/svelte monorepo containing the Svelte 5 framework: a JavaScript compiler that transforms .svelte single-file components into optimized client and server code, plus the accompanying runtime. The primary language is plain ES-module JavaScript with heavy JSDoc typing checked by TypeScript (no .ts source files in the package itself). The compiler pipeline lives under packages/svelte/src/compiler (parse -> phases -> transform -> print via esrap), while the runtime is split into client (packages/svelte/src/internal/client) and server (SSR) implementations exposed through a granular package.json exports map with browser/worker/default conditions. Supporting areas include a Vite-based playground/sandbox, benchmarking harnesses, and Changesets-driven versioning across the pnpm workspace.
Languages
Frameworks
Infrastructure
Major components
Compiler core (packages/svelte/src/compiler)
Parses and compiles .svelte files through phases (bindings, css, nodes, patterns, scope), validation, and code printing, exposing compile(), parse(), preprocess(), walk(), and migrate APIs.
Client runtime (src/internal/client + src/reactivity)
Implements the signals-based fine-grained reactivity engine, effects, DOM template hydration/update logic, and reactive built-ins (Map/Set/Date/URL/MediaQuery).
Server runtime / SSR (src/server, src/internal/server)
Renders components to HTML strings on Node with escaping and payload serialization, exposed via svelte/server.
Public runtime modules (animate, attachments, easing, events, motion, store, transition)
User-facing helper libraries: tweened/spring motion, transitions and animations, actions, attachments, event helpers, and legacy stores.
Legacy compatibility layer (src/legacy)
Provides Svelte 4-style component semantics (legacy-client/legacy-server) for backwards compatibility mode.
Playground sandbox (playgrounds/sandbox)
Vite dev/demo app with SSR scripts used to exercise experimental async features and inspector tooling against the workspace svelte package.
Benchmarking harness (benchmarking/)
Runs performance benchmarks per git branch, forks a runner, writes CPU profiles and JSON results, and generates comparison reports.
Build & DX tooling (scripts, rollup config, message generation)
Bundles the UMD compiler, generates version/browser-support/type artifacts, processes error/warning message templates, and enforces treeshakeability.
A quiet week focused on performance tweaks and a batch of small but meaningful rendering and reactivity fixes.
5 weeksWeek of 2026-08-24
Week of 2026-08-24latest
A quiet week focused on performance tweaks and a batch of small but meaningful rendering and reactivity fixes.
Week of 2026-08-17
A very busy week (47 commits) blending a version release, numerous fixes across CSS, SSR, and async rendering, plus a wave of documentation improvements.
Week of 2026-08-10
Nine targeted fixes shipped, mostly around whitespace/comment handling in the printer and subtle state-tracking bugs.
Week of 2026-08-03
A minimal week with a single fix guarding against conflicting pending batches.
Week of 2026-07-20
Two package releases landed along with supply-chain hardening and hydration fixes.
The past several weeks on Svelte were dominated by a steady stream of bug fixes polishing rendering, hydration, and reactivity edge cases, alongside a notable cluster of performance improvements in mid-to-late August. Documentation also received sustained attention, with many clarifications to guides about runes, effects, transitions, and context. A few new public exports from svelte/server and supply-chain hardening rounded out the period.
Week by week
2026-08-24A quiet week focused on performance tweaks and a batch of small but meaningful rendering and reactivity fixes.latest6 changes
Refactor
Faster select/option value handling
The compiler now reuses cached values when checking whether a select or option's value changed, avoiding redundant work.
Refactor
Faster single-comment templates
Templates containing just one comment now use a lighter-weight creation path for better speed.
Fix
More robust custom element slots
Svelte custom elements now render their slots more reliably across tricky scenarios.
Fix
Radio inputs keep their checked state after hydration
Radio buttons using spread attributes no longer lose their defaultChecked setting when the page hydrates.
Fix
Reactions that throw still record their dependencies
When a reactive computation errors out, its tracked dependencies are committed so future updates behave correctly.
Fix
SvelteDate changes are properly tracked
Snapshots of SvelteDate objects are now tracked by reactions, so date-driven UI updates reliably.
2026-08-17A very busy week (47 commits) blending a version release, numerous fixes across CSS, SSR, and async rendering, plus a wave of documentation improvements.6 changes
Feature
New server-side exports
RenderOutput, SyncRenderOutput, Csp, and Sha256Source are now exported from svelte/server for advanced server-rendering use cases.
Fix
Scoped CSS no longer leaks into svelte:head content
Elements inside <svelte:head> no longer receive scoped style classes they shouldn't have.
Fix
Server renders that fail still run onDestroy callbacks
Cleanup callbacks now fire even when a server-side render throws an error partway through.
Refactor
Legacy reactive statements scale linearly
Map lookups in old-style reactive statements were optimized from quadratic to linear time, speeding up large legacy apps.
Refactor
Async blocker analysis made linear
Analysis of async blockers was rewritten to avoid slow nested loops on complex components.
Docs
Docs clarified across runes, effects, and transitions
Multiple documentation updates explained easing functions, $bindable requirements, $effect.pre timing, $state generics, and reduced-motion behavior for transitions.
2026-08-10Nine targeted fixes shipped, mostly around whitespace/comment handling in the printer and subtle state-tracking bugs.6 changes
Fix
Stale capture listeners removed from spread attributes
Old event-capture listeners are cleaned up when spread attributes change, preventing ghost handlers.
Fix
Effect teardowns see pre-flush values
Effect cleanup functions now receive the value from before any writes in the current flush, matching expectations.
Fix
CSS custom properties with falsy values work on components
Custom properties set to values like 0 or empty strings are now correctly applied to component elements.
Fix
Better whitespace handling in the printer
The code printer handles whitespace more faithfully, preserving formatting intent.
Fix
CSS comments preserved in the AST printer
Comments inside CSS are no longer dropped when code is printed back out.
Fix
No duplicate comments in attributes
Comments within attributes are emitted once instead of being duplicated.
2026-08-03A minimal week with a single fix guarding against conflicting pending batches.1 change
Fix
Controlled each blocks wait for pending batches
The fast path for controlled each blocks is skipped while another update batch is pending, avoiding inconsistent DOM updates.
2026-07-20Two package releases landed along with supply-chain hardening and hydration fixes.4 changes
Chore
Supply chain hardening
Build and release processes were tightened to reduce risk from dependency tampering.
Fix
Working reset for failed hydration boundaries
When hydration fails inside an error boundary, onerror is called and reset now actually works.
Fix
Select selection preserved with spread attributes
Dropdown selections no longer get lost when options are rendered via spread attributes.
Chore
Version packages released
Two routine version-package releases published the accumulated fixes.
Dependencies and code review
Dependency advisories
Security Watch
No known advisories across 18 scanned dependencies.
No known advisories in the scanned dependencies.
Code review
No concrete code-level issues confirmed.
Get this report every week for your repos.
GitZoid learns each repo, reports what changed, and flags what needs attention. One flat price for the whole team.
$19 a month, flat · First 10 outputs free · No card required