What is Couch?
Ok, I'm going to briefly describe my vision of what Couch will be. I've been a little shy about discussing it as of late, mostly because I have changed it drastically in the past and I wanted to wait until felt things had solidifed more. And so now that I feel pretty good about its direction and the likelyhood for success, I'd like to say more about what I'm building.
What is Couch? Concise version:
Couch is Lotus Notes built from the ground up for the Web.
What is Couch? Long version:
Couch is a simplified database application platform that is document centric and non-relational. It is a distributed database system, with bi-directional replication built in, enabling high scalability, failover and offline access.
The core database storage and reporting facilities. CouchDb is not a relational database, but rather a schema-free document database.
Documents are objects that have any number of named field values. Since there is no fixed schema, documents can have any number of fields and those fields can have any arbitrary name and value. Unlike a relational database, where records are inserted and deleted out of named tables with a fixed schema, CouchDb has a flat object space and objects do not follow a defined schema.
CouchDb is a bi-directionally replicatable database, with the ability to incrementally replicate changes and resolve conflicts between two replica instances of the same database.
Reporting on the database is accomplished with "Computed Tables" that use Fabric (the CouchDb query language) to select documents and generate column values. Computed tables are very similar to Lotus Notes views. Each document that is selected by Fabric corresponds to a row in the table, and the column values are the result of Fabric expressions that reference the document fields. The same document can appear in many computed tables, or no computed tables, depending on the computed table Fabric selections.
This is the CouchDb query, processing and validation language. It's closely related to Notes Formula Language. It's simple list processing language, designed to be easy to learn and use, and tightly integrated into CouchDb and Couch Web Application Server.
Web Application Server:
This is a piece that will integrate into a web server (most likely Apache) and serve Couch applications and database content out of CouchDb. This layer will interface tightly with one or more popular scripting languages (PHP, Python, Ruby, etc). Design elements (forms, views, tables, etc) are simply documents in the database that store the client side HTML and server side markup and application scripts. These design documents are evaluated and translated into HTML by the Couch Web Application Server and its components.
The web application server also provides a REST based XML replication facility for clients and peer web servers to bidirectionally replicate CouchDb database.
Offline Personal Web Application Server:
This client installable version of the web application server that can replicate server based Couch applications for your local web browser. This provides the disconnected user with access to Couch applications.
Couch Web IDE:
A web browser based IDE hosted by Couch Web Application Server that allows end users to create simple Couch applications (think Lotus Notes V3). With DHTML and Ajax, it will provide a simplified and intuitive UI for creating forms, views and simple scripts (in other words: build Couch applications). People who can create Word documents and Excel spreadsheets should be productive in this environment very quickly.
So that's the grand vision for Couch. Yes, there is much work to be done. And no, I don't plan on doing all of it alone.
So what sorts of applications will Couch be good for? Email, bug databases, time sheets, RSS feeds, CRM, content management, blogs, forums.... Basically anything document-ish that you might also want to access while you're offline.
And developing those sorts of Couch applications will make Ruby on Rails look clumsy and heavyweight by comparison (that's right ROR, I'm talking smack). Plus it can do something no other mainstream web development platform can do, replicate the whole thing offline. Notes people know it's not a pipe dream.
I'm going to need a lot of help and feedback from the Notes community to make this project successful. If you're a Notes geek, I'd love to hear your questions and thoughts about Couch. That goes for anybody actually, but double for the Notes crowd. ;)
Posted December 21, 2005 8:58 PM