diff --git a/src/current/_data/releases.yml b/src/current/_data/releases.yml
index 01bff6a2153..d365f7c1172 100644
--- a/src/current/_data/releases.yml
+++ b/src/current/_data/releases.yml
@@ -11537,3 +11537,38 @@
docker_arm_limited_access: false
source: true
previous_release: v24.1.28
+
+
+- release_name: v26.2.1
+ major_version: v26.2
+ release_date: '2026-05-22'
+ release_type: Production
+ go_version: go1.26.2
+ sha: b398a6e1fde74a915daf8e9841303c8ee39c2abe
+ has_sql_only: true
+ has_sha256sum: true
+ mac:
+ mac_arm: true
+ mac_arm_experimental: true
+ mac_arm_limited_access: false
+ windows: true
+ linux:
+ linux_arm: true
+ linux_arm_experimental: false
+ linux_arm_limited_access: false
+ linux_intel_fips: true
+ linux_arm_fips: false
+ docker:
+ docker_image: cockroachdb/cockroach
+ docker_arm: true
+ docker_arm_experimental: false
+ docker_arm_limited_access: false
+ source: true
+ previous_release: v26.2.0
+ cloud_only: true
+ cloud_only_message_short: 'Available only for select CockroachDB Cloud clusters'
+ cloud_only_message: >
+ This version is currently available only for select
+ CockroachDB Cloud clusters. To request to upgrade
+ a CockroachDB self-hosted cluster to this version,
+ [contact support](https://support.cockroachlabs.com/hc/requests/new).
diff --git a/src/current/_includes/releases/v26.2/v26.2.1.md b/src/current/_includes/releases/v26.2/v26.2.1.md
new file mode 100644
index 00000000000..0dd060d5e4b
--- /dev/null
+++ b/src/current/_includes/releases/v26.2/v26.2.1.md
@@ -0,0 +1,56 @@
+## v26.2.1
+
+Release Date: May 22, 2026
+
+{% include releases/new-release-downloads-docker-image.md release=include.release %}
+
+
SQL language changes
+
+- Renamed the `canary_stats_mode` session variable values from `"off"`/`"on"` to `"force_stable"`/`"force_canary"`. These modes now work independently of the `sql.stats.canary_fraction` cluster setting, allowing per-session opt-in without cluster-wide enrollment. [#168295][#168295]
+- Added a new session variable `optimizer_span_limit` that bounds the number of spans the optimizer will allow in a single constrained index scan. If a single `IN` set has more items than this limit, that `IN` set will not be used to build a constrained index scan. If the cross product of two or more `IN` sets would produce more spans than this limit for a composite index, then only a prefix of the `IN` sets will be used to produce spans.
+
+ For example, for the following table and query, only the predicates on columns `a` and `b` will be used to construct the constrained scan of `abc_idx`, because including the predicate on column `c` would produce more spans than `optimizer_span_limit`:
+
+ ```sql
+ CREATE TABLE abc (a INT, b INT, c INT, INDEX abc_idx (a, b, c));
+ SET optimizer_span_limit = 10;
+ SELECT * FROM abc WHERE a IN (1, 3, 5) AND b IN (2, 4, 6) AND c IN (7, 9, 11);
+ ``` [#168617][#168617]
+- Added a new cluster setting `sql.stats.table_statistics_cache.capacity` that controls the maximum number of tables whose statistics are retained in the in-memory LRU cache (default: `256`). [#169247][#169247]
+
+Operational changes
+
+- Made the following cluster settings documented and publicly visible: `obs.ash.enabled`, `obs.ash.sample_interval`, `obs.ash.buffer_size`, `obs.ash.log_interval`, `obs.ash.log_top_n`, and `obs.ash.response_limit`. These settings control Active Session History (ASH) sampling frequency, buffer size, logging intervals, and query limits. [#168799][#168799]
+- Added three new admission control metrics for monitoring disk bandwidth token usage: `admission.granter.disk_write_byte_tokens_used.regular.kv`, `admission.granter.disk_write_byte_tokens_used.elastic.kv`, and `admission.granter.disk_write_byte_tokens_used.snapshot.kv`. The existing `admission.granter.disk_write_byte_tokens_exhausted_duration.kv` metric is now marked as essential and will appear on the **Overload** dashboard. [#169713][#169713]
+- Four new gauges `mma.overloaded_store.{lease_grace,short_dur,medium_dur,long_dur}.blocked` report overloaded stores that the multi-metric allocator (MMA) deferred because they already had too much pending work. Per duration bucket, success + failure + blocked equals the count of overloaded stores observed. A persistently non-zero value on the `long_dur.blocked` gauge indicates an overloaded store that is repeatedly being deferred and may not be receiving relief. [#169742][#169742]
+
+Bug fixes
+
+- Fixed a bug where transient I/O errors reading from the `AbortSpan` were misidentified as replica corruption, causing the node to crash. These errors are now returned to the caller as regular errors. [#168014][#168014]
+- Fixed a bug where DB Console **Databases** page privilege checks did not resolve role membership chains for `CONNECT` grants. Users who inherited `CONNECT` through role hierarchies now correctly see their authorized databases and tables. [#168496][#168496]
+- Fixed a bug under the declarative schema changer where `ALTER TABLE ... DROP CONSTRAINT {pk}, ADD PRIMARY KEY (...)` would leave behind an unwanted unique secondary index on the old primary key columns. [#168967][#168967]
+- Stopped logging a spurious "declarative schema changer does not support DISCARD" message every time a `DISCARD` statement was executed. The message had no functional impact but could produce very high log volume on busy clusters that issue `DISCARD` on every connection checkout. [#169077][#169077]
+- A physical cluster replication reader tenant no longer fails authentication and other queries with errors of the form "resolved to but found no descriptor with id " after the reader tenant ingests a system table at an ID different from the one it was bootstrapped with. Previously, a per-node namespace cache could pin the bootstrap-time ID and require a tenant restart to recover. [#169139][#169139]
+- Fixed a panic during `CREATE VECTOR INDEX` backfill when the table contained a public column ordered before the vector column that was not stored in the source primary index and was not referenced by the new index. In practice this was triggered by virtual computed columns. The schema change crashed the SQL node processing the backfill instead of completing. [#169250][#169250]
+- Fixed a bug where unqualified function calls could fail with incorrect privilege errors when two databases on the same cluster had identically-named functions in custom schemas. The query cache could serve a memo from one database context to another, causing `USAGE` privilege errors referencing schemas from the wrong database. [#169291][#169291]
+- Fixed a bug where Physical Cluster Replication (PCR) reader virtual clusters could permanently fail authentication, causing all SQL connections to fail with "descriptor not found". [#169389][#169389]
+- Fixed a bug where `RESTORE TABLE` of a multi-region table backed up mid-`ALTER TABLE ... SET LOCALITY` would fail with a descriptor rewrite error. [#169425][#169425]
+- Fixed a data race in the multi-metric allocator between gossip-driven store load updates and concurrent lease/replica rebalancing decisions. [#169590][#169590]
+
+
+[#169291]: https://github.com/cockroachdb/cockroach/pull/169291
+[#169425]: https://github.com/cockroachdb/cockroach/pull/169425
+[#168295]: https://github.com/cockroachdb/cockroach/pull/168295
+[#168617]: https://github.com/cockroachdb/cockroach/pull/168617
+[#169247]: https://github.com/cockroachdb/cockroach/pull/169247
+[#169742]: https://github.com/cockroachdb/cockroach/pull/169742
+[#169139]: https://github.com/cockroachdb/cockroach/pull/169139
+[#169250]: https://github.com/cockroachdb/cockroach/pull/169250
+[#168799]: https://github.com/cockroachdb/cockroach/pull/168799
+[#169713]: https://github.com/cockroachdb/cockroach/pull/169713
+[#169389]: https://github.com/cockroachdb/cockroach/pull/169389
+[#169590]: https://github.com/cockroachdb/cockroach/pull/169590
+[#168014]: https://github.com/cockroachdb/cockroach/pull/168014
+[#168496]: https://github.com/cockroachdb/cockroach/pull/168496
+[#168967]: https://github.com/cockroachdb/cockroach/pull/168967
+[#169077]: https://github.com/cockroachdb/cockroach/pull/169077