CouchApps are JavaScript and HTML5 applications served directly from CouchDB. If you can fit your application into those constraints, then you get CouchDB's scalability and flexibility "for free" (and deploying your app is as simple as replicating it to the production server).
The original CouchApp command-line tools were created in 2008 / 2009 by @benoitc and @jchris. They still work, and have been feature complete for a long time. Couchapp has been replaced by erica and is compatible with the old couchapp tool. There are also new tools for deploying browser-based apps to JSON web servers and among them Kanso and Garden 2.0.
[Editorial note by @jchris] I'm currently spending all my time working on PhoneGap apps that use Couchbase Lite for storage and sync. If you want to sync your data to iOS and Android, and still write Ajax apps, you might want to look at LiteGap. Bonus that you can also interact with that data from native mobile code.
If you prefer developing mobile apps with Titanium, @pegli maintains a module which wraps Couchbase Lite for that platform.
If you've built a sync powered app and are starting to hit the point where Apache CouchDB filtered replication doesn't scale for you, you might want to check out the Couchbase Sync Gateway which uses the same sync protocol but is designed to give efficient subsets of a big data corpus to sync clients. So you can sync to CouchDB or Couchbase Lite (nee TouchDB).
Or simply use rcouch a custom distribution of Apache CouchDB with a bunch of new features that offers since a while incremental view changes (indexed on the disk) and replication support using a view and allows you to replicate in an efficient manner subsets of your databases.
Last thing, I think PouchDB is the future of browser based sync apps. It can sync with the same sync protocols but uses the built-in storage of HTML5.
To develop a CouchApp, you will need a way to get your javascript, html and other resources onto your CouchDB instance. Typically this is done with a CouchApp command line tool that maps application assets and CouchDB views, lists, shows, etc into one or more Design Documents.
The simplest way to develop a couchapp would be to use curl from the command line.
The CouchApp command line tool is used to generate code templates in your application and to push your changes to an instance of couchdb, among other things. Here is how to get started with the CouchApp command line tool:
Using couchapp with multiple design documents
There can be confusion with the term 'CouchApp' because it can refer to this tool, named 'CouchApp', or a general application served from CouchDB. This is probably due to the fact that the CouchApp command line tool was the first full way of developing a CouchApp.
This is an alternative tooling to the Python couchapp utility that is instead written in Node.js. It uses a much simpler folder structure than it's Python counterpart and is a generally more minimalist/simplified way of writing couchapps. Note that you cannot use Python couchapp to push couchapps written using node.couchapp.js into Couch and vice versa.
erica is an Erlang-based command line tool that is compatible with the Python and Node.js "couchapp" tools.
A comprehensive, framework-agnostic build tool for CouchApps.
The Kanso command-line tool can build projects designed for node.couchapp.js, or even the Python couchapp tool, while providing many other options for building your app. These build steps and other code can be shared using the online package repository. Compiling coffee-script, .less CSS templates etc. is as easy as including the relevant package.
"NPM for CouchApps"
Kanso also lets you merge design docs together, which allows reusable components built with any of the available couchapp tools. The Kanso tool can help you manage dependencies and share code between projects, as well as providing a library of JavaScript modules for use with CouchDB.
soca is a command line tool written in ruby for building and pushing couchapps. It is similar to the canonical couchapp python tool, with a number of key differences:
Unlike a traditional couchapp, a soca couchapp is one way - your source directory structure is actually 'compiled' into into the couchapp _design document format.
compile time plugins:
Reupholster is geared for CouchApp beginners and simple CouchApps. What reupholster does is allows you to experience writing a CouchApp as fast as possible, with very little learning curve. It just feels like you are editing a normal web project.
All application logic in a couchapp is provided by Javascript. There is a library called jquery.couch.js that is distributed with every CouchDB installation. Here is the documentation for jquery.couch.js
You can download the following applications and try them out yourself.
The wiki software behind couchapp.org
A couchapp for keeping teams on the same page
Standalone CouchDB Blog, used by the O'Reilly CouchDB book (note: sofa does not work as well with couchdb 1.0.1 or 1.0.2, the edit and create new pages do not work. Also, there is a different version of mustache.js in the /designdocname/lib directory that is used to render all the _list functions. The normal mustache.js file is in the vendor/couchapp directory. )
A Couchapp which displays tweets harvested from Twitter's streaming API by an accompanying Ruby program.
Files attached to Simple JavaScript Applications with CouchDB: