HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
swannodette
todomvc
JavaScript2013–2013
swannodette / todomvc

todomvc

Helping you select an MV* framework - Todo apps for Backbone.js, Ember.js, AngularJS, Spine and many more

3Distinct people
3Mentions
0Explicit recommenders
142GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Helping you select an MV* framework - Todo apps for Backbone.js, Ember.js, AngularJS, Spine and many more

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by 3-hour interval3 dated mentions

Observed mentions: 2013-12-19 21:17:56 UTC to 2013-12-21 08:00:17 UTC.

012013-12-19 21:00:00 UTC to 2013-12-20 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsDec 19, 21:002013-12-20 00:00:00 UTC to 2013-12-20 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-12-20 03:00:00 UTC to 2013-12-20 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-12-20 06:00:00 UTC to 2013-12-20 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-12-20 09:00:00 UTC to 2013-12-20 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-12-20 12:00:00 UTC to 2013-12-20 15:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsDec 20, 12:002013-12-20 15:00:00 UTC to 2013-12-20 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-12-20 18:00:00 UTC to 2013-12-20 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-12-20 21:00:00 UTC to 2013-12-21 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-12-21 00:00:00 UTC to 2013-12-21 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-12-21 03:00:00 UTC to 2013-12-21 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-12-21 06:00:00 UTC to 2013-12-21 09:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsDec 21, 06:00

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Dec 19, 21:002013-12-19 21:00:00 UTC2013-12-20 00:00:00 UTC101
Dec 20, 00:002013-12-20 00:00:00 UTC2013-12-20 03:00:00 UTC000
Dec 20, 03:002013-12-20 03:00:00 UTC2013-12-20 06:00:00 UTC000
Dec 20, 06:002013-12-20 06:00:00 UTC2013-12-20 09:00:00 UTC000
Dec 20, 09:002013-12-20 09:00:00 UTC2013-12-20 12:00:00 UTC000
Dec 20, 12:002013-12-20 12:00:00 UTC2013-12-20 15:00:00 UTC101
Dec 20, 15:002013-12-20 15:00:00 UTC2013-12-20 18:00:00 UTC000
Dec 20, 18:002013-12-20 18:00:00 UTC2013-12-20 21:00:00 UTC000
Dec 20, 21:002013-12-20 21:00:00 UTC2013-12-21 00:00:00 UTC000
Dec 21, 00:002013-12-21 00:00:00 UTC2013-12-21 03:00:00 UTC000
Dec 21, 03:002013-12-21 03:00:00 UTC2013-12-21 06:00:00 UTC000
Dec 21, 06:002013-12-21 06:00:00 UTC2013-12-21 09:00:00 UTC101

What Hacker News says

3 sources
This sounds like a case of simple, not easy: http://www.infoq.com/presentations/Simple-Made-Easy You could add a timestamp to each todo with two changes: https://github.com/swannodette/todomvc/blob/gh-pages/labs/ar... (defn handle-new-todo-keydown [e {:keys [todos] :as app} owner] ... (om/update! app [:todos] conj {:id (guid) :title (.-value new-field) :created-at (js/Date.) ;; <-- add this line :completed false :order (count todos)}) ...) https://github.com/swannodette/todomvc/blob/gh-pages/labs/ar... (defn todo-item [{:keys [id title editing completed] :as todo} {:keys [comm]}] ... ;; change this line (dom/label #js {:onDoubleClick #(handle-edit % todo m)} (str (:title todo) (:created-at todo))) ...)
In The Future of JavaScript MVCs
It may be because I'm not familiar with ClojureScript's syntax, but the whole sample application code seems like a real mess to me. It's full of boilerplate code and it is happily mixing application logic with DOM rendering. [1] Compare this with an alternative JS MVC framework (like, say, Knockout.js) and another modern "javascript-compatible" language (like, say, TypeScript), and see for yourself. [2] While I didn't run any benchmarks, it's safe to assume the Om demo is faster. However which sample do you think is easier to write, test and maintain? If "The Future of JavaScript MVC Frameworks" is supposed to look like the Om sample, sorry but I'll pass. [1]: https://github.com/swannodette/todomvc/tree/gh-pages/labs/ar... [2]: https://github.com/jpatte/TodoMvc-Knockout.ts
In The Future of JavaScript MVCs
Om looks very interesting and seems to handle exactly what I've been looking for. We have reactive widgets, which is great for making changes in the data automatically update the UI. But the hard part is closing the loop: how does the widget communicate back to the data about changes? It would be interesting if we had a zipper-like abstraction, so that the widget gets handed both its data and a function to call when it wants to change just its data. Then that function is smart enough to go find the right place in the big data structure to go do the replace. Edit: Ok, I now see how the Om todo example is handling update, and it's really cool. It creates a set of channels that encapsulate the knowledge of how to handle each type of change to a todo [0]. That gets passed in to the todo widget as "chans" and the widget sends messages to it in
Read the rest
its event handlers [1]. I wonder if this whole channel CRUD abstraction is general enough to make it part of Om or another layer so that it didn't have to be recreated each time. [0] https://github.com/swannodette/todomvc/blob/gh-pages/labs/ar... [1] https://github.com/swannodette/todomvc/blob/om/labs/architec...
In The Future of JavaScript MVCs

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.