index.html
Developers have a number of choices today when it comes to selecting a JavaScript framework or UI library for building scalable web apps.
React, Vue, Svelte, Angular, Solid, Lit…the list of solutions continues to grow, but just how do you decide on which to use in a sea of so many options?
To help you understand the options, we created TodoMVC - a project which has offered the same Todo applications implemented in popular JavaScript frameworks for over a decade.
TodoMVC is useful for comparing syntax and solutions, is officially used in cross-browser benchmarks (e.g. Speedometer) and aims to stay up to date as trends change over time.
JavaScriptCompile-to-JSLabs
These are examples written in pure JavaScript.
These are applications written in programming languages that compile to JavaScript.
These are examples written in JavaScript that we are still evaluating.
Each of the actively-maintained example apps has been brought up to its current stable line, with idiomatic code for the modern version.
Examples â–¼
Angular 21 (new @angular/build builder)
React 19 (createRoot, react-router 7)
Vue 3.5 (Vite 8)
Svelte 5 (full runes migration)
React Redux 9 with Redux Toolkit 2
The Cypress test suite is functional again on current Node and now drives the official TodoMVC behavioural spec across every maintained app. Around twenty real spec deviations (trim on save, save on blur, escape handling, accessibility labels, "Clear completed" capitalisation) were caught and fixed along the way.
Dropped gulp 3, Selenium scaffolding, Bower-only deps, and other long-stale infrastructure from the test path. npm run test:all works on a fresh clone again.
Once you've downloaded the latest release and played around with the apps, you'll want to decide on a specific framework to try out.
Study the syntax required for defining models, views and (where applicable) controllers and classes in the frameworks you're interested in and try your hand at editing the code to see how it feels using it first-hand.
Please ensure that if you're happy with this, you do spend more time investigating the framework (including reading the official docs, the source and its complete feature list). There's often a lot more to a framework than what we present in our examples.
Is there a bug we haven't fixed or an MV* framework you feel would benefit from being included in TodoMVC?
If so, feel free to fork the repo, read our contribution guidelines, and submit a pull request — we'll be happy to review it for inclusion.
Make sure you use the template as a starting point and read the app specification.
Want a TodoMVC implementation in a framework that isn't on this page yet, or one that exactly matches your team's stack? The TodoMVC app spec is plain Markdown and reads cleanly into any modern AI coding agent (Claude Code, Cursor, GitHub Copilot, Codex, Gemini Code Assist, Aider, and so on). Drop the line below into your agent of choice and swap in the framework you want:
Build a TodoMVC app following this spec https://raw.githubusercontent.com/tastejs/todomvc/refs/heads/master/app-spec.md in React
Replace React with Vue, Svelte, Angular, Solid, Lit, Preact, Qwik, or any framework or language you want to evaluate. The spec covers the same behavioural surface every example on this page implements (add, edit, toggle, filter, route, clear completed), so the result is directly comparable to the reference apps above.
This makes TodoMVC useful as both a teaching artifact and a benchmarkable prompt: a quick way to feel out how a new framework reads, or how a given AI agent handles a non-trivial-but-bounded UI task.
TodoMVC was created in 2011 to give developers a single, consistent application they could re-implement in any framework, side by side, on equal footing. Over the years since, the humble Todo app has become the de-facto teaching example for UI frameworks and component-driven architecture: it is small enough to fit in a single screen of code, but large enough to exercise state management, list rendering, routing, persistence, editing, and event handling. That has made it the reference point developers reach for when learning a new framework, and the reference point framework authors reach for when explaining theirs.
Major engineering organizations across the industry use TodoMVC apps in onboarding, internal training, conference talks, framework documentation, and live demos: from teams at Google , Apple , Microsoft , and Meta to research groups at OpenAI and the wider open-source community. If you have ever sat through "here is how this framework feels", odds are good the example on screen was a TodoMVC app.
TodoMVC has also become foundational to how the web platform itself is measured. Since Speedometer 1.0 , the cross-browser benchmark every major browser engine uses to optimize UI performance has been built around TodoMVC implementations. Each generation of Speedometer has expanded that core: Speedometer 2.0 rebuilt the suite around modernized TodoMVC apps in the popular frameworks of the day, and Speedometer 3.0 further expanded the workloads to better reflect the modern web. Improvements to JavaScript engines, layout, rendering, and DOM performance in Chromium, WebKit, and Gecko are routinely validated against TodoMVC code paths. The project's reach goes well beyond the apps you see on this page.