Brad Neuberg released an exciting announcement: Dojo Offline Toolkit, a toolkit for developing AJAX web applications with support for disconnected operations.
He's planning to use a custom web proxy, installed locally, to transparently let the web application continue to run when disconnected.
In his words:
"The web browser does not know the difference between whether you are on- or off-line, since the proxy serves up the UI either way.
We don’t need to adopt radically different or exotic programming models, such as loading Single Page Applications like TiddlyWiki from the filesystem, adopting Adobe’s Apollo framework, or downloading huge, entire web servers with specialized application logic that run locally, such as Zimbra’s offline solution.
Instead, Dojo Offline’s answer is to simply use a very small, standard web proxy that runs locally, [...] caching files that wish to be cached for later access without hitting the network."
For read-only cases, such as accessing your contacts list or following driving directions, HTTP caching can do the trick, with almost no application change. You could use the normal HTTP caching from the browser, but to get some more advanced caching solution (item pinning and programmatic cache cleaning, for example), a local proxy can help, although I would rather lean towards some browser extension instead.
The bigger challenge is supporting creative activities such as writing an email, composing a blog post, editing a wiki or updating your calendar. For such scenarios, I haven't seen any model or solution that would avoid having to write a significant amount of custom client-side code, in one form or another, to handle the online/offline logic.
For example, Zimbra is adding support for disconnected operations using a local proxy, but the proxy is highly specific, running servlets that understand Zimbra's business logic. Apparently, they almost didn't change the UI AJAX client code.
Some of the logic can be abstracted out in a smart data access layer, which reads and updates the local store and the server-side according to the connection state. Even so, the offline mode is not transparent to the rest of the code: error cases and synchronization scenarios require more application-specific code.
In conclusion, even though I don't see this toolkit dramatically simplifying the coding of disconnected web applications, I do think it that it will supplement some limitations of the today's browser platforms and I do look forward to seeing more details emerge as the Dojo Offline Toolkit project develops. The announcement itself has already succeeded in bringing more attention to the concept of disconnected web apps, and will likely attract more brain power to this challenging problem.