Apache CouchDB Changelog

What's new in Apache CouchDB 3.3.3

Dec 5, 2023
  • Handle replicator instance start time during upgrades better.
  • #4653: Fix the ability to use ; in config values.
  • #4626: Fix purge infos replicating to the wrong shards during shard splitting.
  • #4669: Make it possible to override [replicator] valid_socket_options with more than two items.
  • #4670: Allow setting of some ibrowse replication options such as {prefer_ipv6, true}.
  • #4679: Fix multipart parser “attachment longer than expected” error. Previously there was a small chance attachments were not replicated.
  • #4680: Allow restarting failed shard splitting jobs.
  • #4722: Fix badmatch error when purge requests time out.
  • #4736: Stop client process and clean up if client disconnects when processing streaming requests.
  • #4758: Remove sensitive headers from the mochiweb request in process dictionary. This should prevent sensitive headers leaking into logs when a request process crashes.
  • #4784: Extract the correct node name from ERL_FLAGS in remsh.
  • #4794: Fix incorrect raising of database_does_not_exist error.
  • #4821: Wait for compacted indexes to flip. Previously, a timeout during compact file flips could lead to crashes and a subsequent recompaction.
  • #4837: Fix update bug in ets_lru.
  • #4847: Require auth for _replicate endpoint.
  • #4878: Add an option to scrub some sensitive headers from external json requests.

New in Apache CouchDB 3.3.2 (Apr 25, 2023)

  • Features and Enhancements:
  • #4529: In Javascript process manager, use a database tag in addition to a ddoc ID to quickly find processes. This should improve performance.
  • #4509, #4405: Make remsh work with quoted cookie values.
  • #4473: Avoid re-compiling filter view functions. This could speed up Javascript filter functions.
  • #4412: Remove Javascript json2 script and the try/except clause around seal.
  • #4513: Allow configurable timeouts for _view and _search. Search timeouts can be specified as [fabric] search_timeout and [fabric] search_permsg. View per-message timeout can be configured as [fabric] view_permsg_timeout.
  • #4438: Proxy auth can now use one of the configured hash algorithms from chttpd_auth/hash_algorithms to decode authentication tokens.
  • #4370: Ensure design docs are uploaded individually when replicating with _bulk_get. This restores previous behavior before version 3.3.0.
  • #4416: Allow _local doc writes to the replicator dbs. Previously this issue prevented replicating the replicator db itself, since checkpointing was not working properly.
  • #4363: Fix replication _scheduler/docs "total_rows" value.
  • #4380: Be more defensive about SpiderMonkey location. An error should be emitted early if the Spidermonkey library cannot be found.
  • #4388: Bump recon to 2.5.3. See the changelog for more details.
  • #4476, #4515, #4490, #4350, #4379: Various documentation cleanups and fixes.
  • Fix for CVE-2023-26268.

New in Apache CouchDB 3.3.1 (Jan 11, 2023)

  • Fix undef when parsing replication doc body with a user_ctx.
  • Add make target to find undef errors.
  • Remove failed couch_plugins experiment, fixes more undef errors.
  • Fix undef error in weatherreport.
  • Allow starting of more than one replication job. (D’OH!)

