Apache CouchDB NEWS
===================

For details about backwards incompatible changes, see:

  http://wiki.apache.org/couchdb/Breaking_changes

Each release section notes when backwards incompatible changes have been made.

Version 1.1.2
-------------

* ETag of attachment changes only when the attachment changes, not
 the document.
* Fix pull replication of documents with many revisions.
* Fix replication with an HTTP source and target
* Avoid invalidating view indexes when running out of file descriptors.
* Improvements to log messages for file-related errors.
* Fix retrieval of headers larger than 4k.
* Allow OPTIONS HTTP method for list requests.
* Don't attempt to encode invalid json.
* Improve SpiderMonkey version detection.

Version 1.1.1
-------------

* Support SpiderMonkey 1.8.5
* Add configurable maximum to the number of bytes returned by _log.
* Allow CommonJS modules to be an empty string.
* Bump minimum Erlang version to R13B02.
* Do not run deleted validate_doc_update functions.
* ETags for views include current sequence if include_docs=true.
* Fix bug where duplicates can appear in _changes feed.
* Fix bug where update handlers break after conflict resolution.
* Fix bug with _replicator where include "filter" could crash couch.
* Fix crashes when compacting large views.
* Fix file descriptor leak in _log
* Fix missing revisions in _changes?style=all_docs.
* Improve handling of compaction at max_dbs_open limit.
* JSONP responses now send "text/javascript" for Content-Type.
* Link to ICU 4.2 on Windows.
* Permit forward slashes in path to update functions.
* Reap couchjs processes that hit reduce_overflow error.
* Status code can be specified in update handlers.
* Support provides() in show functions.
* _view_cleanup when ddoc has no views now removes all index files.
* max_replication_retry_count now supports "infinity".
* Fix replication crash when source database has a document with empty ID.
* Fix deadlock when assigning couchjs processes to serve requests.
* Fixes to the document multipart PUT API.
* Fixes regarding file descriptor leaks for databases with views.

Version 1.1.0
-------------

All NEWS for 1.0.2 also apply to 1.1.0.

This release contains backwards incompatible changes.

 * Native SSL support.
 * Added support for HTTP range requests for attachments.
 * Added built-in filters for `_changes`: `_doc_ids` and `_design`.
 * Added configuration option for TCP_NODELAY aka "Nagle".
 * Allow wildcards in vhosts definitions.
 * More granular ETag support for views.
 * More flexible URL rewriter.
 * Added OS Process module to manage daemons outside of CouchDB.
 * Added HTTP Proxy handler for more scalable externals.
 * Added `_replicator` database to manage replications.
 * Multiple micro-optimizations when reading data.
 * Added CommonJS support to map functions.
 * Added `stale=update_after` query option that triggers a view update after
   returning a `stale=ok` response.
 * More explicit error messages when it's not possible to access a file due
   to lack of permissions.
 * Added a "change password"-feature to Futon.

Version 1.0.2
-------------

 * Make test suite work with Safari and Chrome.
 * Fix leaking file handles after compacting databases and views.
 * Fix databases forgetting their validation function after compaction.
 * Fix occasional timeout errors.
 * Reduce lengthy stack traces.
 * Allow logging of native <xml> types.
 * Updated ibrowse library to 2.1.2 fixing numerous replication issues.
 * Fix authenticated replication of design documents with attachments.
 * Fix multipart GET APIs by always sending attachments in compressed
   form when the source attachment is compressed on disk. Fixes a possible
   edge case when an attachment underwent local-local replication.
 * Various fixes to make replicated more resilient for edge-cases.
 * Don't trigger a view update when requesting `_design/doc/_info`.
 * Fix for circular references in CommonJS requires.
 * Fix for frequently edited documents in multi-master deployments being
   duplicated in _changes and _all_docs.
 * Fix spurious conflict generation during attachment uploads.
 * Fix for various bugs in Futon.

Version 1.0.1
-------------

  * Fix data corruption bug COUCHDB-844. Please see
    http://couchdb.apache.org/notice/1.0.1.html for details.
  * Added support for replication via an HTTP/HTTPS proxy.
  * Fixed various replicator bugs for interop with older CouchDB versions.
  * Show fields saved along with _deleted=true. Allows for auditing of deletes.
  * Enable basic-auth popup when required to access the server, to prevent
    people from getting locked out.
  * User interface element for querying stale (cached) views.

