diff --git a/src/pages/download.md b/src/pages/download.md
index 99276b129c..16b7560c9f 100644
--- a/src/pages/download.md
+++ b/src/pages/download.md
@@ -2,6 +2,7 @@
| Version | Release Date | Source Download | Binary Download | Release Notes |
| ------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
+| 2.2.1 | TBD | [Source](https://www.apache.org/dyn/closer.cgi/ozone/2.2.1/ozone-2.2.1-src.tar.gz)
[Checksum](https://downloads.apache.org/ozone/2.2.1/ozone-2.2.1-src.tar.gz.sha512)
[Signature](https://downloads.apache.org/ozone/2.2.1/ozone-2.2.1-src.tar.gz.asc) | [Binary](https://www.apache.org/dyn/closer.cgi/ozone/2.2.1/ozone-2.2.1.tar.gz)
[Checksum](https://downloads.apache.org/ozone/2.2.1/ozone-2.2.1.tar.gz.sha512)
[Signature](https://downloads.apache.org/ozone/2.2.1/ozone-2.2.1.tar.gz.asc) | [Release Notes](/release-notes/2.2.1) |
| 2.2.0 | 2026 Jul 15 | [Source](https://www.apache.org/dyn/closer.cgi/ozone/2.2.0/ozone-2.2.0-src.tar.gz)
[Checksum](https://downloads.apache.org/ozone/2.2.0/ozone-2.2.0-src.tar.gz.sha512)
[Signature](https://downloads.apache.org/ozone/2.2.0/ozone-2.2.0-src.tar.gz.asc) | [Binary](https://www.apache.org/dyn/closer.cgi/ozone/2.2.0/ozone-2.2.0.tar.gz)
[Checksum](https://downloads.apache.org/ozone/2.2.0/ozone-2.2.0.tar.gz.sha512)
[Signature](https://downloads.apache.org/ozone/2.2.0/ozone-2.2.0.tar.gz.asc) | [Release Notes](/release-notes/2.2.0) |
| 2.1.1 | 2026 Jun 21 | [Source](https://www.apache.org/dyn/closer.cgi/ozone/2.1.1/ozone-2.1.1-src.tar.gz)
[Checksum](https://downloads.apache.org/ozone/2.1.1/ozone-2.1.1-src.tar.gz.sha512)
[Signature](https://downloads.apache.org/ozone/2.1.1/ozone-2.1.1-src.tar.gz.asc) | [Binary](https://www.apache.org/dyn/closer.cgi/ozone/2.1.1/ozone-2.1.1.tar.gz)
[Checksum](https://downloads.apache.org/ozone/2.1.1/ozone-2.1.1.tar.gz.sha512)
[Signature](https://downloads.apache.org/ozone/2.1.1/ozone-2.1.1.tar.gz.asc) | [Release Notes](/release-notes/2.1.1) |
| 2.0.0 | 2025 Apr 30 | [Source](https://www.apache.org/dyn/closer.cgi/ozone/2.0.0/ozone-2.0.0-src.tar.gz)
[Checksum](https://downloads.apache.org/ozone/2.0.0/ozone-2.0.0-src.tar.gz.sha512)
[Signature](https://downloads.apache.org/ozone/2.0.0/ozone-2.0.0-src.tar.gz.asc) | [Binary](https://www.apache.org/dyn/closer.cgi/ozone/2.0.0/ozone-2.0.0.tar.gz)
[Checksum](https://downloads.apache.org/ozone/2.0.0/ozone-2.0.0.tar.gz.sha512)
[Signature](https://downloads.apache.org/ozone/2.0.0/ozone-2.0.0.tar.gz.asc) | [Release Notes](/release-notes/2.0.0) |
diff --git a/src/pages/release-notes/2.2.1.md b/src/pages/release-notes/2.2.1.md
new file mode 100644
index 0000000000..06dd17dac5
--- /dev/null
+++ b/src/pages/release-notes/2.2.1.md
@@ -0,0 +1,92 @@
+# Release 2.2.1 Available
+
+
+
+## Release Notes
+
+Apache Ozone 2.2.1 is a maintenance release on top of Ozone 2.2.0 with bug fixes, performance improvements, and dependency updates.
+
+## Notable Fixes
+
+### [HDDS-15783](https://issues.apache.org/jira/browse/HDDS-15783) — SCM fails to deserialize empty lists from Ratis log
+
+Fixed deserialization failure when SCM Ratis log entries contained empty lists, which could block SCM startup or state replay.
+
+---
+
+### [HDDS-15578](https://issues.apache.org/jira/browse/HDDS-15578) — InvalidStateTransitionException can crash SCM
+
+SCM no longer crashes from uncaught InvalidStateTransitionException during container state updates.
+
+---
+
+### [HDDS-15791](https://issues.apache.org/jira/browse/HDDS-15791) — EC RECOVERING container data loss after idle scrub
+
+Fixed EC offline reconstruction data loss when idle RECOVERING containers were scrubbed and auto-recreated as partial CLOSED replicas.
+
+---
+
+### [HDDS-15849](https://issues.apache.org/jira/browse/HDDS-15849) — gRPC client shutdown slows parallel reads
+
+Fixed a performance regression where gRPC client shutdown blocked the datanode client cache lock for 100 ms or more per close, causing severe slowdown in parallel read workloads such as EC reconstruction.
+
+---
+
+### [HDDS-15665](https://issues.apache.org/jira/browse/HDDS-15665) — Datanode transaction iterator race condition
+
+Fixed a race condition in the datanode transaction iterator that could cause already-deleted transactions to be loaded and reprocessed after a flush.
+
+---
+
+### [HDDS-12669](https://issues.apache.org/jira/browse/HDDS-12669) — ContainerSet recoveringContainerMap race condition
+
+Fixed a race condition in ContainerSet#recoveringContainerMap that could cause incorrect container recovery state during datanode restarts.
+
+---
+
+### [HDDS-15552](https://issues.apache.org/jira/browse/HDDS-15552) — Prometheus scraping fails on Ozone metrics
+
+Fixed Prometheus metrics endpoints failing to scrape Ozone services because Ratis event strings were published as metric names containing invalid characters.
+
+---
+
+### [HDDS-11772](https://issues.apache.org/jira/browse/HDDS-11772) — Recon reports incorrect Ozone used capacity
+
+Fixed incorrect Ozone used capacity reporting in Recon that could show vastly inflated values compared to the actual data written.
+
+---
+
+## Changelog
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+### Fixed
+
+- Fixed SCM deserialization failure for empty lists in Ratis log entries. ([HDDS-15783](https://issues.apache.org/jira/browse/HDDS-15783))
+- Fixed SCM crashes from uncaught InvalidStateTransitionException during container state updates. ([HDDS-15578](https://issues.apache.org/jira/browse/HDDS-15578))
+- Fixed EC offline reconstruction data loss for idle RECOVERING containers. ([HDDS-15791](https://issues.apache.org/jira/browse/HDDS-15791))
+- Fixed gRPC client shutdown performance regression under parallel read workloads. ([HDDS-15849](https://issues.apache.org/jira/browse/HDDS-15849))
+- Fixed datanode transaction iterator race condition after flush. ([HDDS-15665](https://issues.apache.org/jira/browse/HDDS-15665))
+- Fixed ContainerSet#recoveringContainerMap race condition during datanode restarts. ([HDDS-12669](https://issues.apache.org/jira/browse/HDDS-12669))
+- Fixed Prometheus metrics scraping failures caused by invalid Ratis event metric names. ([HDDS-15552](https://issues.apache.org/jira/browse/HDDS-15552))
+- Fixed incorrect Ozone used capacity reporting in Recon. ([HDDS-11772](https://issues.apache.org/jira/browse/HDDS-11772))
+
+### Changed
+
+- Upgraded Netty to 4.1.135. ([HDDS-15722](https://issues.apache.org/jira/browse/HDDS-15722))
+- Upgraded Netty to 4.1.136. ([HDDS-15900](https://issues.apache.org/jira/browse/HDDS-15900))
+- Upgraded BouncyCastle to 1.85. ([HDDS-15974](https://issues.apache.org/jira/browse/HDDS-15974))
+- Upgraded Protobuf to 3.25.9. ([HDDS-15674](https://issues.apache.org/jira/browse/HDDS-15674))
+- Upgraded Ratis thirdparty to 1.0.11. ([HDDS-15727](https://issues.apache.org/jira/browse/HDDS-15727))
+
+## Downloads
+
+- [Download tar.gz](https://www.apache.org/dyn/closer.cgi/ozone/2.2.1/ozone-2.2.1.tar.gz) ([checksum](https://downloads.apache.org/ozone/2.2.1/ozone-2.2.1.tar.gz.sha512), [signature](https://downloads.apache.org/ozone/2.2.1/ozone-2.2.1.tar.gz.asc))
+- [Download src](https://www.apache.org/dyn/closer.cgi/ozone/2.2.1/ozone-2.2.1-src.tar.gz) ([checksum](https://downloads.apache.org/ozone/2.2.1/ozone-2.2.1-src.tar.gz.sha512), [signature](https://downloads.apache.org/ozone/2.2.1/ozone-2.2.1-src.tar.gz.asc))
+
+## Documentation
+
+- [Ozone 2.2.1 Documentation](https://ozone.apache.org/docs/2.2.1)
+
+**Release Date:** TBD
diff --git a/versions.json b/versions.json
index 26064f91b7..75f9619789 100644
--- a/versions.json
+++ b/versions.json
@@ -1,4 +1,5 @@
[
+ "2.2.1",
"2.2.0",
"2.1.1"
]