CloudWall is a platform for developing, sharing and running CouchDB hosted docs and apps. All CloudWall parts are either browser or Couch query server oriented, most browser parts are offline-ready.
CloudWall provides desktop OS level user experience, with all OS basic concepts in place: ‘disks’ with documents, applications, type-associated editors, offline readiness, multiple app instances in a single browser tab, etc.
CW installs by replication and needs only CouchDB and modern HTML5-compliant browser. CloudWall can also run at static hosting, as a set of files, however some functions will be limited.
CloudWall keeps in sync local browser buckets with remote CouchDB nodes. Sync can be both uni- and bi-directional. Moreover, each local bucket can sync with several external CouchDB buckets on different domains.
Buckets store both data docs and special docs, containing apps. There are several system-wide apps, however each bucket may have additional applications to better process bucket specific data.
Storage. If a bucket is synced, all its docs and apps are stored inside browser IndexedDB or WebSQL storage, pumped up with PouchDB to be doc-oriented.
Offline. Once opened in a browser tab, CloudWall then works offline perfectly. All libs are loaded during system start, all docs are local. Cloud replication is async by it’s nature and restarts when browser goes online.
Apps. CloudWall apps are jquerymy manifests. They are structured JSON objects so fit perfectly with storage. There are several system tools for authoring, testing and deploying apps — right in browser tab. jquerymy learning curve is relatively short, also there are several sample apps installed on first system launch.
Security. To ensure sensitive data can’t be read even on occasional replication, CloudWall has built-in crypto lib. It forces encryption of all sensitive user profile docs on save, and can be optionally applied to encrypt some user docs.
CloudWall is tightly integrated with CouchDB and fits very well into projects where Couch serves as a main data store. There several distinct scenarios of CloudWall usage:
CouchDB allows file attachments to JSON docs, which makes this DB especially attractive for storing content. CloudWall has on-board app, Inliner, which is highly flexible content editor.
This site is built using CloudWall and uses Inliner both as editor client side, and as a HTML renderer inside CouchDB query server. This page is authored in and rendered by Inliner.
Sketch of a real system, built with and running CloudWall and Couchbox.
CloudWall plays especially well in part with Couchbox, which augments native CouchDB query server with hooks and API constructor. Developing code in Ddoc Lab, and distributing updates using regular Couch sync flow, allows maintaining large networks of app nodes with very little effort.
In this scenario CW plays as a runtime for clients, and as a dev environment for devops.
CloudWall is a perfect hub for managing CouchDB-related systems and projects. Several at a time, on different domains. You need to enable CORS on target CouchDB nodes, surely.
Syncing in-browser, local DB with remotes storages, and ability to manage docs locally, gives both good last-resort backup and surgery stand.
One-way sync enables creating local design docs that never go to server, which might be useful for flexible iterative data analysis, right in browser. Complex reduce queries are especially fast in browser compared to native CouchDB.
CloudWall is MIT licensed. You can use CloudWall and connectivity it provides for any legal purpose. You can create and distribute your own apps and docs, create your local buckets and private clouds of any kind — do anything you want.
CloudWall is in permanent beta state. It is built on top of many open-source and fast evolving third-party libraries.
CloudWall is an open platform. You can write your own code, that can impact system stability. It all means no guarantees, however in most cases all works quiet smooth.
Date safety warning: always get synced with external CouchDB if you put sensitive data in browser DB.