Version 1.0.0
-------------

 * More efficient header commits.
 * Use O_APPEND to save lseeks.
 * Faster implementation of pread_iolist(). Further improves performance on
   concurrent reads.
 * Added authentication caching
 * Faster default view collation.
 * Added option to include update_seq in view responses.

Version 0.11.2
--------------

  * Replicator buxfixes for replicating design documents from secured databases.
  * Better error messages on invalid URL requests.
  * User documents can now be deleted by admins or the user.
  * Avoid potential DOS attack by guarding all creation of atoms.
  * Some Futon and JavaScript library bugfixes.
  * Fixed CVE-2010-2234: Apache CouchDB Cross Site Request Forgery Attack

Version 0.11.1
--------------

 * Mask passwords in active tasks and logging.
 * Update mochijson2 to allow output of BigNums not in float form.
 * Added support for X-HTTP-METHOD-OVERRIDE.
 * Disable jsonp by default.
 * Accept gzip encoded standalone attachments.
 * Made max_concurrent_connections configurable.
 * Added continuous replication option to Futon.
 * Added option to replicating test results anonymously to a community
   CouchDB instance.
 * Allow creation and deletion of config entries in Futon.
 * Fixed various UI issues in Futon.
 * Fixed compatibility with the Erlang R14 series.
 * Fixed warnings on Linux builds.
 * Fixed build error when aclocal needs to be called during the build.
 * Require ICU 4.3.1.
 * Fixed compatibility with Solaris.
 * Added authentication redirect URL to log in clients.
 * Added authentication caching, to avoid repeated opening and closing of the
   users database for each request requiring authentication.
 * Made authentication timeout configurable.
 * Temporary views are now admin-only resources.
 * Don't require a revpos for attachment stubs.
 * Make file deletions async to avoid pauses during compaction and db
   deletion.
 * Fixed for wrong offset when writing headers and converting them to blocks,
   only triggered when header is larger than 4k.
 * Preserve _revs_limit and instance_start_time after compaction.
 * Fixed timeout with large .ini files.
 * Added tests for couch.js and jquery.couch.js
 * Added various API features to jquery.couch.js
 * Faster default view collation.
 * Upgrade CommonJS modules support to 1.1.1.
 * Added option to include update_seq in view responses.
 * Fixed erlang filter funs and normalize filter fun API.
 * Fixed hang in view shutdown.
 * Refactored various internal APIs related to attachment streaming.
 * Fixed hanging replication.
 * Fixed keepalive issue.
 * Allow global rewrites so system defaults are available in vhosts.
 * Allow isolation of databases with vhosts.
 * Made the test suite overall more reliable.

Version 0.11.0
--------------

This version is a feature-freeze release candidate for Apache CouchDB 1.0.

 * Fixed CVE-2010-0009: Apache CouchDB Timing Attack Vulnerability.
 * Added support for building a Windows installer as part of 'make dist'.
 * Added optional 'raw' binary collation for faster view builds where Unicode
   collation is not important.
 * Improved view index build time by reducing ICU collation callouts.
 * Added option to implicitly create replication target databases.
 * Improved view information objects.
 * Bug fix for partial updates during view builds.
 * Bug fix for building couch.app's module list.
 * Fixed a problem with statistics timers and system sleep.
 * Improved the statistics calculations to use an online moving window
   algorithm.
 * Adds batching of multiple updating requests, to improve throughput with many
   writers.
 * Removed the now redundant couch_batch_save module.
 * Bug fix for premature termination of chunked responses.
 * Improved speed and concurrency of config lookups.
 * Fixed an edge case for HTTP redirects during replication.
 * Fixed HTTP timeout handling for replication.
 * Fixed query parameter handling in OAuth'd replication.
 * Fixed a bug preventing mixing languages with lists and views.
 * Avoid OS process leaks in lists.
 * Avoid leaking file descriptors on automatic replication restarts.
 * Various improvements to the Futon UI.
 * Provide Content-MD5 header support for attachments.
 * Added default cookie-authentication and users db.
 * Added per-db reader access control lists.
 * Added per-db security object for configuration data in validation functions.
 * Added URL Rewriter handler.
 * Added proxy authentication handler.
 * Added ability to replicate documents by id.
 * Added virtual host handling.
 * Uses json2.js for JSON serialization compatiblity with native JSON.
 * Fixed CVE-2010-0009: Apache CouchDB Timing Attack Vulnerability.

Version 0.10.2
--------------

 * Fixed CVE-2010-0009: Apache CouchDB Timing Attack Vulnerability.

