diff --git a/doc/user/content/releases/_index.md b/doc/user/content/releases/_index.md
index ad4bc15367714..ab52ca41c6f91 100644
--- a/doc/user/content/releases/_index.md
+++ b/doc/user/content/releases/_index.md
@@ -19,6 +19,76 @@ Starting with the v26.1.0 release, Materialize releases on a weekly schedule for
both Cloud and Self-Managed. See [Release schedule](/releases/schedule) for details.
{{ note >}}
+## v26.40.0
+*Released to Materialize Cloud: 2026-09-02*
+*Released to Materialize Self-Managed: 2026-09-03*
+
+### Iceberg support for Databricks on AWS {#v26.40-iceberg-support-for-databricks-on-aws}
+
+{{< public-preview />}}
+
+Iceberg sinks can now write to Apache Iceberg tables registered in [Databricks
+Unity Catalog](/serve-results/sink/iceberg-databricks/) on AWS, reached through
+Unity Catalog's Iceberg REST catalog endpoint. Two new Iceberg catalog
+connection options make this work: `OAUTH2 SERVER URL`, which names a token
+endpoint that does not sit under the catalog URI, and `ACCESS DELEGATION =
+'vended-credentials'`, which asks the catalog for temporary, table-scoped
+storage credentials instead of static keys. Materialize refreshes both the
+OAuth2 token and the vended credentials while the sink runs, so a sink that
+outlives one credential lifetime keeps writing.
+
+```mzsql
+CREATE SECRET databricks_oauth
+ AS ':';
+
+CREATE CONNECTION iceberg_catalog_connection TO ICEBERG CATALOG (
+ CATALOG TYPE = 'rest',
+ URL = 'https://.cloud.databricks.com/api/2.1/unity-catalog/iceberg-rest',
+ WAREHOUSE = '',
+ CREDENTIAL = SECRET databricks_oauth,
+ OAUTH2 SERVER URL = 'https://.cloud.databricks.com/oidc/v1/token',
+ SCOPE = 'all-apis',
+ ACCESS DELEGATION = 'vended-credentials'
+);
+
+CREATE SINK
+ IN CLUSTER
+ FROM
+ INTO ICEBERG CATALOG CONNECTION iceberg_catalog_connection (
+ NAMESPACE = '',
+ TABLE = ''
+ )
+ MODE APPEND
+ WITH (COMMIT INTERVAL = '');
+```
+
+For more information, see:
+- [Guide: Databricks on AWS](/serve-results/sink/iceberg-databricks/)
+- [`CREATE CONNECTION`: Iceberg catalog](/sql/create-connection/#iceberg-catalog), including [storage access delegation](/sql/create-connection/#iceberg-catalog-access-delegation)
+- [`CREATE SINK`: Iceberg](/sql/create-sink/iceberg/), including [append mode](/sql/create-sink/iceberg/#append-mode)
+
+### Improvements {#v26.40-improvements}
+- **Query History for Self-Managed**: Self-Managed deployments can now use the Console's Query History view to debug latency and performance.
+- **Bounded staleness isolation is generally available**: The [`bounded staleness `](/reference/isolation-level/#bounded-staleness) transaction [isolation level](/reference/isolation-level/) is out of public preview and is now a supported part of the [`transaction_isolation`](/reference/isolation-level/#setting-isolation-level) surface. See [when to use bounded staleness](/reference/isolation-level/#when-to-use-bounded-staleness) and its [restrictions](/reference/isolation-level/#restrictions).
+- **Replica resource usage introspection**: A new `mz_introspection.mz_cluster_replica_resource_usage` relation reports each replica process's own memory, swap, and disk observations at a higher cadence than the roughly once-a-minute orchestrator samples, so a spike between two samples is no longer invisible.
+
+### Agent Skills {#v26.40-agent-skills}
+- **mz-optimize-memory**: A new skill that works top-down from a cluster's largest arrangements to a table of memory-reducing fixes — index changes, outer-join and subquery rewrites, window-function patterns, and arrangement size hints — with rules for estimating each saving before making the change and verifying it afterwards.
+
+### Bug Fixes {#v26.40-bug-fixes}
+- Fixed the MCP servers rejecting `tools/list`, `ping`, and `notifications/initialized` requests that carry any `params` — including the `_meta` field MCP clients are allowed to attach — with a non-JSON-RPC HTTP 422 that clients read as the server being unavailable.
+- Fixed `ALTER MATERIALIZED VIEW ... APPLY REPLACEMENT` leaving a stale cached query plan behind, which put `environmentd` into a crash loop on every subsequent restart once a dependency of the replaced definition was dropped, and could otherwise leave the view computing its old definition.
+- `CREATE TABLE ... FROM SOURCE` now requires `SELECT` on the source and `USAGE` on its schema, closing a case where `CREATE` on any schema a role controlled was enough to read a source that role had been denied; deployments where a platform team owns sources and application teams attach tables into their own schemas will need those `SELECT` grants added.
+- Fixed `ALTER CONNECTION` letting a connection owner keep secrets and connections they lack `USAGE` privileges on, and read those secrets during content checks or connection validation.
+- Fixed `ANY`/`ALL` over a `NULL` array or list returning the empty-set answer instead of `NULL`, and `array_position` failing to find `NULL` elements, both now matching PostgreSQL.
+- Fixed `round(numeric, scale)` erroring on a scale that reaches past the value's fractional digits, such as `round(123::numeric, 38)`, which could also let filter pushdown discard data a query matched.
+- Fixed identity-provider group sync silently finding nothing when `oidc_group_claim` names a claim the token declares directly, such as `roles`, so group-to-role mapping now works without a custom claim or JWT prehook.
+- Fixed Arrow ADBC clients failing to connect by adding the missing `pg_type.typsend` column, and fixed `typreceive` rendering as a numeric OID rather than the function name, so those clients resolve every column to its real type.
+- Fixed Iceberg sinks ignoring a table's `write.data.path` property and always writing data files to the default location.
+- Fixed sources on the Console's Objects page being described in replica-hydration terms, which could show a healthy source as `Not Hydrated`, leave a webhook source with no status, and hold a completed snapshot at 99%.
+- Fixed several `dbt-materialize` error paths reporting confusing failures instead of the intended messages, covering the index config parser, renaming a view, dropping an unsupported relation type, connection option parsing, and the version check against a server that is not Materialize.
+- Fixed the `mz` CLI failing on read-only commands such as `mz sql` when `mz.toml` sits on a read-only mount.
+
## v26.39.0
*Released to Materialize Cloud: 2026-08-26*
*Released to Materialize Self-Managed: 2026-08-27*
diff --git a/doc/user/data/self_managed/self_managed_operator_compatibility.yml b/doc/user/data/self_managed/self_managed_operator_compatibility.yml
index 96fda410754a0..fa91e90709909 100644
--- a/doc/user/data/self_managed/self_managed_operator_compatibility.yml
+++ b/doc/user/data/self_managed/self_managed_operator_compatibility.yml
@@ -5,6 +5,11 @@ columns:
- column: Release date
- column: Notes
rows:
+ - Materialize Operator: v26.40
+ orchestratord version: v26.40
+ environmentd version: v26.40
+ Release date: "2026-09-03"
+ Notes: "See [v26.40 release notes](/releases/#v26400)"
- Materialize Operator: v26.39
orchestratord version: v26.39
environmentd version: v26.39