in the page so this eliminates needing to issue a separate request to the server to get the data to initialize the page which dramatically reduces the time for the UI to be fully ready. And the backend is RavenDB so we get to work directly with our rich data models partitioned logically as opposed partitioned batshit crazy the way rich models get partitioned in RDBMS and ORMs across many tables. We're seeing much better performance with Sencha than is being reported above with other frameworks. Sencha 4.x has MVC architecture while the still-supported 3.x is more of a library. We're seeing initial page loading of around 5-6 seconds and sub-second reloads due to it's re-use of the js objects. And this is with the debug libraries which are not minified. Our sites are 99% client -side for the gui with a MySQL back end and a thin PHP ORM layer in-between. You can use any part of CanJS on it's own via it's builder so nothing is really mandatory. CanJS supports IE6. I think library support is a "bullet point" of CanJS. It supports Dojo/Mootools/YUI/jQuery/Zepto. And by support, I don't mean just it runs along-side. I mean you can use it's templated events to listen to a Dojo or YUI widget event. It will use swap dojo's methods for it's own. Just thought Id' mention I'm using Hasher.js with KnockoutJs for routing and it's worked well. I've used sammy.js, but wanted something more directly related to just routing. History.js