Apache CouchDB CHANGES
======================

Version 0.8.0-incubating
------------------------

Database Core:

 * The view engine has been completely decoupled from the storage engine. Index
   data is now stored in separate files, and the format of the main database
   file has changed.
 * Databases can now be compacted to reclaim space used for deleted documents
   and old document revisions.
 * Support for incremental map/reduce views has been added.
 * To support map/reduce, the structure of design documents has changed. View
   values are now JSON objects containing at least a "map" member, and
   optionally a "reduce" member.
 * View servers are now identified by name (for example "javascript") instead of
   by MIME type.
 * Automatically generated document IDs are now based on proper UUID generation
   using the crypto module.
 * The field "content-type" in the JSON representation of attachments has been
   renamed to "content_type" (underscore).

HTTP Interface:

 * CouchDB now uses MochiWeb instead of inets for the HTTP server
   implementation. Among other things, this means that the extra configuration
   files needed for inets (such as couch_httpd.conf) are no longer used.
 * The HTTP interface now completely supports the HEAD method. (COUCHDB-3)
 * Improved compliance of Etag handling with the HTTP specification.
   (COUCHDB-13)
 * Etags are no longer included in responses to document GET requests that
   include query string parameters causing the JSON response to change without
   the revision or the URI having changed.
 * The bulk document update API has changed slightly on both the request and the
   response side. In addition, bulk updates are now atomic.
 * CouchDB now uses TCP_NODELAY to fix performance problems with persistent
   connections on some platforms due to nagling.
 * Including a `?descending=false` query string parameter in requests to views
   no longer raises an error.
 * Requests to unknown top-level reserved URLs (anything with a leading
   underscore) now return a "unknown_private_path" error instead of the
   confusing "illegal_database_name".
 * The Temporary view handling now expects a JSON request body, where the JSON
   is an object with at least a "map" member, and optional "reduce" and
   "language" members.
 * Temporary views no longer determine the view server based on the Content-Type
   header of the POST request, but rather by looking for a "language" member in
   the JSON body of the request.
 * The status code of responses to DELETE requests is now 200 to reflect that
   that the deletion is performed synchronously.

Javascript View Server:

 * SpiderMonkey is no longer included with CouchDB, but rather treated as a
   normal external dependency. A simple C program (_couchjs) is provided that
   links against an existing SpiderMonkey installation and uses the interpreter
   embedding API.
 * View functions using the default Javascript view server can now do logging
   using the global `log(message)` function. Log messages are directed into the
   CouchDB log at INFO level. (COUCHDB-59)
 * The global `map(key, value)` function made available to view code has been
   renamed to `emit(key, value)`.
 * Fixed handling of exceptions raised by view functions.

Packaging and System Integration:

 * CouchDB can automatically respawn following a server crash.
 * Database server no longer refuses to start with a stale PID file.
 * System logrotate configuration provided.
 * Improved handling of ICU shared libraries.
 * The `couchdb` script now automatically enables SMP support in Erlang.
 * The `couchdb` and `couchjs` scripts have been improved for portability.
 * The build and install system has been improved for portability.

Futon Utility Client:

 * When adding a field to a document, Futon now just adds a field with an
   autogenerated name instead of prompting for the name with a dialog. The name
   is automatically put into edit mode so that it can be changed immediately.
 * Fields are now sorted alphabetically by name when a document is displayed.
 * Futon can be used to create and update permanent views.
 * The maximum number of rows to display per page on the database page can now
   be adjusted.
 * Futon now uses the XMLHTTPRequest API asynchronously to communicate with the
   CouchDB HTTP server, so that most operations no longer block the browser.
 * View results sorting can now be switched between ascending and descending by
   clicking on the "Key" column header.
 * Fixed a bug where documents that contained a "@" character could not be
   viewed. (COUCHDB-12)
 * The database page now provides a "Compact" button to trigger database
   compaction. (COUCHDB-38)
 * Fixed portential double encoding of document IDs and other URI segments in
   many instances. (COUCHDB-39)
 * Improved display of attachments.
 * The Javascript Shell has been removed due to unresolved licensing issues.
