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.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.
