
Helping you select a JS MV* framework - wiradikusuma
http://www.todomvc.com/
======
danielhunt
This is a very useful resource, and it really is great to see it being done in
such a professional manner, but I can't help but wish for the end of these
Todo<blah> examples.

A todo app simply isn't complex enough to give users any sort of insight into
which framework to choose. There are _so_ many other areas that are important
yet completely uncovered in the code - things like authentication, ACL, mobile
support, and plenty more examples that I just can't think of off the top of my
head right now.

The idea behind this is fantastic, the execution is incredible, but the
project choice is too limited in my eyes.

~~~
joelhooks
The difficulty is that anything more complex is TOO complex as an example.
This is meant to demonstrate the MVC of a thing. With this example, I can
quickly examine the structure and feel of a given tool, an hold the entire
example in my head. When you start stacking all of the other bits on too, this
starts to become more difficult. What TodoMVC allows is a quick survey to
narrow down contenders. At that point I can examine the other crucial aspects
and understand if they work for my project.

~~~
AndrewNCarr
>The difficulty is that anything more complex is TOO complex as an example.

This sums it up. "Todo" examples are intended as a web/js-framework equivalent
to the traditional "Hello World" example used to introduce a programming
language. "Todo" defines a basic unit of usefulness that can be easily
implemented to give the target audience an idea of what a given framework
"looks like". It isn't perfect, but it is a starting point for framework
comparison.

------
mofle
Maintainer here. We are fully aware that todo apps are not enough to get a
deep insight into frameworks. Think of it more as getting a little taste of
each framework which will help you narrow down the choices. We're planning
more fully featured apps in the future with the most popular frameworks. Stay
tuned.

~~~
chrisboesing
Thanks a lot for doing this.

I'm trying to choose a framework right now and TodoMVC is really helping in
doing so.

I have one question though: Would you mind if I ported your apps over to
CoffeeScript? I prefer CoffeeScript over JavaScript, but haven't done that
much work in CoffeeScript. I think porting the apps would be a great learning
experience and would help others too. Of course I would put it up on Github.

~~~
mofle
Sure of course. Feel free to!

Be sure to add it to our wiki when it's done:
[https://github.com/addyosmani/todomvc/wiki/Other-
implementat...](https://github.com/addyosmani/todomvc/wiki/Other-
implementations)

------
dirtyaura
Most of these MVC frameworks seem to add a lot of extra structure, which I
don't like. Compare e.g. Backbone
([https://github.com/addyosmani/todomvc/tree/gh-
pages/architec...](https://github.com/addyosmani/todomvc/tree/gh-
pages/architecture-examples/backbone)) or AngularJs
([https://github.com/addyosmani/todomvc/tree/gh-
pages/architec...](https://github.com/addyosmani/todomvc/tree/gh-
pages/architecture-examples/angularjs)) implementations to the simple jQuery
implementation ([https://github.com/addyosmani/todomvc/tree/gh-
pages/architec...](https://github.com/addyosmani/todomvc/tree/gh-
pages/architecture-examples/jquery)).

Are there any good JS libraries that take more Unix-like approach, i.e. they
do one thing and they do it well? For example a library that would implement
just the Model part: syncing data between server and client. Or another one
that would implement for example a better abstractions for event handling
(event-firing states, futures, etc.), but nothing more.

~~~
jurre
I think the problem is mostly that a todo list is too simple an example for
these frameworks and that's why it seems like they're just adding extra
structure. That extra structure is (hopefully) going to save you a lot of code
once your app gets more complex.

------
wheaties
Wow, the Angular version is so small. Very impressed with the clean, readable,
and terse code. Thanks guys.

~~~
johne20
We recently had to make a choice between frameworks and my colleague and I
came from a jquery/rails background, virtually no practical experience with js
frameworks. We started with backbone.js, but I was immediately frustrated. We
then switched to angular.js after going through the tutorial ~2hrs.

Four months and a lot of learning later, I am very happy with our choice. If I
ever get some spare time I want to write some posts on angular from a rails
perspective. I found the rails nomenclature I was used to didn't directly
translate to angular.

One other reason we chose angular, it is backed by Google. The meetups I have
attended in Seattle keep growing steadily and the mailing list is great.

~~~
delambo
> One other reason we chose angular, it is backed by Google.

I like Google for many things - there is no doubt they have some solid
developers and have released great products - but they have a poor track
record with frontend framework adoption. For example:

\- GWT (not a lot of adoption and waning)

\- Closure Tools (except for the great Google products that are built with
this library and closure compiler it hasn't had a lot of adoption)

\- Dart (verdict is still out on this one but it doesn't look good)

------
KaoruAoiShiho
Most obvious telltale that todo is too simplistic is that the jquery version
is shorter than many of the framework versions.

~~~
lucisferre
It's also the most obvious telltale that most of these frameworks are
completely unnecessary for many front-end scenarios. I find a good portion of
the front-end work I do does not benefit even from the more lightweight ones
like Backbone in the least.

~~~
mofle
I used to feel like that too, but Backbone is really lightweight and
unopinionated. Check out this step-by-step guide on how to convert a jQuery
app to Backbone:
[https://github.com/kjbekkelund/writings/blob/master/publishe...](https://github.com/kjbekkelund/writings/blob/master/published/understanding-
backbone.md/)

~~~
lucisferre
I've used Backbone extensively before. It was actually the other way around
where I didn't need 90% of what backbone did for what I was doing and just
switched back to jQuery.

For situations where I actually do want some kind of client-to-server data-
binding, I generally prefer it to provide two-way view<->model binding so I've
been leaning towards Angular (as heavy as it is) and Knockout.

------
jashkenas
TodoMVC is great for getting a rough idea, but as discussed in these comments,
it's not terribly helpful for selecting a library. What _is_ helpful? Looking
at the diversity of different sorts of apps and projects that the library has
been used to build. For example:

<http://backbonejs.org/#examples>

<http://builtwith.angularjs.org/>

<http://developer.yahoo.com/yui/poweredby/>

------
nigma
No doubt this is a great resource for getting to know very basics of all these
frameworks.

The thing is that the TODO application is way too simple and does not require
solving any meaningful problems. A much better and more realistic sample app
would include at least handling basic relations between objects like users
commenting under articles or voting on submissions. Say simple HN in JS MV*
implementation would be a lot better resource.

------
daleharvey
I asked about this on twitter recently but no responses.

Can anyone list their absolute favourite open source client side web based
todo lists? It seems like there would be a lot as its everyones favourite
personal project (I do have my own). however most seem to be extremely basic.

I am mostly judging by UX features and polish, something that works really
well webbased + tablet + mobile would be a plus.

If anyone is interested in why, I am an author of pouchdb, a javascript
library that aims to make syncing offline apps incredibly easy, I plan to take
a standalone todo app and modify it to sync the data to see how easy it is /
make a tutorial.

------
jseims
What I would find more important than a comparison of technical features is a
comparison of their active communities.

How many people are using each project, how active is development, that sort
of thing.

~~~
wheaties
At good metric for an indirect peg on number of people using something is the
"star" count on Github. It's not an ideal metric but it is a reasonable proxy.
The other thing I'd look at which requires more effort is to look at the
number of subscribers to the mailing list (if you can get it.)

------
lsiebert
Went to a session at Silicon Valley Code Camp, where this was mentioned. It
seems like a good intermediary between code inspection and anecdotal
recommendations.

------
hayksaakian
To those more well versed in JS than I: Which of these frameworks have the
best support for client side persistence? I'm thinking something like active
record for indexeddb/websql.