New in Apache CouchDB 3.3.0 (Jan 3, 2023)

  • Highlights:
  • #4308: Replicator was optimized and should be faster. It now uses the _bulk_get endpoint on the source, and can statistically skip calling _revs_diff on the target. Benchmark tests replicating 1M documents, 10KB each, from UK to US East show a 3x speed improvement.
  • Replicator, Tea! Earl Grey! Hot! (Because Picard said so)
  • Features and Enhancements:
  • #3766, #3970, #3972, #4093, #4102, #4104, #4110, #4111, #4114, #4245, #4246:, #4266: Add smoosh queue persistence. This allows resuming smoosh operations after a node restart. This is disabled by default and can be enabled with [smoosh] persist = true. Optimise smoosh operations and increase test coverage to 90%.
  • #3798: Add libicu version and collation algorithm version to /_node/_local/_versions.
  • #3837: The Erlang source tree is now auto-formatted with erlfmt.
  • #3845: Clean up the couch_ejson_compare C-module and squash Microsoft compiler warnings.
  • #3832: Add GET variant to _dbs_info endpoint, used to be POST only.
  • #3864: Improve erlang_ls configuration.
  • #3853: Remove legacy ddoc_cache_opener gen_server and speed up event routing.
  • #3879: Remove use of ERL_OPTS environment variable. All supported Erlang versions now use ERL_COMPILER_OPTIONS for the same purpose.
  • #3883: Add support for SpiderMonkey 91.
  • #3889: Track libicu collator versions in the view header.
  • #3952: Make the timeout for receiving requests from attachment writers configurable.
  • #3927: Include index signature in _search_info.
  • #3963: Optimtize key tree stemming by using maps instead of sets. This greatly reduced memory usage for heavily conflicted docs in some situations.
  • #3974: Create new config options in [couchdb] and [smoosh] sections to enable finer control of compaction logging levels.
  • #3983, #3984, #3985, #3987, #4033: Add various functions to couch_debug module.
  • #4000: Ensure Object.prototype.toSource() is always available.
  • #4018: Update jiffy to 1.1.1 and b64url to 1.0.3.
  • #4021: Reduce smoosh compaction log level to debug.
  • #4041: Allow and evaluate nested json claim roles in JWT token.
  • #4060, #4290: Add support for Erlang 25.
  • #4064: Enable replicating purge requests between nodes. Also avoid applying interactive purges more than once.
  • #4069, #4084: Drop support for Erlang < 23, update vm.args settings to match. Review this if you have customized your vm.args.
  • #4083: Support Elixir 13.
  • #4085: Add an option to let custodian always use [cluster] n value.
  • #4095: Implement winning_revs_only option for the replicator. It replicates only the winning revisions from the source to the target, effectively discarding conflicts.
  • #4135: Separate search IO from file IO.
  • #4140, #4162: Upgrade hash algorithm for cookie auth (sha1 -> sha256). This introduces a new config setting hash_algorithms. New cookie values are hashed with sha256, sha1 hashes are still accepted. Admins can set this to sha256 only. Sha1 will be disallowed in the next major release. Show supported hash algorithms in /_node/_local/_versions endpoint.
  • #4179: Don’t double-encode changes sequence strings in the replicator.
  • #4182: Explicitly maintain a fully connected cluster. Previously, it was possible for the nodes to disconnect, and for that state to persist until the nodes restarted.
  • #4198: Redact passwords in log file.
  • #4243: Update mochiweb to 3.1.1.
  • #4254: The _dbs_info access control is now configured with the [couchdb] admin_only_all_dbs setting. Defaults to true. This was a leftover from the 3.0.0 release.
  • #4264: active database sizes is now limited to leaf nodes. Previously, it included intermediate tree nodes, which had the effect that deleting (large) documents did not decrease active database size. In addition, smoosh now picks up databases where large documents are deleted for compaction more eagerly, reclaiming the deleted space quicker.
  • #4270: Shard splitting now uses its own reshard IO priority. It can be configured to be safely run in the background with production loads, or with maximum IO available, if admins prefer quicker progress.
  • #4274: Improve validation of replicator job parameters & move _replicator VDU design doc to internal BDU.
  • #4280: Add CFLAGS and LDFLAGS to ICU build parameters.
  • #4284: Remove all usage of global to avoid potential deadlocks in replication jobs.
  • #4287: Allow = in config key names.
  • #4306: Fauxton was updated to version v1.2.9. Changes since v1.2.8 can be found here
  • #4317: Write “Relax” welcome message to standard out on Windows.
  • Performance:
  • #3860: Add sharding to couch_index_server, similar to #3366, avoids processing bottlenecks on servers with a lot of concurrent view indexing going on.
  • #3891: Avoid decoding JWT payloads when not necessary.
  • #4031: Default [rexi] use_kill_all to true. This improves intra-cluster-node messaging. Set to false if you run a cluster with nodes that have a version <3.0.0.
  • #4052: Optimise couch_util:reorder_results/2,3, which speeds up _bulk_docs and _revs_diff.
  • #4055: Avoid using length/1 guard for >0 or ==0 tests in couch_key_tree.
  • #4056: Optimise couch_key_tree:find_missing/2. This speeds up _revs_diff.
  • #4059: Reduce complexity of possible_ancestors from quadratic to linear. This speeds up working with heavily conflicted documents significantly.
  • #4091: Optimise couch_util:to_hex/1, this speeds up all operations that need to encode a revision id into JSON (this is most operations).
  • #4106: Set io_priority in all IO paths. Introduces system io_priority.
  • #4144, #4172: Implement _bulk_get support for the replicator. Backward compatibility is ensured. This speeds up all replications. Add option to disable new behaviour for legacy setups.
  • #4163: Statistically skip _revs_diff in the replicator. This improves performance for replications into empty targets.
  • #4177: Remove the long deprecated bigcouch 0.4 change sequence support.
  • #4238: Optimise _bulk_get endpoint. This speeds up replication of 1M docs by ~2x. Individual _bulk_get requests are up to 8x faster.
  • #3517: Add experimental fix for reduce performance regression due to expensive repeated AST-transformations on newer SpiderMonkey versions. Set COUCHDB_QUERY_SERVER_JAVASCRIPT env var to COUCHDB_QUERY_SERVER_JAVASCRIPT="/opt/couchdb/bin/couchjs /opt/couchdb/share/server/main-ast-bypass.js".
  • #4262: couchjs executable built against Spidermonkey >= 78 will return the detailed major.minor.patch as opposed to just the major version as previously.
  • Bugfixes:
  • #3817: Fix undefined function call in weatherreport.
  • #3819: Return 400 instead of 500 response code for known invalid _bulk_docs with new_edits=false request.
  • #3861: Add SameSite setting when clearing session cookies.
  • #3863: Fix custom TLS distribution for Erlang 20.
  • #3870: Always send all cookie attributes.
  • #3886: Avoid changes feed rewind after shard move with no subsequent db updates.
  • #3888: Make _stats endpoint resilient against nodes that go offline.
  • #3901: Use db-creation time instead of 0 for instance_start_time to help replicator recognise whether a peer database was deleted and recreated.
  • #3909: Fix new_edits:false and VDU function_clause.
  • #3934: Fix replicated_changes typo for purge doc updates.
  • #3940: Ensure the multipart parser always monitors the worker and make sure to wait for attachment uploads before responding.
  • #3950: Ignore responses from timed-out or retried ibrowse calls.
  • #3969: Fix skip and limit for _all_dbs and _dbs_info.
  • #3979: Correctly respond with a 500 code when document updates time out under heavy load.
  • #3992: Show that Search is available if it was available before. Avoid Search availability disappearing just because a Search node was temporarily not available.
  • #3993: Return a 400 error when decoding a JWT token fails, rather than crashing and not responding at all.
  • #3990: Prevent creation of ddocs with no name through Mango index creation.
  • #4003: Improve index building during shard splitting.
  • #4016: Fix function_clause error for replicated changes with a target VDU.
  • #4020: Fix maybe_handle_error clauses.
  • #4037: Fix ES{256,384,512} support for JWTs.
  • #4040: Handle exit(shutdown) error in chttpd.
  • #4043: Fix purge request timeouts (5s -> infinity).
  • #4146: The devcontainer has been updated.
  • #4050: Handle all_dbs_active in fabric_doc_update.
  • #4160: Return a proper 400 error when an invalid object is sent to _bulk_get.
  • #4070: Prevent error:function_clause in check_security/3 if roles claim is malformed.
  • #4075: Fix couch_debug:opened_files* functions.
  • #4108: Trim X-Auth-CouchDB-Roles header after reading.
  • #4153: The require_valid_user setting is now under chttpd.
  • #4161: Fix content-type handling in _session.
  • #4176: Fix eventsource _changes feed.
  • #4197: Support large (and impractical as-of-yet) q values. Fix shard open timeouts for q > 64.
  • #4199: Fix spurious unlock in close_db_if_idle.
  • #4230: Avoid refresh messages piling up in prometheus server.
  • #4240: Implement global password hasher process. This fixes a race-condition when setting new admin passwords in quick succession on a multicore server.
  • #4261, #4271: Clean up stale view checkpoints, improve purge client cleanup logging
  • #4272: Kill all couch_server_N if database_dir changes.
  • #4313: Use chttpd config section when patching local _replicate endpoints.
  • #4321: Downgrade jiffy to allow building on Windows again.
  • #4329, #4323: Ignore build windows binaries in git.
  • Tests:
  • #3825: Eliminate Elixir compiler warnings.
  • #3830: Reduce skipped Elixir integration tests.
  • #3890: Handle not_found lookups removing ddoc cache key.
  • #3892: Use Debian Stable for CI, add Erlang 24 to CI.
  • #3898: Remove CI support for Ubuntu 16.04.
  • #3903, #3914: Refactor Jenkins to dynamically generate stages. Drop MINIMUM_ERLANG_VERSION to 20, drop the packaging ERLANG_VERSION to 23, add the weatherreport-test as a build step, and add ARM and POWER back into the matrix.
  • #3921:, #3923: Execute various tests in clean database_dir to avoid subsequent test flakiness.
  • #3968: Ensure key tree rev stemming does’t take too much memory.
  • #3980: Upgrade Mango test dependency nose to nose and fix flaky-on-Windows tests.
  • #4006: Remove CI support for Debian 9.
  • #4061, #4082: Update PPC CI builder.
  • #4096: Fix flaky validate_doc_update Elixir test.
  • #4123: Fix haproxy.cfg.
  • #4126: Return a 400 response for a single new_edits=false doc update without revision.
  • #4129: Fix proxyauth_test and removed it from skip list.
  • #4132: Address race condition in cpse_incref_decref test.
  • #4151: Refactor replication tests to use clustered endpoints.
  • #4178: Add test coverage to prevent junk in eventsource.
  • #4188: Enable eunit coverage for all applications instead of enabling it per-application.
  • #4202: Fix race condition in ddoc cache LRU test.
  • #4203, #4205: Reduce test log noise.
  • #4268: Improve flaky _dbs_info test.
  • #4319: Fix offline configure and make release.
  • #4328: Fix eaddrnotavail in Elixir tests under Windows.
  • #4330: Do not run source checks in main CI build.
  • Docs:
  • #4164: The CouchDB documentation has been moved into the main CouchDB repository.
  • #4307, #4174: Update Sphinx to version 5.3.0
  • #4170: Document the /_node/_local/_versions endpoint.
  • Builds:
  • #4097: Stop publication of nightly packages. They were not used anywhere.
  • #4322: Reuse installed rebar and rebar3 for mix. Compatible with Elixir =< 13 only. Elixir 14 is not supported yet.
  • #4326: Move Elixir source checks to a separate build step.
  • Other:
  • Added pumpkin spice to selected endpoints. — Thank you for reading the 3.3.0 release notes.

New in Apache CouchDB 3.2.0 (Oct 12, 2021)

  • #3166: Allow custom JWT claims for roles, via the [jwt_auth] roles_claim_name config setting.
  • #3296, #3312: CouchDB now includes weatherreport and its dependency custodian, a diagnostic app forked from Basho’s riaknostic tool. More documentation is available in the Cluster Troubleshooting section.
  • #2911, #3298, #3425: CouchDB now returns the version of SpiderMonkey to administrators in the GET /_node/{node-name}/_versions response.
  • #3303: CouchDB now treats a 408 response received by the replicator similar to any 5xx error (by retrying, as opposed to a permanent error). CouchDB will never return a 408, but some reverse proxies in front of CouchDB may return this code.
  • #3322: _session now accepts gzip encoding.
  • #3254: The new $keyMapMatch operator allows Mango to query on the keys of a map. It is similar to the $elemMatch operator, but instead of operating on the elements of array, it operates on the keys of a map.
  • #3336: Developers now have access to a .devcontainer configuration for the 3.x version of CouchDB, right in the source code repository.
  • #3347: The default maximum attachment size has been reduced from infinity to 1 GiB.
  • #3361: Compaction process suspension now appears in the active_tasks output, allowing administrators to verify that the strict_window value is being respected.
  • #3378: The [admins] section and the [replicator] password are now redacted from all logs. In addition, #3380 removes user credentials, user documents and design documents from logfiles as much as possible. Further, #3489 no longer logs all of the messages received by a terminated internal Erlang process.
  • #3421, #3500: CouchDB now supports SpiderMonkey 78 and 86.
  • #3422: CouchDB now supports Erlang/OTP 23 and error_logger reports for Erlang/OTP >= 21.
  • #3566: CouchDB now also supports Erlang/OTP 24.
  • #3571: CouchDB no longer supports Erlang/OTP 19.
  • #3643: Contribute a custom Erlang network protocol to CouchDB, users can specify nodes to use TCP or TLS.

