mrkeyoor.com_
Sun 20 Sept 09:13 UTC
Webevaluationupdated 27 Aug 2026

svelte review

Svelte is a web user-interface framework whose compiler turns components written with HTML, CSS, and JavaScript into code that updates the browser DOM. It handles the component layer; SvelteKit is the companion project recommended for routing, server rendering, and complete applications.

+26stars / 7d
Verdict

Our Svelte build passed in 133 seconds, and 7,657 tests passed before the suite exited at Chromium launch with 165 skipped. Svelte 5 is a good choice for teams that like its compiled components and are ready to use SvelteKit for full applications. Existing Svelte 4 code deserves a migration rehearsal because the compatibility story is thoughtful, not automatic.

We ran it

Lab card: what happened when we ran svelteScreenshot of svelte (svelte.dev)
Install✓ · 16s425 packages · 219 MB
Build✓ · 133s
Tests✗ · 108s7657 passed · 0 failed · 165 skipped of 7822 (vitest)
Repo9080 files~222,743 lines of source · 7.1 MB · 4 CI workflows

Answers from our run

Does svelte build from source?

Dependencies installed in 16 seconds (425 packages), and the build succeeded in 133 seconds. We cloned commit 15720b1 into a clean Debian container with 3 CPUs and no project-specific setup.

Do svelte's tests pass?

Yes: 7657 of 7822 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use svelte?

Teams that require drop-in compatibility with a React or Vue component catalog: Svelte components use a different compiler and component model.

What are the alternatives to svelte?

React, Vue, Solid. Our Svelte build passed in 133 seconds, and 7,657 tests passed before the suite exited at Chromium launch with 165 skipped.

Setup4/516-second install; full app setup belongs to SvelteKit
Docs5/5Tutorial, reference, and detailed Svelte 5 migration guide
Community5/587,992 stars and a push on 2026-08-26
Maturity4/57,657 tests passed; browser test file still stopped the suite

Discussed on

  1. hnTS to JSDoc Conversion222 points
  2. hnTenets201 points
  3. hnAsk HN: What are your experiences with Svelte (JS framework)110 points
  4. hnSvelte: $derived can now be overwritten51 points
  5. hnRich Harris: Svelte parses HTML all wrong26 points

Who it’s for

Front-end developers who want component files close to ordinary HTML, CSS, and JavaScript.
Teams comfortable making compilation part of their web build.
Projects that want explicit reactive state through Svelte 5 runes.
Full-stack teams willing to adopt SvelteKit alongside the core framework.

Who it’s NOT for

Teams that require drop-in compatibility with a React or Vue component catalog: Svelte components use a different compiler and component model.
Svelte 4 applications expecting a completely automatic upgrade: the migration guide says event dispatchers and lifecycle hooks can require manual work.
Contributors unwilling to install browser tooling: the test guide requires Chromium through Playwright, and our suite stopped at chromium.launch().
Projects that want one package to define the entire application stack: the package README directs full applications to SvelteKit.
Libraries that depend on the old class component API: Svelte 5 components are functions, with compatibility helpers adding overhead where needed.

Setup reality

Our sandbox installed 425 pnpm packages in 16 seconds and used 219 MB. The build succeeded in 133 seconds. Tests exited with code 1 after 108 seconds: Vitest reported 7,657 passed, 0 failed, and 165 skipped out of 7,822, but 1 of 34 test files failed while calling chromium.launch().

Application users normally start through npx sv create, then choose SvelteKit and an adapter for their deployment. Contributors need pnpm, the monorepo toolchain, and Chromium installed through Playwright for the complete test command. The package itself requires Node 18 or newer.

Svelte 5 supports legacy Svelte 4 syntax during migration, but the new model changes state, derived values, effects, props, events, slots, and component instantiation. The migration script handles repetitive edits; its guide identifies cases that still need judgment and cleanup.

Components compile into targeted browser updates

Svelte lets developers write components with familiar HTML, CSS, and JavaScript, then compiles them into JavaScript that updates the DOM. The compiler can analyze component structure before the browser runs it, which gives Svelte a different feel from a library centered on runtime component calls. Scoped styles, templates, state, events, transitions, and reusable components live in the same file without forcing every expression into JSX.

The framework repository is relatively lean on disk. Our commit 15720b1 checkout held 9,080 files, roughly 222,743 lines of source, and occupied 7.1 MB. It is still a pnpm workspace with compiler code, runtime code, types, tests, documentation, and tooling. Application developers consume the published package and starter tools; these source measurements describe the contributor checkout rather than the size of a generated site or browser bundle.

SvelteKit supplies the application structure

