PouchDB (Portable CouchDB JavaScript implementation)
github.com
github.com
I feel like this was always sort of conspicuous that their "killer feature" wasn't even possible. But this code seems like a major step in that direction... and if they can deliver on that promise it gives CouchDB a serious edge over other persistence solutions in terms of code simplicity for offline-capable web apps.
And I want offline-capable web apps to make native apps fade into obscurity, so I like that.
I'd call it smalldata but you already defined it http://smalldata.org/... though your definition hits other more narrow points about small data. Still, an amazing concept after some research and prototyping.
The most important part of replication is to have an algorithm that's capable of merging two document histories that are not identical. This core bit of CouchDB is quite important and often overlooked in terms of its replication scheme. Randal Leeds is currently hacking this into PouchDB and I'm quite excited to see the algorithm in a non-functional language so that more people can see its simplicity without worrying about learning a new programming paradigm.
On the other hand the atomic update of the two indexes is quite important for efficient replication. Without the atomic update of a by-update-sequence index it would require a full table scan for each replication. Its definitely a necessary optimization, but not a sufficient optimization. The per-doc revision history merging is the special sauce that makes things work.
In unrelated news:
The real win will be when a WebWorker is able to run through a view and automatically add the results of that to a separate dbspace. It looks like viewQuery is the beginnings of that.
While I'm not going to leave the document bodies of superseded revisions accessible (by overwriting them in IndexedDB), I still need to store these history paths so that merging a new revision (either via interactive edit or replication) can properly generate a conflict when applicable.
Edit: and then I read that it acts as a translation/functionality layer on html5 storage.