Version 0.10.1
--------------

 * Fixed test suite to work with build system.
 * Fixed a problem with statistics timers and system sleep.
 * Fixed an edge case for HTTP redirects during replication.
 * Fixed HTTP timeout handling for replication.
 * Fixed query parameter handling in OAuth'd replication.
 * Fixed a bug preventing mixing languages with lists and views.
 * Avoid OS process leaks in lists.

Version 0.10.0
--------------

This release contains backwards incompatible changes.

 * General performance improvements.
 * View index generation speedups.
 * Even more robust storage format.
 * Native Erlang Views for high-performance applications.
 * More robust push and pull replication.
 * Two-legged OAuth support for applications and replication (three-legged in
   preparation).
 * Cookie authentication.
 * API detail improvements.
 * Better RFC 2616 (HTTP 1.1) compliance.
 * Added modular configuration file directories.
 * Miscellaneous improvements to build, system integration, and portability.

Version 0.9.2
-------------

 * Remove branch callbacks to allow building couchjs against newer versions of
   Spidermonkey.
 * Fix replication with 0.10 servers initiated by an 0.9 server.

Version 0.9.1
-------------

 * Various bug fixes for the build system, configuration, statistics reporting,
   database core, external handlers, Futon interface, HTTP interface,
   JavaScript View Server and replicator.

Version 0.9.0
-------------

This release contains backwards incompatible changes.

 * Modular configuration.
 * Performance enhancements for document and view access.
 * More resilient replication process.
 * Replication streams binary attachments.
 * Administrator role and basic authentication.
 * Document validation functions in design documents.
 * Show and list functions for rendering documents and views as developer
   controlled content-types.
 * External process server module.
 * Attachment uploading from Futon.
 * Etags for views, lists, shows, document and attachment requests.
 * Miscellaneous improvements to build, system integration, and portability.

Version 0.8.1-incubating
------------------------

 * Various bug fixes for replication, compaction, the HTTP interface and the
   JavaScript View Server.

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

This release contains backwards incompatible changes.

 * Changed core licensing to the Apache Software License 2.0.
 * Refactoring of the core view and storage engines.
 * Added support for incremental map/reduce views.
 * Changed database file format.
 * Many improvements to Futon, the web administration interface.
 * Miscellaneous improvements to build, system integration, and portability.
 * Swapped out Erlang's inets HTTP server for the Mochiweb HTTP server.
 * SpiderMonkey is no longer included with CouchDB, but rather treated as an
   external dependency.
 * Added bits of awesome.

Version 0.7.2
-------------

 * Small changes to build process and `couchdb` command.
 * Database server official port is now 5984 TCP/UDP instead of 8888.

Version 0.7.1
-------------

 * Small compatibility issue with Firefox 3 fixed.

Version 0.7.0
-------------

 * Infrastructure rewritten to use the GNU build system for portability.
 * The built-in database browsing tool has been rewritten to provide a much
   nicer interface for interacting directly with CouchDB from your web browser.
 * XML and Fabric have been replaced with JSON and JavaScript for data
   transport and View definitions.

Version 0.6.0
-------------

 * A replication facility is now available.
 * CouchPeek can now create, delete and view documents.
 * Building from source is easier and less error prone.

Version 0.5.0
-------------

 * A built-in CouchPeek utility.
 * A full install kit buildable from a single command.
 * A new GNU/Linux version is available. An OS X version is coming soon.

Version 0.4.0
-------------

 * Non-existent variables are now nil lists.
 * Couch error codes and messages are no longer sent in the HTTP fields,
   instead they are exclusively returned in the XML body. This is to avoid HTTP
   header parsing problems with oddly formed error messages.
 * Returned error messages are now logged at the server at the `info` level to
   make general debugging easier.
 * Fixed a problem where big table builds caused timeout errors.
 * Lots of changes in the low level machinery. Most formulas will continue to
   function the same.
 * Added full compiler support for extended characters in formula source.
 * Support for Perl/Ruby like regular expressions.
 * Added `total_rows` and `result_start` attributes to tables.

Version 0.3.0
-------------

 * CouchDB now fully supports Unicode and locale specific collation via the ICU
   library, both in the Fabric engine and computed tables.
 * The `in` operator has been added to Fabric.
 * The `startdoc` query string variable specifies the starting document to use
   if there are multiple rows with identical startkeys.
 * The `skip` query string variable specifies the number of rows to skip before
   returning results. The `skip` value must be a positive integer. If used with
   a `count` variable the skipped rows aren't counted as output.
 * Various changes to the output XML format.