The core package is a UI framework and compiler. Its own package README recommends creating complete applications through npx sv create, which leads to SvelteKit. SvelteKit adds routing, data loading, server rendering, form handling, and deployment adapters. That separation is healthy, but it matters when comparing Svelte with a product that bundles every application convention under one package name.

A team evaluating Svelte should prototype the actual SvelteKit target, including its chosen adapter, authentication, deployment host, and server boundaries. Our 133-second framework build says nothing about a generated application's response time or JavaScript payload. Compiler output varies with the components and dependencies supplied to it. Claims that Svelte is always smaller or faster need an application-level comparison, which our lab did not run.

What happened when we ran it

Our sandbox installed 425 pnpm packages in 16 seconds and used 219 MB on disk. The build completed successfully in 133 seconds on 3 CPUs with 8 GB of RAM. We tested commit 15720b1 in a fresh unprivileged Debian container based on Node 22, without credentials. The repository had 4 CI workflow files and workspace configuration, but no root tests directory in the scan.

The test command exited with code 1 after 108 seconds. Vitest reported 7,657 passed, 0 failed, and 165 skipped out of 7,822 individual tests. One test file failed while its setup called chromium.launch(), leaving 33 files passed out of 34. The supplied log tail does not say why Chromium failed to launch, so the defensible result is that assertions passed while the browser-dependent file still made the overall command fail.

The contributing guide lists a Playwright Chromium installation as a prerequisite for pnpm test. That fits the location of the failure, but it does not prove what was absent or broken in our container. A new contributor should follow the browser setup before expecting the root suite to pass. The 7,657 successful tests show wide exercised behavior, while exit code 1 remains a real finding rather than a pass with a footnote.

Svelte 5 changes the reactivity vocabulary

Svelte 5 introduces runes such as $state, $derived, $effect, and $props. They replace or refine older conventions including implicitly reactive top-level variables, $: statements, and export let props. The change makes reactive intent explicit and allows the same state model outside a component's top level. It also means experienced Svelte 4 developers must relearn some concise syntax they may have valued.

Events changed too. DOM event directives become properties, component dispatchers give way to callback props, and slots are deprecated in favor of snippets. Svelte 5 components are functions instead of classes. Those decisions can improve typing and composition, but they reach into component libraries, test helpers, manual mounting, and server rendering. A green application compile is not enough to show that every consumer observes identical behavior after migration.

The migration script cannot decide every intent

Svelte 5 still accepts Svelte 4 syntax, and old and new components can coexist. That gives teams room to upgrade the runtime before rewriting every component. The sv migrate svelte-5 command can convert common state declarations, event attributes, and obvious component creation. This is a gentler path than a flag day, especially for applications with a large internal component library.

The migration guide names several manual cases. It does not convert createEventDispatcher, because changing a library's event contract can break consumers it cannot inspect. It also cannot reliably convert beforeUpdate and afterUpdate, where the intended timing must be understood. Some $: blocks become a legacy run helper for later cleanup. Compatibility options can preserve the Svelte 4 class API, but they add overhead to each affected component.

Patch releases still touch compiler edge cases

Release svelte@5.56.10 was published on 2026-08-20. Its notes cover CSS escaping, selector parsing, server compilation, async props, event cleanup, derived state, logical assignments, and linear-time analysis. That is normal work for a compiler operating across JavaScript, CSS, HTML, browser behavior, and server rendering. It also argues for pinning versions and running application tests before routine upgrades.

GitHub recorded 87,992 stars, 1,053 open issues and pull requests, and a last push on 2026-08-26. The open count combines change proposals with bug reports and should not be called a defect count. Svelte has active maintenance, extensive tests, MIT licensing, and serious migration documentation. Choose it because the component model makes your team productive. Our 16-second install lowers the cost of trying it, while the failed browser file is a reminder to test the real toolchain.

Alternatives

ProjectWhat it isPick it when
React gh↗A component library with the largest surrounding JavaScript UI ecosystem.pick this instead when hiring reach and third-party component compatibility outweigh Svelte's compiler model.
Vue gh↗A progressive component framework with templates, reactivity, and an official application ecosystem.pick this instead when you want template components without Svelte's compile-specific syntax and migration path.
Solid gh↗A fine-grained reactive UI library with JSX and no virtual DOM.pick this instead when JSX is preferred but precise reactive updates are still the goal.

Sources

  1. Svelte README
  2. Svelte repository
  3. Svelte package README
  4. Svelte 5 migration guide
  5. Svelte 5.56.10 release

More web reviews

vueuse · react-redux · anime · element-plus · recharts · WebKit · the whole board →