diff --git a/CHANGELOG.md b/CHANGELOG.md
index 993b619d27f..c51c9342157 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,119 @@ documentation before upgrading to a new release.
Released closed milestones can be found on [GitHub](https://github.com/Icinga/icinga2/milestones?state=closed).
+## 2.16.0 (2026-04-23)
+
+With this release the license of the project was updated to GPLv3 or later (#10700).
+
+In this release we've added the `OTLPMetricsWriter`, a new perfdata writer targeting backends that support the
+OpenTelemetry protocol. We recommend users to replace other perfdata writers with this one if possible, especially
+`ElasticsearchWriter`, which is now deprecated and scheduled for removal in v2.18.
+
+Another big improvement is the addition of streaming support to our HTTP handlers. Most handlers now use chunked
+encoding to reduce the amount of the generated JSON document that has to be kept in memory at any one time. Some
+endpoints, notably `v1/objects/query`, will also start to stream the response immediately, as the results are processed.
+This should solve most of the memory issues users were seeing when using the Icinga 2 API on large clusters.
+
+We've also redone our Docker images with this version, with some changes to how the `/data` directory is mounted and
+initialized, so make sure you read the new documentation page for
+[installing Icinga 2 in containers](https://icinga.com/docs/icinga-2/latest/doc/02-installation/For-Container).
+
+Below is a summary of the changes relevant for our users. For the complete list of issues and PRs, please see the
+[milestone on GitHub](https://github.com/Icinga/icinga2/issues?q=is%3Aclosed+milestone%3A2.16.0).
+
+### Notes
+
+Thanks to all contributors:
+[brad0](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3Abrad0),
+[cjsoftuk](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3Acjsoftuk),
+[Donien](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3ADonien),
+[Egor-OSSRevival](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3AEgor-OSSRevival),
+[ETES-Stuttgart](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3AETES-Stuttgart),
+[freaknils](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3Afreaknils),
+[martialblog](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3Amartialblog),
+[Napsty](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3ANapsty),
+[RincewindsHat](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3ARincewindsHat),
+[Tqnsls](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3ATqnsls),
+[w1ll-i-code](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3Aw1ll-i-code),
+[ymartin-ovh](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+is%3Aclosed+milestone%3A2.16.0+author%3Aymartin-ovh)
+
+### Deprecations
+
+Features newly deprecated in this version:
+* `ElasticsearchWriter` (please use the new `OTLPMetricsWriter` instead)
+* User declared namespace objects (i.e. `namespace foo {}`)
+
+We've scheduled these features for removal in v2.18 (#10734).
+
+These features have already been deprecated and will also be removed in v2.18:
+* `IdoMySqlConnection`
+* `IdoPgsqlConnection`
+* `CompatLogger`
+* `ExternalCommandListener`
+* `LivestatusListener`
+* Windows check-plugins (i.e. `check_*.exe`) and `CheckCommand`s (please use our [PowerShell Plugins](https://github.com/Icinga/icinga-powershell-plugins) instead)
+
+We will also no longer provide 32bit Windows MSIs via Chocolatey (#10757).
+
+### Enhancements
+
+* OTLPMetricsWriter: A new perfdata writer for the OpenTelemetry protocol: #10685, #10789, and #10800
+* HTTP API-handlers now stream results via chunked encoding where possible: #10554, #10692, #10516, and #10414
+* Rework docker images build: #10505, #10666, and #10738
+* Better debug log messages for dependencies with non-existing parents or children: #10737
+* No longer require the unused `queue` parameter for `v1/events`: #10495
+* Allow UID/GID values in `ICINGA2_USER` and `ICINGA2_GROUP` environment variables: #10538
+* Add `messages_received_per_type` attribute to endpoints: #10387
+* Better error messages on RedisĀ® connection errors: #10727
+* New node-setup command option `--no-default-global-zones`: #10028
+* Warn on problematic object names: #10770
+* New config option `http_response_headers` for ApiListener that allows to set arbitrary HTTP-headers that will be sent
+ back with responses: #10563, #10664, and #10662
+
+### Bugfixes
+
+* Fix a race condition in the `v1/console` handler: #10681 and #10675
+* InfluxDBWriter: Print full HTTP error body when request fails: #10560
+* Fix a crash when querying objects that are simultaneously deleted: #10698
+* Fix a race condition leading to double notifications: #10628
+* Improve BSD support: #10641, #10640, #10638, and #10635
+* TimePeriod: Properly validate `ranges` field: #10633
+* Fix recovery notifications outside time period being lost: #10613
+* Prevent worst-case exponential complexity in dependency evaluation: #10523
+* Fix double-free error in `posix_error::what()`: #10558
+* Fix expiry times not applying correctly to Acknowledgements via ExternalCommandProcessor: #10486
+* Fix dropped or stalled connections blocking Icinga 2 shutdown on all perfdata writers: #10668 and #10799
+* Fix misleading TLS handshake error logging: #10798
+* SELinux: Allow to query attrs of a filesystem: #10726
+
+### ITL
+
+* Support for the `check_smart` plugin: #8041
+* Add `ssl_cert_long_output` option to `check_ssl_cert` plugin: #10526
+* Enhanced SMART attributes monitoring plugin check configuration with more parameters: #10564
+* Add plain fping CheckCommand to ITL: #10494
+* Remove clear variable from disk CheckCommand: #10531
+* Add a check command for NETGEAR monitoring: #10753
+
+### Optimizations
+
+* Several performance optimizations for the RedisĀ® connection: #10391, #10732, and #10744
+* IcingaDB: Better config and state update queueing: #10619
+* Freeze registries after startup: #10388
+* Small code and performance optimizations in `Log` class: #10504
+* Improved efficiency of the `CpuBoundWork` implementation: #9990 and #10795
+
+### Miscellaneous
+
+* Documentation Improvements: #10481, #10493, #10501, #10513, #10514, #10683, #10686, #10702, and #10745
+* Code Quality Improvements: #9411, #10609, #9728, #9729, #9730, #10499, #10552, #10693, #10715, #10716, and #10756
+* Unit-Test Improvements: #10350, #10528, #10561, #10749, #10550, #10767, and #10776
+
+### Windows
+
+* OpenSSL shipped on Windows updated to 3.5.6: #10786
+* Boost version shipped on Windows updated to 1.90: #10669
+
## 2.15.2 (2026-01-29)
This security release fixes a problem in the Icinga 2 Windows MSI that did not
diff --git a/ICINGA2_VERSION b/ICINGA2_VERSION
index 66639bc0c36..240e69a915b 100644
--- a/ICINGA2_VERSION
+++ b/ICINGA2_VERSION
@@ -1,2 +1,2 @@
-Version: 2.15.0
+Version: 2.16.0
Revision: 1
diff --git a/doc/16-upgrading-icinga-2.md b/doc/16-upgrading-icinga-2.md
index bdff71ec454..ee67e0a82e3 100644
--- a/doc/16-upgrading-icinga-2.md
+++ b/doc/16-upgrading-icinga-2.md
@@ -8,6 +8,29 @@ Specific version upgrades are described below. Please note that version
updates are incremental. An upgrade from v2.6 to v2.8 requires to
follow the instructions for v2.7 too.
+## Upgrading to v2.16
+
+### Migrating from ElasticsearchWriter to OTLPMetricsWriter
+
+ElasticsearchWriter is deprecated in v2.16 and will be removed in v2.18. In case you are using Elasticsearch 9.2 or later,
+we suggest migrating to the new OTLPMetricsWriter as a replacement. The index data structure in Elasticsearch will be
+different though, so any third-party tools working with that data will need to be adapted as well.
+
+### Deprecation of user-defined DSL Namespaces
+
+If you were previously using constructs like `namespace my_utils { ... }` in your config, we suggest
+replacing them with global functions and variables, since user-defined namespaces will be removed in v2.18.
+
+### Previously deprecated features
+
+Since these previously deprecated features are now scheduled for removal in v2.18, please switch to the listed
+alternatives:
+
+* `IdoMySqlConnection` and `IdoPgsqlConnection`: Please switch to Icinga DB.
+* `CompatLogger`: For detailed logging of state changes, use the [/v1/events API endpoint](https://icinga.com/docs/icinga-2/latest/doc/12-icinga2-api/#event-streams).
+* `ExternalCommandListener` and `LivestatusListener`: Please use the [Icinga 2 API](https://icinga.com/docs/icinga-2/latest/doc/12-icinga2-api/) instead.
+* Windows check-plugins (`check_*.exe`) and `CheckCommand`s: Please use our [PowerShell plugins](https://github.com/Icinga/icinga-powershell-plugins) instead.
+
## Upgrading to v2.15
### Icinga DB