## Introduction

Developers these days are spoiled with choice when it comes to selecting an MV* framework for structuring and organizing their JavaScript web apps.

Backbone, Ember, AngularJS… the list of new and stable solutions continues to grow, but just how do you decide on which to use in a sea of so many options?

To help solve this problem, we created TodoMVC - a project which offers the same Todo application implemented using MV* concepts in most of the popular JavaScript MV* frameworks of today.

## Examples

JavaScript Compile-to-JS Labs

These are examples written in pure JavaScript.

- Backbone.js
- AngularJS
- Ember.js
- KnockoutJS
- Dojo
- Knockback.js
- CanJS
- Polymer
- React
- Mithril
- Ampersand
- Flight
- Vue.js
- Marionette.js
- TroopJS + RequireJS

These are applications written in programming languages that compile to JavaScript.

- Spine
- Dart
- GWT
- Closure
- Elm
- AngularDart
- TypeScript
  + Backbone.js
- TypeScript
  + AngularJS
- TypeScript
  + React
- Serenade.js
- Reagent
- Scala.js + React
- Scala.js + Binding.scala
- js_of_ocaml
- Humble + GopherJS

These are examples written in JavaScript that we are still evaluating.

- Chaplin + Brunch
- Backbone.js + RequireJS
- KnockoutJS + RequireJS
- AngularJS + RequireJS
- CanJS + RequireJS
- soma.js + RequireJS
- Durandal
- Lavaca + RequireJS
- cujoJS
- Sammy.js
- soma.js
- DUEL
- Kendo UI
- PureMVC
- Olives
- Dijon
- rAppid.js
- DeftJS + ExtJS
- Aria Templates
- Enyo +
  Backbone.js
- SAPUI5
- Exoskeleton
- Atma.js
- Ractive.js
- React + Alt
- React +
  Backbone.js
- Aurelia
- FOAM
- WebRx
- Angular 2.0
- Riot
- JSBlocks

- R = App also demonstrates routing

## Real-time

- SocketStream
- Firebase + AngularJS

## Node.js

- Express + gcloud-node

## Compare these to a non-framework implementation

- Vanilla JS
- Vanilla ES6
- jQuery

## New in 1.3

- We now have 64 applications. New since 1.3 ▼
  - AngularDart
  - Durandel
  - Atma.js
  - Exoskeleton
  - ComponentJS
  - Binding.scala
- Updates have been made to apps including Vanilla, Angular, React, Backbone, Ember, jQuery & many more.
- The knockoutjs_classBindingProvider application has been removed.

## Selecting a Framework

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.

## Getting Involved

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.

Submit Pull Request »