New in Apache CouchDB 3.1.2 (Oct 5, 2021)

  • This is a security release for a low severity vulnerability. Details of the issue will be published one week after this release.

New in Apache CouchDB 3.1.1 (Sep 18, 2020)

  • Features and Enhancements:
  • When a client disconnects unexpectedly, CouchDB will no longer log a “normal : unknown” error. Bring forth the rainbows.
  • The Gravity Falls gnome pukes some rainbows for us.
  • Drilldown parameters for text index searches may now be specified as a list of lists, to avoid having to define this redundantly in a single query. (Some languages don’t have this facility.)
  • The new [chttpd] buffer_response option can be enabled to delay the start of a response until the end has been calculated. This increases memory usage, but simplifies client error handling as it eliminates the possibility that a response may be deliberately terminated midway through, due to a timeout. This config value may be changed at runtime, without impacting any in-flight responses.
  • PERFORMANCE:
  • Bugfixes:
  • The replicator now correctly picks jobs to restart during rescheduling, where previously with high load it may have failed to try to restart crashed jobs.
  • When handling extremely large documents (≥50MB), CouchDB can no longer time out on a gen_server:call if bypassing the IOQ.
  • CouchDB will no longer fail to compact databases if it finds files from a 2.x compaction process (prior to an upgrade) on disk.
  • CouchDB now sends the correct CSP header to ensure Fauxton operates correctly with newer browsers.
  • The couch_index server won’t crash and log errors if a design document is deleted while that index is building, or when a ddoc is added immediately after database creation.
  • CouchDB now checks for and complains correctly about invalid parameters on database creation.
  • CouchDB now correctly encodes URLs correctly when encoding the atts_since query string.
  • Some parameters not allowed for text-index queries on partitioned database are now properly validated and rejected.
  • Text-based search indexes may now be cleaned up correctly, even if the design document is now invalid.
  • fips is now only reported in the welcome message if FIPS mode was enabled at boot (such as in vm.args).
  • Using COPY to copy a document will no longer return a JSON result with two ok fields.
  • Malformed URLs in replication requests or documents will no longer throw an error.
  • OTHERS:
  • JS tests skip faster now.
  • More JS tests ported into elixir: reader_acl, reduce_builtin, reduce_false, rev_stemming, update_documents, view_collation_raw, view_compaction, all the view_multi_key tests, view_sandboxing, view_update_seq.

