Two browsers walk into a bar. The bartender introduces them, then the horse says to the Ukrainian: "
So anyway, you've maybe heard of PouchDB, an IndexedDB (and WebSQL and LevelDB and HTTP…) wrapper that is replication-compatible with CouchDB. And maybe you've heard also of WebRTC, a browser API for "real-time communication" between peers.
Well, I combined the two.
It's called PeerPouch and it seems to work. In theory and practice. Basically it adds still another backend to PouchDB, which proxies all calls on the local instance to one on another peer. Connection setup itself is done via a PouchDB/CouchDB instance too. So it's Pouches all the way down.
I'm worried there's no easy-win use case due to the usability issues of combining browser storage (confusing) with peer-to-peer connections (uncertain) while still requiring mutual access to a central server (there's always a catch), but PeerPouch could be helpful for things like:
- unhosted-style apps where users keep their own data, but still want to share amongst themselves
- situations where there is a central server, but bandwidth/latency to it are too poor to be useful for an app's data needs — kinda one step away from offline first?
- collaborative apps where you want eventual consistency quickly
PeerPouch itself is super simple to use. So I'm thinking combined with an in-memory PouchDB backend it could join the ranks of WebRTC wrappers for generic chat/game/whatever apps disregarding the data storage PouchDB usually offers. The advantage would be not require anything more than a potentially-free IrisCouch or Cloudant pre-hosted server backend for signalling.
To demo/test it, I built a no-frills direct file transfer utility which I hope to get hosted once I get a suitable server backend ready for shared public consumption. Metakaolin is also high up on the list for some peerish collabification. Have you got any projects where this might be useful?