New in Apache CouchDB 3.0.0 (Feb 26, 2020)

  • Features and Enhancements:
  • 1789: User-defined partitioned databases.
  • These special databases support user-driven placement of documents into the same shard range. JavaScript views and Mango indexes have specific optimizations for partitioned databases as well.
  • Two tweakable configuration parameters exist:
  • 1842: Partition size limits. By default, each partition is limited to 10 GiB.
  • 1684: Partitioned database support can be disabled via feature flag in default.ini.
  • 1972, #2012: Automated shard splitting. Databases can now be re-sharded while online to increase the q factor to a larger number. This can be configured to require specific node and range parameters upon execution.
  • 1910: Automatic background indexing, internally known as ken. This subsystem ensures secondary indexes (such as JavaScript, Mango, and text search) are kept up to date, without requiring an external query to trigger building them. Many configuration parameters are available.
  • 1904: Completely rewritten automatic compaction daemon, internally known as smoosh. This subsystem automatically triggers background compaction jobs for both databases and views, based on configurable thresholds.
  • 1889, #2408: New IO Queue subsystem implementation. This is highly configurable and well-documented.
  • 2436, #2455: CouchDB now regression tests against, and officially supports, running on the arm64v8 (aarch64) and ppc64le (ppc64el) machine architectures. Convenience binaries are generated on these architectures for Debian 10.x (“buster”) packages, and for the Docker containers.
  • 1875, #2437, #2423: CouchDB now supports linking against SpiderMonkey 60 or SpiderMonkey 1.8.5. SpiderMonkey 60 provides enhanced support for ES5, ES6, and ES2016+. Full compatibility information is available at the ECMAScript compatibility table: click on “Show obsolete platforms,” then look for “FF 60 ESR” in the list of engine types.
  • However, it was discovered that on ARM 64-bit platforms, SM 60 segfaults frequently. Also, at the time of writing, of the set of platforms supported for convenience binaries, only Debian 10.x (“buster”) ships precompiled SM 60 binaries.
  • As a result, CouchDB’s convenience binaries only link against SM 60 on debian buster ``x86_64`` and ``ppc64le`` architectures. This includes the Docker image for these architectures. All other packages and Docker images link against SM 1.8.5, as in CouchDB 2.x. As OSes update to include binaries for SM 60, the convenience binaries will be updated accordingly.
  • The Windows installer has many improvements, including:
  • Prompts for an admin user/password as CouchDB 3.0 requires * Will not overwrite existing credentials if in place
  • No longer remove user-modified config files, closing #1989 * Also will not overwrite them on install.
  • Checkbox to disable installation of the Windows service
  • Silent install support.
  • Friendly link to these online release notes in the exit dialog
  • Higher resolution icon for HiDPI (500x500)
  • 2037: Dreyfus, the CouchDB side of the Lucene-powered search solution, is now shipped with CouchDB. When one or more Clouseau Java nodes are joined to the cluster, text-based indexes can be enabled in CouchDB. It is recommended to have as many Clouseau nodes as you have CouchDB nodes. Search is advertised in the feature list present at GET / if configured correctly (#2206). Configuration and installation documentation is available.
  • 2411: The /_up endpoint no longer requires authentication, even when require_valid_user is true.
  • 2392: A new _metrics role can be given to a user. This allows that user access only to the /_node/{node}/_stats and /_node/{node}/_system endpoints.
  • 1912: A new alternative systemd-journald logging backend has been added, and can be enabled through the ini file. The new backend does not include CouchDB’s microsecond-accurate timestamps, and uses the sd-daemon(3) logging levels.
  • 2296, #1977: If the configuration file setting [couchdb] single_node is set to true, CouchDB will automatically create the system databases on startup if they are not present.
  • 2338, #2343: POST request to CouchDB views and the /{db}/_all_docs, /{db}/_local_docs and /{db}/_design_docs endpoints now support the same functionality as GET. Parameters are passed in the body as a JSON object, rather than in the URL when using POST.
  • 2292: The _scheduler/docs and _scheduler/info endpoints now return detailed replication stats for running and pending jobs.
  • 2282, #2272, #2290: CouchDB now supports specifying separate proxies for both the source and target in a replication via source_proxy and target_proxy keys. The API documentation has been updated.
  • 2240: Headers are now returned from the /{db}/_changes feed immediately, even when there are no changes available. This avoids client blocking.
  • 2005, #2006: The name of any node can now be retrieved through the new API endpoint GET /_node/{node-name}.
  • 1766: Timeouts for requests, all_docs, attachments, views, and partitioned view requests can all be specified separately in the ini file under the [fabric] section. See default.ini for more detail.
  • 1963: Metrics are now kept on the number of partition and global view queries, along with the number of timeouts that occur.
  • 2452, #2221: A new configuration field [couch_httpd_auth] same_site has been added to set the value of the CouchDB auth cookie’s SameSite attribute. It may be necessary to set this to strict for compatibility with future versions of Google Chrome. If CouchDB CORS support is enabled, set this to None.
  • Performance:
  • 2277: The couch_server process has been highly optimized, supporting significantly more load than before.
  • 2360: It is now possible to make the rexi interface’s unacked message limit configurable. A new, more optimized default (5, lowered from 10) has been set. This results in a ~50% improvement on view queries on large clusters with q = 8.
  • 2280: Connection sharing for replication now functions correctly when replicating through a forward proxy. Closes #2271.
  • 2195, #2207: Metrics aggregation now supports CouchDB systems that sleep or hibernate, ensuring that on wakeup does not trigger thousands of unnecessary function calls.
  • 1795: Avoid calling fabric:update_docs with empty doc lists.
  • 2497: The setup wizard no longer automatically creates the _global_changes database, as the majority of users do not need this functionality. This reduces overall CouchDB load.
  • Bugfixes:
  • 1752, #2398, #1803: The cluster setup wizard now ensures a consistent UUID and http secret across all nodes in a cluster. CouchDB admin passwords are also synced when the cluster setup wizard is used. This prevents being logged out when using Fauxton as a server admin user through a load balancer.
  • 2388: A compatibility change has been made to support replication with future databases containing per-document access control fields.
  • 2379: Any replicator error messages will provide an object in the response, or null, but never a string.
  • 2244, #2310: CouchDB will no longer send more data than is requested when retrieving partial attachment data blocks.
  • 2138: Manual operator updates to a database’s shard map will not corrupt additional database properties, such as partitioning values.
  • 1877: The _purge and _purged_infos_limit endpoints are now correctly restricted to server admin only.
  • 1794: The minimum purge sequence value for a database is now gathered without a clustered _all_docs lookup.
  • 2351: A timeout case clause in fabric_db_info has been normalised to match other case clauses.
  • 1897: The /{db}/_bulk_docs endpoint now correctly catches invalid (i.e., non-hexadecimal) _rev_ values and responds with a 400 error.
  • 2321: CouchDB no longer requires Basic auth credentials to reach the /_session endpoint for login, even when require_valid_user is enabled.
  • 2295: CouchDB no longer marks a job as failed permanently if the internal doc processor crashes.
  • 2178: View compaction files are now removed on view cleanup.
  • 2179: The error message logged when CouchDB does not have a _users database is now less scary.
  • 2153: CouchDB no longer may return a badmatch error when querying all_docs with a passed keys array.
  • 2137: If search is not available, return a 400 instead of 500 status code.
  • 2077: Any failed fsync(2) calls are now correctly raised to avoid data corruption arising from retry attempts.
  • 2027: Handle epoch mismatch when duplicate UUIDs are created through invalid operator intervention.
  • 2019: If a database is deleted and re-created while internal cluster replication is still active, CouchDB will no longer retry to delete it continuously.
  • 2003, #2438: CouchDB will no longer automatically reset an index file if any attempt to read its header fails (such as when the couch_file process terminates unexpectedly). CouchDB now also handles the case when a view file lacks a proper header.
  • 1983: Improve database “external” size calcuation to be more precise.
  • 1971: Correctly compare ETags using weak comparison methods to support W/ prefix added by some load balancer configurations.
  • 1901: Invalid revision specified for a document update will no longer result in a badarg crash.
  • 1845: The end_time field in /_replicate now correctly converts time to UTC.
  • 1824: rexi stream workers are now cleaned up when the coordinator process is killed, such as when the ddoc cache is refreshed.
  • 1770: Invalid database _security objects no longer return a function_clause error and stack trace.
  • 2412: Mango execution stats now correctly count documents read which weren’t followed by a match within a given shard.
  • 2393, #2143: It is now possible to override the query server environment variables COUCHDB_QUERY_SERVER_JAVASCRIPT and COUCHDB_QUERY_SERVER_COFFEESCRIPT without overwriting the couchdb/couchdb.cmd startup scripts.
  • 2426, #2415: The replicator now better handles the situation where design document writes to the target fail when replicating with non-admin credentials.
  • 2444, #2413: Replicator error messages are now significantly improved, reducing function_clause responses.
  • 2454: The replication auth session plugin now ignores other cookies it may receive without logging an error.
  • 2458: Partitioned queries and dreyfus search functions no longer fail if there is a single failed node or rexi worker error.
  • 1783: Mango text indexes no longer error when given an empty selector or operators with empty arrays.
  • 2466: Mango text indexes no longer error if the indexed document revision no longer exists in the primary index.
  • 2486: The $lt, $lte, $gt, and $gte Mango operators are correctly quoted internally when used in conjunction with a text index search.
  • 2493: The couch_auth_cache no longer has a runaway condition in which it creates millions of monitors on the _users database.
  • Other:
  • The 3.0.0 release also includes the following minor improvements:
  • 2472: CouchDB now logs the correct, clustered URI at startup (by default: port 5984.)
  • 2034, #2416: The path to the Fauxton installation can now be specified via the COUCHDB_FAUXTON_DOCROOT environment variable.
  • 2447: Replication stats are both persisted when jobs are re-created, as well as properly handled when bulk document batches are split.
  • 2410, #2390, #1913: Many metrics were added for Mango use, including counts of unindexed queries, invalid index queries, docs examined that do and don’t meet cluster quorum, query time, etc.
  • 2152, #2504: CouchDB can now be started via a symlink to the binary on UNIX-based platforms.
  • 1844: A new internal API has been added to write custom Erlang request-level metrics reporting plugins.
  • 2293, #1095: The -args_file, -config and -couch_ini parameters may now be overridden via the COUCHDB_INI_FILES environment variable on UNIX-based systems.
  • 2352: The remsh utility now searches for the Erlang cookie in ERL_FLAGS as well as vm.args.
  • 2324: All traces of the (never fully functional) view-based _changes feed have been expunged from the code base.
  • 2337: The md5 shim (introduced to support FIPS-compliance) is now used consistently throughout the code base.
  • 2270: Negative and non-integer heartbeat values now return 400 Bad Request.
  • 2268: When rescheduling jobs, CouchDB now stops sufficient running jobs to make room for the pending jobs.
  • 2186: CouchDB plugin writers have a new field in which endpoint credentials may be stashed for later use.
  • 2183: dev/run now supports an --extra-args flag to modify the Erlang runtime environment during development.
  • 2105: dev/run no longer fails on unexpected remote end connection close during cluster setup.
  • 2118: Improve couch_epi process replacement mechanism using map childspecs functionality in modern Erlang.
  • 2111: When more than MaxJobs replication jobs are defined, CouchDB now correctly handles job rotation when some jobs crash.
  • 2020: Fix full ring assertion in fabric stream shard replacements
  • 1925: Support list for docid when using couch_db:purge_docs/3.
  • 1642: io_priority is now set properly on view update and compaction processes.
  • 1865: Purge now supports >100 document IDs in a single request.
  • 1861: The vm.args file has improved commentary.
  • 1808: Pass document update type for additional checks in before_doc_update.
  • 1835: Module lists are no longer hardcoded in .app files.
  • 1798, #1933: Multiple compilation warnings were eliminated.
  • 1826: The couch_replicator_manager shim has been fully removed.
  • 1820: After restarting CouchDB, JS and Elixir tests now wait up to 30s for it to be ready before timing out.
  • 1800: make elixir supports specifying individual tests to run with tests=.
  • 1805: dev/run supports --with-haproxy again.
  • 1774: dev/run now supports more than 3 nodes.
  • 1779: Refactor Elixir test suite initialization.
  • 1769: The Elixir test suite uses Credo for static analysis.
  • 1776: All Python code is now formatted using Python black.
  • 1786: dev/run: do not create needless dev/data/ directory.
  • 2482: A redundant get_ring_opts call has been removed from dreyfus_fabric_search.
  • 2506: CouchDB’s release candidates no longer propagate the RC tags into each Erlang application’s version string.
  • 2511: recon, the Erlang diagnostic toolkit, has been added to CouchDB’s build process and ships in the release + convenience binaries.
  • Fauxton updated to v1.2.3, which includes:
  • Support multiple server-generated warnings when running queries
  • Partitioned database support
  • Search index support
  • Remove references to deprecated dbinfo fields
  • Improve accessibility for screen readers
  • Numerous CSS fixes
  • Improved test cases:
  • Many, many test race conditions and bugs have been removed (PR list too long to include here!)
  • More test cases were ported to Elixir, including:
  • Cluster with and without quorum tests (#1812)
  • delayed_commits (#1796)
  • multiple_rows (#1958)
  • invalid_docids (#1968)
  • replication (#2090)
  • All attachment_* tests (#1999)
  • copy_doc (#2000)
  • attachments (#1953)
  • erlang_views (#2237)
  • auth_cache, cookie_auth, lorem*, multiple_rows, users_db, utf8 (#2394)
  • etags_head (#2464, #2469)
  • 2431: chttpd_purge_tests have been improved in light of CI failures.
  • 2432: Address flaky test failure on t_invalid_view/1.
  • 2363: Elixir tests now run against a single node cluster, in line with the original design of the JavaScript test suite. This is a permanent change.
  • 1893: Add “w:3” for lots of doc tests.
  • 1939, #1931: Multiple fixes to improve support in constrained CI environments.
  • 2346: Big-endian support for the couch_compress tests.
  • 2314: Do not auto-index when testing update=false in Mango.
  • 2141: Fix couch_views encoding test.
  • 2123: Timeout added for fold_docs-with_different_keys test.
  • 2114: EUnit tests now correctly inherit necessary environment variables.
  • 2122: :meck.unload() is now called automatically after every test.
  • 2098: Fix cpse_test_purge_replication eunit test.
  • 2085, #2086: Fix a flaky mem3_sync_event_listener test.
  • 2084: Increase timeouts on two slow btree tests.
  • 1960, #1961: Fix for chttpd_socket_buffer_size_test.
  • 1922: Tests added for shard splitting functionality.
  • 1869: New test added for doc reads with etag If-None-Match header.
  • 1831: Re-introduced cpse_test_purge_seqs test.
  • 1790: Reorganise couch_flag_config_tests into a proper suite.
  • 1785: Use devclean on elixir target for consistency of Makefile.
  • 2476: For testing, Triq has been replaced with PropEr as an optional dependency.
  • External dependency updates:
  • 1870: Mochiweb has been updated to 2.19.0.
  • 1938: Folsom has been updated to 0.8.3.
  • 2001: ibrowse has been updated to 4.0.1-1.
  • 2400: jiffy has been updated to 1.0.1.

New in Apache CouchDB 2.3.1 (Mar 12, 2019)

  • Features:
  • #1811: Add new /{db}/_sync_shards endpoint (admin-only).
  • #1870: Update to mochiweb 2.19.0. See also #1875.
  • #1875: Refuse building with known bad versions of Erlang.
  • #1880: Compaction: Add snooze_period_ms for finer tuning.
  • Bugfixes:
  • #1795: Filter out empty missing_revs results in mem3_rep.
  • #1384: Fix function_clause error on invalid DB _security objects.
  • #1841: Fix end_time field in /_replicate response.
  • #1860: Fix read repair in a mixed cluster environment.
  • #1862: Fix fabric_open_doc_revs.
  • #1865: Support purge requests with more than 100 doc ids.
  • #1867: Fix timeout in chttpd_purge_tests.
  • #1766: Add default fabric request timeouts.
  • #1810: Requests return 400 Bad Request when URL length exceeds 1460 characters. See #1870 for details.
  • #1799: Restrict _purge to server admin.
  • #1874: This fixes inability to set keys with regex symbols in them.
  • #1901: Fix badarg crash on invalid rev for individual doc update.
  • #1897: Fix from_json_obj_validate crash when provided rev isn’t a valid hex.
  • #1803: Use the same salt for admin passwords on cluster setup.
  • #1053: Fix python2 compatibility for couchup.
  • #1905: Fix python3 compatibility for couchup.

New in Apache CouchDB 2.3.0 (Dec 7, 2018)

  • (Multiple) Clustered purge is now available. This feature restores the CouchDB 1.x ability to completely remove any record of a document from a database. Conditions apply; to use the feature safely, and for full details, read the complete Clustered Purge documentation.
  • #1658: A new config setting is available, allowing an administrator to configure an initial list of nodes that should be contacted when a node boots up. Nodes in the seedlist that are successfully reached will be added to that node’s _nodes database automatically, triggering a distributed Erlang connection and replication of the internal system databases to the new node. This can be used instead of manual config or the cluster setup wizard to bootstrap a cluster. The progress of the initial seeding of new nodes is exposed at the GET /_up endpoint.
  • Replication supports ipv6-only peers after updating ibrowse dependency.
  • #1708: The UUID of the server/cluster is once again exposed in the GET / response. This was a regression from CouchDB 1.x.
  • #1722: Stats counts between job runs of the replicator are no longer reset on job restart.
  • #1195, #1742: CouchDB’s _bulk_get implementation now supports the multipart/mixed and multipart/related content types if requested, extending compatibility with third-party replication clients.

New in Apache CouchDB 2.2.0 (Aug 8, 2018)

  • Upgrade Notes:
  • The minimum supported version of Erlang is now R17, not 16B03. Support for Erlang 21 is still ongoing and will be provided in a future release.
  • The CouchDB replication client can now use the /_session endpoint when authenticating against remove CouchDB instances, improving performance since re-authorization does not have to be performed with every request. Because of this performance improvement, it is recommended to increase the PBKDF2 work factor beyond the default 10 to a modern default such as 10000. This is done via the local ini file setting [couch_httpd_auth] iterations = 10000.
  • Do not do this if an older version of CouchDB is replicating TO this instance or cluster regularly, since CouchDB < 2.2.0 must perform authentication on every request and replication performance will suffer.
  • A future version will make this increased number of iterations a default.
  • #820, #1032: Multiple queries can now be made at the POST /{db}/_all_docs/queries, POST /{db}/_design_docs/queries and POST /{db}/_local_docs/queries endpoints. Also, a new endpoint POST /{db}/_design/{ddoc}/_view/{view}/queries has been introduced to replace the ?queries parameter formerly provided for making multiple queries to a view. The old ?queries parameter is now deprecated and will be removed in a future release of CouchDB.
  • The maximum http request limit, which had been lowered in 2.1.0, has been re-raised to a 4GB limit for now. (#1446). Ongoing discussion about the path forward for future releases is available in #1200 and #1253.
  • #1118: The least recently used (LRU) cache of databases is now only updated on database write, not read. This has lead to significant performance enhancements on very busy clusters. To restore the previous behaviour, your local ini file can contain the block [couchdb] update_lru_on_read = true.
  • #1153: The CouchDB replicator can now make use of the /_session endpoint rather than relying entirely on HTTP basic authentication headers. This can greatly improve replication performance. We encourage you to upgrade any nodes or clusters that regularly act as replication clients to use this new feature, which is enabled by default (#1462).
  • #1283: The [couchdb] enable_database_recovery feature, which only soft-deletes databases in response to a DELETE /{db} call, is now documented in default.ini.
  • #1330: CouchDB externals and OS daemons are now officially deprecated and no longer documented. Support for these features will be completely removed in a future release of CouchDB (probably 3.0.0).
  • #1436: CouchDB proxy authentication now uses a proper chttpd_auth module, simplifying configuration in local ini files. While this is not a backward- compatible breaking change, it is best to update your local ini files to reference the new {chttpd_auth, proxy_authentication_handler} handler rather than the couch_httpd_auth version, as couch_httpd is in the process of being deprecated completely.
  • Features:
  • #496, COUCHDB-3287: New pluggable storage engine framework has landed in CouchDB. This internal refactor makes it possible for CouchDB to use different backends for storing the base database file itself. The refactor included a full migration of the existing “legacy” storage engine into the new framework.
  • #603: When creating a new database on a cluster without quorum, CouchDB will now return a 202 Accepted code if possible, indicating that at least one node has written the database record to disk, and that other nodes will be updated as they return to an online state. This replaces the former 500 internal error.
  • #1136, #1139: When deleting a database in a cluster without quorum, CouchDB will no longer throw a 500 error status, but a 202 as long as at least one node records the deletion, or a 200 when all nodes respond. This fix parallels the one made for #603.
  • #822: A new end point /_dbs_info has been added to return information about a list of specified databases. This endpoint can take the place of multiple queries to /{db}.
  • #875, #1030: couch_peruser installations can now specify a default q value for each peruser-created database that is different from the cluster’s q value. Set this in your local ini file, under [couch_peruser] q.
  • #876, #1068: The couch_peruser database prefix is now configurable through your local ini file, under [couch_peruser] database_prefix.
  • #887: Replicator documents can now include parameters for target database creation, such as "create_target_params": {"q": "1"}. This can assist in database resharding or placement.
  • #977: When using COPY to copy a document, CouchDB no longer fails if the new ID includes Unicode characters.
  • #1095: Recognize the environment variables ARGS_FILE, SYSCONFIG_FILE, COUCHDB_ARGS_FILE and COUCHDB_SYSCONFIG_FILE to overrride where CouchDB looks for the vm.args and sys.config files at startup.
  • #1101, #1425: Mango can now be used to find conflicted documents in a database by adding conflicts: true to a mango selector.
  • #1126: When queried back after saving, replication documents no longer contain sensitive credential information (such as basic authenticataion headers).
  • Much improved documentation. Highlights include:
  • A complete rewrite of the sharding documentation.
  • Developer installation notes (INSTALL.*.rst)
  • Much of the content of the original CouchDB Wiki has been imported into the official docs. (The old CouchDB Wiki is in the process of being deprecated.)
  • Much improved Fauxton functionality. Highlights include:
  • Search support in the code editor
  • Support for relative Fauxton URLs (i.e., not always at /_utils)
  • Replication setup enhancements for various authentication mechanisms
  • Fixes for IE10, IE11, and Edge (we hope…)
  • Resolving conflicts of design documents is now allowed
  • #1309, #1435: CouchDB now reports the git sha at the time of build in the top-level GET / version string, in a new git_sha key. This can be used to help ensure an unmodified version of CouchDB has been built and is running on any given machine.
  • COUCHDB-2971, #1346: CouchDB now includes a new builtin reduce function _approx_count_distinct, that uses a HyperLogLog algorithm to estimate the number of distinct keys in the view index. The precision is currently fixed to 2^11 observables, and therefore uses approximately 1.5KB of memory.
  • #1377: CouchDB finalization of view reduces now occurs at the coordinator node. This simplified the built-in _stats function.
  • #1392: When running CouchDB under Erlang 19.0 or newer, messages can now be stored off the process heap. This is extremely useful for Erlang processes that can have huge number of messages in their mailbox, and is now enabled for couch_server, couch_log_server, ddoc_cache, mem3_shards, and rexi_server whenever possible.
  • #1424: The CouchDB native SSL/TLS server httpsd now accepts socket-level configuration options through the [httpsd] server_options ini file setting.
  • #1440: CouchDB can now be configured to prevent non-admins from accessing the GET /_all_dbs method by specifying [chttpd] admin_only_all_dbs = true in your local ini file(s). The true setting will become default in future versions.
  • #1171, #1445: CouchDB can now be configured to use the internal Erlang MD5 hash function when not available in the external environment (e.g. FIPS enabled CentOS) at compile time with the configure flag --enable-md5. Because this implementation is slower, it is not recommended in the general case.
  • #745: CouchDB no longer fails to complete replicating databases with large attachments. The fix for this issue included several related changes:
  • The maximum http request limit, which had been lowered in 2.1.0, has been re-raised to a 4GB limit for now. (#1446). Ongoing discussion about the path forward for future releases is available in #1200 and #1253.
  • An update to the replicator http client that improves active socket accounting, without which CouchDB can cease to be responsive over the main http interface (#1117)
  • The replicator’s http client no longer performs unconditional retries on failure (#1177)
  • A path by which CouchDB could lose track of their RPC workers during multipart attachment processing was removed. (#1178)
  • When CouchDB transmits a 413 Payload Too Large response on attachment upload, it now correctly flushes the receive socket before closing the connection to avoid a TCP reset, and to give the client a better chance of parsing the 413 response. In tandem, the replicator http client correctly closes its own socket after processing any 413 response. (#1234)
  • A fabric process to receive unchunked attachments can no longer orphan processes that leave unprocessed binaries in memory until all available memory is exhausted. (#1264).
  • When using CouchDB’s native SSL responder (port 6984 by default), sessions are now timed out by default after 300s. This is to work around RAM explosion in the BEAM VM when using the Erlang-native SSL libraries. (#1321
  • #1203:
  • The compaction daemon now has a snooze period, during which it waits to start the next compaction after finishing the previous one. This value is useful in setups with many databases (e.g. with couch_peruser) or many design docs, which can cause a CPU spike every check_interval seconds. The setting can be adjusted in your local ini file via [compaction_daemon] snooze_period. The current default is a 3 second pause.
  • The check_interval has been raised from 300 seconds to 3600 seconds.
  • A notice-level log about closing view indexes has been demoted to the debug level. In a sceario with many design docs, this would createsignficant load on the logging subsystem every [compaction_daemon] check_interval for no discernible benefit.
  • Performance:
  • #958: The revision stemming algorithm was optimized down from O(N^2) to O(N) via a depth-first search approach, and then further improved by calling the stemming operation only when necessary. This new algorithm can be disabled by setting the option [couchdb] stem_interactive_updates = false if necessary.
  • #1246: CouchDB now checks for request authorization only once per each database request, improving the performance of any request that requires authorization.
  • Bugfixes:
  • #832, #1064: Tracking of Couch logging stats has been added back into the per-node /_node/<node-name>/_stats endpoint.
  • #953, #973: Return 404 Not Found on GET /_scheduler, not 405 Method Not Allowed.
  • #955: The /{db}/_bulk_docs endpoint now correctly responds with a 400 Bad Request error if the new_edits parameter is not a boolean.
  • #969: CouchDB now returns offset and update_seq values when keys are provided to the GET or POST /{db}/_all_docs?update_seq=true endpoints. This was affecting PouchDB compatibility.
  • #984, #1434: CouchDB views now retain their update_seq after compaction, preventing potentially expensive client-side view rewinds after compaction.
  • #1012: Address a theoretical race condition the replication scheduler could encounter when trying to determine if the cluster is “stable” enough to resume handling replication-introduced document updates.
  • #1051: Return a user-friendly error message when attempting to create a CouchDB user with an invalid password field (non-string).
  • #1059: DB-specific compaction configurations were not working correctly. The syntax now also supports shard-level custom compaction configuration if desired (which it probably isn’t.)
  • #1097: Compaction daemon will not crash out when trying to check specific file system mounts that are not “real” file systems (like /run on Linux).
  • #1198: Fauxton is no longer available on the node-local port (5986, by default). The node-local port is only to be used for specific administrative tasks; removing the Fauxton interface prevents mistaking the node-local port as the correct CouchDB port (5984, by default).
  • #1165: validate_doc_update view functions can once again be implemented directly in Erlang (after enabling the optional Erlang view server).
  • #1223: The couch_config application now correctly handles non-persistent integer and boolean-valued configuration changes.
  • #1242: couch_os_daemons may now reside in directories with spaces.
  • #1258: CouchDB will now successfully login users, even if password encryption is very slow.
  • #1276: The replication scheduler status for a repeatedly erroring job now correctly reflects the crashing state in more scenarios.
  • #1375: If CouchDB fails authorization but passes authentication, it no longer drops the user_ctx out of the request.
  • #1390: The active size of views (as returned in a database info response) no longer is incorrectly calculated in such a way that it could occasionally be larger than the actual on-disk file size.
  • #1401: CouchDB Erlang views no longer crash in the couch_native process with an unexpected function_clause error.
  • #1419: When deleting a file, CouchDB now properly ignores the configuration flag enable_database_recovery when set when compacting databases, rather than always retaining the old, renamed, uncompacted database file.
  • #1439: The CouchDB setup wizard now correctly validates bind_addresses. It also no longer logs credentials by moving logging of internal wizard setup steps to the debug level from the notice level.
  • Mango:
  • #816, #962, #1038: If a user specifies a value for use_index that is not valid for the selector (does not meet coverage requirements or proper sort fields), attempt to fall back to a valid index or full DB scan rather than returning a 400. If we fall back, populate a warning field in the response. Mango also tries to use indexes where $or may select a field only when certain values are present.
  • #849: When {"seq_indexed": true} is specified, a badmatch error was returned. This is now fixed.
  • #927, #1310: Error messages when attempting to sort incorrectly are now actually useful.
  • #951: When using GET /{db}/_index, only use a partial filter selector for an index if it is set to something other than the default.
  • #961: Do not prefix _design/ to a Mango index name whose user-specified name already starts with _design/.
  • #988, #989: When specifying a use_index value with an invalid index, correctly return a 400 Bad Request showing that the requested index is invalid for the request specified.
  • #998: The fix for CVE 2017-12635 presented a breaking change to Mango’s /{db}/_find, which would evaluate all instances of all JSON fields in a selector. Mango is now tested to ensure it only considers the last instance of a field, silently ignoring those that appear before it.
  • #1014: Correctly deduce list of indexed fields in a selector when nested $and operators are specified.
  • #1023: Fix an unexpected 500 error if startkey and endkey in a Mango selector were reversed.
  • #1067: Prevent an invalid_cast crash when the couch_proc_manager soft limit for processes is reached and mango idle processes are stopped.
  • #1336: The built-in fields _id and rev will always be covered by any index, and Mango now correctly ignores their presence in any index that explicitly includes them for selector matching purposes.
  • #1376: Mango now appropriately selects some indexes as usable for queries, even if not all columns for an index are added to the query’s sort field list.
  • Multiple fixes related to using Mango as a front-end for full text indexing (a feature not shipped with couch, but for which support is in place as a compile-time addon).
  • Minor improvements:
  • Developers can, at build time, enable curl libraries & disable Fauxton and documentation builds by specifying the new --dev option to the configure script.
  • The mochiweb dependency was bumped to version 2.17.0, in part to address the difficult #745 issue.
  • Improved compatibility with newer versions of Erlang (20.x)
  • Improved release process for CouchDB maintainers and PMC members.
  • Multiple test suite improvements, focused on increased coverage, speed, and reliability.
  • Improvements to the Travis CI and Jenkins CI setups, focused on improved long-term project maintenance and automatability.
  • Related improvements to the CouchDB deb/rpm packaging and Docker repositories to make deployment even easier.
  • #1007: Move etc/default.ini entries back into [replicator] section (incorrectly moved to [couch_peruser] section)
  • #1245: Increased debug-level logging for shard open errors is now available.
  • #1296: CouchDB by default now always invokes the SMP-enabled BEAM VM, even on single-processor machines. A future release of Erlang will remove the non-SMP BEAM VM entirely.
  • A pony! OK, no, not really. If you got this far…thank you for reading.

New in Apache CouchDB 2.1.1 (Apr 3, 2018)

  • Security:
  • CVE 2017-12635
  • CVE 2017-12636
  • General:
  • #617: CouchDB now supports compilation and running under Erlang/OTP 20.x.
  • #756: The couch_peruser functionality is now really fixed. Really.
  • #827: The cookie domain for AuthSession cookies, used in a proxy authentication configuration, can now be customized via the ini file.
  • #858: It is now possible to modify shard maps for system databases.
  • #732: Due to an Erlang bug (ERL-343), invalid paths can be returned if volumes are mounted containing whitespace in their name. This problem surfaced primarily on macOS (Time Machine volumes). CouchDB now works around this bug in unpatched versions of Erlang by skipping the free space check performed by the compaction daemon. Erlang itself will correctly perform free space checks in version 21.0.
  • #824: The current node’s local interface can now be accessed at /_node/_local/{endpoint} as well as at /_node/<nodename>@<hostname>/{endpoint}.
  • The Dockerfile in the source repository has been retired. For a current Dockerfile, see the couchdb-docker repository.
  • Fauxton now uses a version of React with a BSD license.
  • Performance:
  • #835: CouchDB now no longer decompresses documents just to determine their uncompressed size. In tests, this has lead to improvements between 10-40% in both CPU and wall-clock time for database compaction.
  • The design document cache (ddoc_cache) has been rewritten to improve performance.
  • Mango
  • #808: Mango now supports partial indexes. Partial indexes allow documents to be filtered at indexing time, potentially offering significant performance improvements for query selectors that don’t map cleanly to a range query on an index.
  • #740: Mango queries can now be paginated. Each query response includes a bookmark. The bookmark can be provided on a subsequent query to continue from a specific key.
  • #768: Mango _find accepts an execution_stats parameter. If present, a new object is included in the response which contains information about the query executed. The object contains the count of total keys examined (0 for json indexes), total documents examined (when include_docs=true is used), and the total quorum documents examined (when fabric doc lookups are used).
  • #816 and #866: Mango now requires that all of the fields in a candidate index must exist in a query’s selector. Previously, this check was incorrect, and indexes that might only contain a subset of valid documents might be selected by the query planner if no explicit index was specified at query time. Further, if a sort field is specified at query time, that field needs to exist (but could be null) in the results returned.
  • Other:
  • The 2.1.1 release also includes the following minor improvements:
  • #635: Stop couch_index processes on ddoc update
  • #721: Save migrated replicator checkpoint documents immediately
  • #688: Reuse http-based replication checkpoints when upgrading to https
  • #729: Recommend the use only of -name and not -sname in vm.args for compatibility.
  • #738: Allow replicator application to always update replicator docs.
  • #605: Add Prefer: return=minimal header options from RFC7240 to reduce the number of headers in the response.
  • #744: Allow a 503 response to be returned to clients (with metric support)
  • #746: Log additional information on crashes from rexi
  • #752: Allow Mango $in queries without requiring the index to use an array
  • (multiple) Additional debugging utilities have been added.
  • (multiple) Hot code upgrades from 2.0 -> 2.1.1 are now possible.
  • (multiple) Improvements to the test suite have been made.
  • #765: Mango _explain now includes view parameters as requested by the user.
  • #653: _show and _list should now work for admin-only databases such as _users.
  • #807: Mango index selection should occur only once.
  • #804: Unhandled Mango errors are now logged.
  • #659: Improve accuracy of the max_document_size check.
  • #817: Invalid Base64 in inline attachments is now caught.
  • #825: Replication IDs no longer need to be URL encoded when using the _scheduler/jobs/<job_id> endpoint.
  • #838: Do not buffer rexi messages to disconnected nodes.
  • #830: The stats collection interval is now configurable in an ini file, not in the application context. The default value is 10, and the setting is reloaded every 600 seconds.
  • #812: The /{db} endpoint now includes a cluster block with the database’s q, n, and default w and r values. This supplements the existing /{db}/_shards and /{db}/_shards/{id} detailed information on sharding and quorum.
  • #810: The replicator scheduler crashed counter gauge more reliably detects replication crashes by reducing the default number of retries from 10 to 5 (reducing the duration from 4 mins to 8 secs).
  • COUCHDB-3288: Tolerate mixed clusters for the upcoming pluggable storage engine work.
  • #839: Mango python tests now support Python 3 as well as 2.
  • #845: A convenience remsh script has been added to support live debugging of running systems.
  • #846: Replicator logging is now less verbose and more informative when replication terminates unexpectedly.
  • #797: Reduce overflow errors are now returned to the client, allowing views with a single bad reduce to build while not exhausting the server’s RAM usage.
  • #881: Mango now allows match on documents where the indexed value is an object if a range query is issued. Previously, query results might change in the presence of an index, and operators/selectors which explicitly depend on a full index scan (such as $exists) would not return a complete result set.
  • #883: Erlang time module compatibility has been improved for releases of Erlang newer than 18.0.
  • #933: 410 is now returned when attempting to make a temporary view request.
  • #934: The replicator now has a configurable delay before retrying to retrieve a document after receiving a missing_doc error.
  • #936: jiffy now deduplicates JSON keys.

New in Apache CouchDB 1.6.1 (Sep 13, 2014)

  • COUCHDB-2298: Hash plaintext admin passwords stored in local.ini on startup #ed825d3.
  • COUCHDB-2299: Filter out local admin users before updating password hash in _users db #5e46f3b.

New in Apache CouchDB 1.6.0 (Jun 11, 2014)

  • COUCHDB-2200: support Erlang/OTP 17.0 #35e16032
  • Fauxton: many improvements in our experimental new user interface, including switching the code editor from CodeMirror to Ace as well as better support for various browsers.
  • Add the max_count option (UUIDs Configuration) to allow rate-limiting the amount of UUIDs that can be requested from the /_uuids handler in a single request (CVE 2014-2668).
  • COUCHDB-1986: increase socket buffer size to improve replication speed for large documents and attachments, and fix tests on BSD-like systems. #9a0e561b
  • COUCHDB-1953: improve performance of multipart/related requests. #ce3e89dc
  • COUCHDB-2221: verify that authentication-related configuration settings are well-formed. #dbe769c6
  • COUCHDB-1922: fix CORS exposed headers. #4f619833
  • Rename proxy_authentification_handler to proxy_authentication_handler. #c66ac4a8
  • COUCHDB-1795: ensure the startup script clears the pid file on termination. #818ef4f9
  • COUCHDB-1962: replication can now be performed without having write access to the source database (#1d5fe2aa), the replication checkpoint interval is now configurable (#0693f98e).
  • COUCHDB-2025: add support for SOCKS5 proxies for replication. #fcd76c9
  • COUCHDB-1930: redirect to the correct page after submitting a new document with a different ID than the one suggested by Futon. #4906b591
  • COUCHDB-1923: add support for attachments and att_encoding_info options (formerly only available on the documents API) to the view API. #ca41964b
  • COUCHDB-1647: for failed replications originating from a document in the _replicator database, store the failure reason in the document. #08cac68b
  • A number of improvements for the documentation.

New in Apache CouchDB 1.5.1 (Apr 10, 2014)

  • Add the max_count option (UUIDs Configuration) to allow rate-limiting the amount of UUIDs that can be requested from the /_uuids handler in a single request.

New in Apache CouchDB 1.5.0 (Nov 8, 2013)

  • COUCHDB-1781: The official documentation has been overhauled. A lot of content from other sources have been merged, and the index page has been rebuilt to make the docs much more accessible. #54813a7
  • A new administration UI, codenamed Fauxton, has been included as an experimental preview. It can be accessed at /_utils/fauxton/. There are too many improvements here to list them all. We are looking for feedback from the community on this preview release.
  • COUCHDB-1888: Fixed an issue where admin users would be restricted by the public_fields feature.
  • Fixed an issue with the JavaScript CLI test runner. #be76882, #54813a7
  • COUCHDB-1867: An experimental plugin feature has been added. See src/couch_plugin/README.md for details. We invite the community to test and report any findings.
  • COUCHDB-1894: An experimental Node.js-based query server runtime has been added. See Experimental Features for details. We invite the community to test and report any findings.
  • COUCHDB-1901: Better retry mechanism for transferring attachments during replication. #4ca2cec

New in Apache CouchDB 1.4.0 (Sep 4, 2013)

  • Upgrade Notes:
  • We now support Erlang/OTP R16B and R16B01; the minimum required version is R14B.
  • User document role values must now be strings. Other types of values will be refused when saving the user document.
  • Changes:
  • COUCHDB-1684: Support for server-wide changes feed reporting on creation, updates and deletion of databases. #917d8988
  • COUCHDB-1139: it’s possible to apply list functions to _all_docs view. #54fd258e
  • Automatic loading of CouchDB plugins. #3fab6bb5
  • COUCHDB-1634: Reduce PBKDF2 work factor. #f726bc4d
  • Allow storing pre-hashed admin passwords via _config API. #c98ba561
  • COUCHDB-1772: Prevent invalid JSON output when using all_or_nothing _bulk_docs API. #dfd39d57
  • Add a configurable whitelist of user document properties. #8d7ab8b1
  • COUCHDB-1852: Support Last-Event-ID header in EventSource changes feeds. #dfd2199a
  • Much improved documentation, including an expanded description of validate_doc_update functions (commit:ef9ac469) and a description of how CouchDB handles JSON number values (#bbd93f77).
  • COUCHDB-1632: Ignore epilogues in multipart/related MIME attachments. #2b4ab67a
  • Split up replicator_db tests into multiple independent tests.

New in Apache CouchDB 1.3.1 (Jun 29, 2013)

  • Replicator:
  • Tolerate missing source and target fields in _replicator docs (COUCHDB-1788).
  • Log System:
  • Don't log about missing .compact files.
  • Fix bug in WARN level logging from 1.3.0 (COUCHDB-1794).
  • View Server:
  • Fix the -S option to couchjs to increase memory limits (COUCHDB-1792).
  • Misc:
  • Improve documentation: better structure, improve language, less duplication.
  • Improvements to test suite and VPATH build system.

New in Apache CouchDB 1.3.0 (Apr 4, 2013)

  • HTTP Interface:
  • No longer rewrites the X-CouchDB-Requested-Path during recursive calls to the rewriter.
  • Limit recursion depth in the URL rewriter. Defaults to a maximum of 100 invocations but is configurable.
  • Fix _session for IE7.
  • Added Server-Sent Events protocol to db changes API. See http://www.w3.org/TR/eventsource/ for details.
  • Make password hashing synchronous when using the /_config/admins API.
  • Include user name in show/list ETags.
  • Experimental support for Cross-Origin Resource Sharing (CORS). See http://www.w3.org/TR/cors/ for details.
  • Replicator:
  • The replicator will use a new server-wide UUID in checkpoint IDs to improve the chances of an efficient resume.
  • Storage System:
  • Fixed unnecessary conflict when deleting and creating a document in the same batch.
  • View Server:
  • Additional response headers may be varied prior to send().
  • GetRow() is now side-effect free.
  • Futon:
  • Disabled the link to the Futon test suite. These tests were causing problems when run from a browser, and are now available via the CLI instead.
  • Added view request duration to Futon.
  • Disable buttons for actions that the user doesn't have permissions to.
  • Security:
  • Passwords are now hashed using the PBKDF2 algorithm with a configurable work factor.
  • Test Suite:
  • Moved the JS test suite to the CLI.
  • Improved tracebacks printed by the JS CLI tests.
  • Improved the reliability of a number of tests.
  • UUID Algorithms:
  • Added the utc_id algorithm.
  • URL Rewriter & Vhosts:
  • Database name is encoded during rewriting (allowing embedded /'s, etc).
  • Reset rewrite counter on new request, avoiding unnecessary request failures due to bogus rewrite limit reports.
  • Build System:
  • C/C++ compiler detection has been improved.
  • Autoconf v2.63 is now required if building from Git checkout directly. See DEVELOPERS file for more details.
  • Fixed issue in couchdb script where stopped status returns before process exits.

New in Apache CouchDB 1.2.1 (Jan 11, 2013)

  • HTTP Interface:
  • No longer rewrites the X-CouchDB-Requested-Path during recursive calls to the rewriter.
  • Limit recursion depth in the URL rewriter. Defaults to a maximum of 100 invocations but is configurable.
  • Build System:
  • Fix couchdb start script.
  • Win: fix linker invocations.
  • Futon:
  • Disable buttons that aren't available for the logged-in user.
  • Replication:
  • Fix potential timeouts.
  • View System:
  • Change use of signals to avoid broken view groups.

New in Apache CouchDB 1.2.0 (Apr 7, 2012)

  • Performance:
  • Added a native JSON parser
  • Optional file compression (database and view index files)
  • Several performance improvements, especially regarding database writes and view indexing
  • Performance improvements for the built-in changes feed filters _doc_ids and _design
  • Security:
  • Documents in the _users database can no longer be read by everyone
  • Confidential information in the _replication database can no longer be read by everyone
  • Password hashes are now calculated by CouchDB instead of the client
  • Allow persistent authentication cookies
  • OAuth secrets can now be stored in the users system database
  • Updated bundled erlang_oauth library to the latest version
  • Build System:
  • cURL is no longer required to build CouchDB as it is only required by the command line JavaScript test runner
  • HTTP API:
  • Added a data_size property to database and view group information URIs
  • Added optional field since_seq to replication objects/documents
  • The _active_tasks API now exposes more granular fields for each task type
  • Added built-in changes feed filter _view
  • Core Storage:
  • Added support for automatic compaction
  • Compaction can be cancelled if it exceeds the closing time. Compaction for views and databases can be set to run in parallel, but that is only useful for setups where the database directory and view directory are on different disks. In addition, if there's not enough space (2 × data_size) on the disk to complete a compaction, an error is logged and the compaction is not started.
  • Replicator:
  • A new replicator implementation that offers more performance and configuration options
  • See default.ini for the full list of options and their default values.
  • Futon:
  • Futon's Status screen (active tasks) now displays two new task status fields: Started on and Updated on
  • Simpler replication cancellation
  • Log System:
  • Log correct stack trace in all cases
  • Improvements to log messages for file-related errors
  • Various Bug fixes:
  • Fixed old index file descriptor leaks after a view cleanup
  • Fixes to the _changes feed heartbeat option when combined with a filter. It affected continuous pull replications with a filter
  • Fix use of OAuth with VHosts and URL rewriting
  • The requested_path property of query server request objects now has the path requested by clients before VHosts and rewriting
  • Fixed incorrect reduce query results when using pagination parameters
  • Made icu_driver work with Erlang R15B and later
  • Improvements to the build system and etap test suite
  • Avoid invalidating view indexes when running out of file descriptors