doc/user/content/releases/_index.md
{{< note >}} Starting with the v26.1.0 release, Materialize releases on a weekly schedule for both Cloud and Self-Managed. See Release schedule for details. {{</ note >}}
Released to Materialize Cloud: 2026-03-12
Released to Materialize Self-Managed: 2026-03-13
This release includes various improvements and bug fixes.
varchar and text columns:
Previously, joining on these columns required creating a new arrangement,
effectively doubling memory usage. Materialize can now reuse existing
arrangements on these columns. We've seen memory improvements by as much as 25%
in some cases involving varchar indexes.cpu_request independently of cpu_limit
in cluster replica sizes for Self-Managed deployments.now()) being allowed in
AS OF queries, which could return incorrect results.COPY FROM STDIN concurrently with table
drops.Released to Materialize Cloud: 2026-03-05
Released to Materialize Self-Managed: 2026-03-06
This release introduces COPY FROM support for CSVs in object storage, source versioning for SQL Server sources, and performance improvements to DDL.
COPY FROM CSVs in object storageCOPY FROM now supports bulk importing data directly from Amazon S3 and any
S3-compatible object storage service, such as Google Cloud Storage, Cloudflare
R2, or MinIO. You can import CSV files using an AWS connection or a presigned
URL.
COPY INTO my_table
FROM 's3://my_bucket/my_data.csv'
(FORMAT CSV, AWS CONNECTION = my_aws_conn);
For more information, refer to:
{{< private-preview />}}
For SQL Server sources, we've introduced new syntax
for CREATE SOURCE and CREATE TABLE. This allows you to better handle schema changes
in your source SQL Server tables.
{{< note >}}
For more information, refer to:
CREATE SOURCECREATE TABLECREATE VIEW, CREATE INDEX, DROP) latency by 37-55% for environments with many objects by making the internal catalog state a persistent data structure with structural sharing.COPY FROM STDIN: We've improved COPY FROM STDIN performance by parallelizing ingestion and using constant memory.?) to correctly return NULL when
the left operand is NULL, matching PostgreSQL behavior.COPY FROM with invalid range values (e.g.,
[7,3) where lower bound exceeds upper bound), now returning a
proper error message.offset_committed was incorrectly
reported as zero until the snapshot completed.Released to Materialize Cloud: 2026-02-26
Released to Materialize Self-Managed: 2026-02-27
This release includes the release of our Iceberg Sink, performance improvements to SUBSCRIBE, and bugfixes.
{{< public-preview />}} Iceberg sinks provide exactly once delivery of updates from Materialize into Apache Iceberg tables hosted on Amazon S3 Tables. As data changes in Materialize, the corresponding Iceberg tables are automatically kept up to date. You can sink data from a materialized view, a source, or a table.
CREATE SINK my_iceberg_sink
IN CLUSTER sink_cluster
FROM materialized_view_mv1
INTO ICEBERG CATALOG CONNECTION iceberg_catalog_connection (
NAMESPACE = 'my_iceberg_namespace',
TABLE = 'mv1'
)
USING AWS CONNECTION aws_connection
KEY (row_id)
MODE UPSERT
WITH (COMMIT INTERVAL = '60s');
For more information, refer to:
SUBSCRIBE Performance: We've optimized SUBSCRIBE to skip initial snapshots in more cases. This can speed up SUBSCRIBE start times.strpos as a
synonym for the position function, improving compatibility with tools such
as PowerBI.Int2Vector to Array casting did not correctly handle
element type conversions, potentially causing incorrect results or errors.Released to Materialize Cloud: 2026-02-19
Released to Materialize Self-Managed: 2026-02-20
This release introduces our Roles and Users page, performance improvements, and bugfixes.
The new Roles and Users page on the Materialize Console allows organization administrators to create roles, grant privileges, and assign roles to users. You can also track the hierarchy of roles using the graph view.
You can navigate to the Roles and Users page directly from the Materialize console. If you're on Materialize Self-Managed, upgrade to v26.12 first. If you're on Materialize Cloud, you can go directly to https://console.materialize.com/roles to reach the page.
int2vector values, which could cause internal
errors during query optimization or execution.ColumnKnowledge and related transforms, adding
fallback handling to prevent crashes.SELECT current_setting() instead of SHOW for
version retrieval.Released to Materialize Cloud: 2026-02-19
Released to Materialize Self-Managed: 2026-02-13
This release includes improvements to Avro Schema references, EXPLAIN commands, and bug fixes.
EXPLAIN improvements: EXPLAIN now allows you to inspect the query plan
for SUBSCRIBE statements. It also fully qualifies index names if there are
identically-named indexes across different schemas.mz_hydration_statuses and mz_materialization_lag.
This should speed up "deployment ready" queries made by our dbt-adapter.IS DISTINCT FROM could fail typechecking in certain cases
involving different data types, causing query errors.INSERT INTO ... SELECT transitively
references a source.Released to Materialize Cloud: 2026-02-05
Released to Materialize Self-Managed: 2026-02-06
This release introduces Replacement Materialized Views, performance improvements, and bugfixes.
{{< public-preview />}} Replacement materialized views allow you to modify the definition of an existing materialized view, while preserving all downstream dependencies. Materialize is able to replace a materialized view in place, by calculating the diff between the original and the replacement. Once applied, the diff flows downstream to all dependent objects.
For more information, refer to:
-0.0 and +0.0 could be
treated as different values in equality comparisons but the same in ordering,
causing incorrect results in operations like DISTINCT.ORDER BY clause in EXPLAIN ANALYZE MEMORY to correctly sort by
memory usage instead of by the text representation.mz_roles system table could produce invalid
retractions when certain system variables were changed.Released to Materialize Cloud: 2026-01-29
Released to Materialize Self-Managed: 2026-01-30
v26.9 includes significant performance improvements to QPS & query latency.
SELECT statements are processed; they are now processed outside the main thread. In our tests, this change increased QPS by as much as 2.5x.
SELECT statements off the main
thread has significantly reduced latency. p99 has reduced by up to 50% for
some workloads. ABORT as a PostgreSQL-compatible alias for the ROLLBACK transaction command, to improve compatibility with GraphQL engines like HasuraWaitUntilReady upgrade strategy (<red>Materialize Self-Managed only</red>)as_of timestamp was newer than the cached upper bound.Released to Materialize Cloud: 2026-01-22
Released to Materialize Self-Managed: 2026-01-23
v26.8 includes a new notice in the Console to help catch common SQL mistakes, Protobuf compatibility improvements, and performance optimizations for view creation.
= NULL, != NULL, or <> NULL in SQL expressions instead of IS NULL or IS NOT NULL. Comparisons
using =, !=, or <> with NULL always evaluate to NULL.google.protobuf.Timestamp or google.protobuf.Duration) now work automatically when using a Confluent Schema Registry connection.Released to Materialize Self-Managed: 2026-01-16
Released to Materialize Cloud: 2026-01-17
v26.7 improves compatibility with go-jet and includes bug fixes.
attndims column to pg_attribute. We've also fixed pg_type.typelem to correctly report element types for named list types.Released to Materialize Cloud: 2026-01-08
Released to Materialize Self-Managed: 2026-01-09
v26.6.0 includes bug fixes for Kafka sinks and Self-Managed deployments.
ALTER SINK ... SET FROM on Kafka sinks could incorrectly restart in snapshot mode even when the sink had already made progress, causing unnecessary resource consumption and potential out-of-memory errors.Released to Materialize Self-Managed: 2025-12-23
Released to Materialize Cloud: 2026-01-08
v26.5.1 enhances our SQL Server source, improves performance, and strengthens Materialize Self-Managed reliability.
varchar(max) and nvarchar(max) data types.pg_authid system catalog. This should significantly improve the performance of default authentication queries made by connection poolers like pgbouncer.strict_mode to dbt-materialize, our dbt adapter. strict_mode enforces production-ready isolation rules and improves cluster health monitoring. It does so by validating source idempotency, schema isolation, cluster isolation and index restrictions.environmentd versions. This makes it easier to track deployment status after upgrades.replace, translate, etc.) to help prevent out-of-memory errors from inflationary string operations.Released to Materialize Self-Managed: 2025-12-17
Released to Materialize Cloud: 2025-12-18
v26.4.0 introduces several performance improvements and bugfixes.
ManuallyPromote which allows you to choose when to promote the new generation. This means that you can minimize the impact of potential downtime.Released to Materialize Cloud & Materialize Self-Managed: 2025-12-12
SELECT sequencing to gracefully handle collections that are dropped during real-time recent timestamp determination.Released Cloud: 2025-12-05
Released Self-Managed: 2025-12-09
This release focuses primarily on bug fixes.
Catalog updates: Fixed a bug where catalog item version updates were incorrectly ignored when the create_sql didn't change, which could cause version updates to not be applied properly.
Console division by zero: Fixed a division by zero error in the console, specifically when viewing mz_console_cluster_utilization_overview.
ALTER SINK improvements: Fixed ALTER SINK ... SET FROM to prevent panics in certain situations.
Improved rollout handling: Fixed an issue where rollouts could leave a pod at their previous configuration.
Dependency drop handling: Fixed panics that could occur when dependencies are dropped during a SELECT or COPY TO. These operations now gracefully return a ConcurrentDependencyDrop error.
Released Self-Managed: 2025-11-26
v26.1.0 introduces EXPLAIN ANALYZE CLUSTER, console bugfixes, and improvements for SQL Server support, including the ability to create a SQL Server Source via the Console.
EXPLAIN ANALYZE CLUSTERThe EXPLAIN ANALYZE statement helps analyze how objects, namely indexes or materialized views, are running. We've introduced a variation of this statement, EXPLAIN ANALYZE CLUSTER, which presents a summary of every object running on your current cluster.
You can use this statement to understand the CPU time spent and memory consumed per object on a given cluster. You can also reveal whether an object has skewed operators, where work isn't evenly distributed among workers.
For example, to get a report on memory, you can run EXPLAIN ANALYZE CLUSTER MEMORY, and you'll receive an output similar to the table below:
| object | global_id | total_memory | total_records |
|---|---|---|---|
| materialize.public.idx_top_buyers | u85496 | 2086 bytes | 25 |
| materialize.public.idx_sales_by_product | u85492 | 1909 kB | 148607 |
| materialize.public.idx_top_buyers | u85495 | 1332 kB | 77133 |
To understand worker skew, you can run EXPLAIN ANALYZE CLUSTER CPU WITH SKEW, and you'll receive an output similar the table below:
| object | global_id | worker_id | max_operator_cpu_ratio | worker_elapsed | avg_elapsed | total_elapsed |
|---|---|---|---|---|---|---|
| materialize.public.idx_sales_by_product | u85492 | 0 | 1.18 | 00:00:00.094447 | 00:00:00.079829 | 00:00:00.159659 |
| materialize.public.idx_top_buyers | u85495 | 0 | 1.15 | 00:00:01.371221 | 00:00:01.363659 | 00:00:02.727319 |
| materialize.public.idx_top_buyers | u85495 | 1 | 1.03 | 00:00:01.356098 | 00:00:01.363659 | 00:00:02.727319 |
| materialize.public.idx_top_buyers | u85496 | 1 | 1.01 | 00:00:00.021163 | 00:00:00.021048 | 00:00:00.042096 |
| materialize.public.idx_top_buyers | u85496 | 0 | 0.99 | 00:00:00.020932 | 00:00:00.021048 | 00:00:00.042096 |
| materialize.public.idx_sales_by_product | u85492 | 1 | 0.82 | 00:00:00.065211 | 00:00:00.079829 | 00:00:00.159659 |
Materialize v26.1.0 includes improved support for SQLServer, including the ability to create a SQLServer Source via the console.
{{< include-md file="shared-content/self-managed/upgrade-notes/v26.1.md" >}}
Released: 2025-11-18
Starting in v26.0.0, Self-Managed Materialize enables swap by default. Swap allows for infrequently accessed data to be moved from memory to disk. Enabling swap reduces the memory required to operate Materialize and improves cost efficiency.
To facilitate upgrades from v25.2, Self-Managed Materialize added new labels to
the node selectors for clusterd pods:
To upgrade using Materialize-provided Terraforms, upgrade your Terraform
version to v0.6.1:
}}.
To upgrade if <red>not</red> using a Materialize-provided Terraforms, you must prepare your nodes by adding the required labels. For detailed instructions, see Prepare for swap and upgrade to v26.0.
Starting in v26.0.0, Self-Managed Materialize supports SASL/SCRAM-SHA-256 authentication for PostgreSQL wire protocol connections. For more information, see Authentication.
When SASL authentication is enabled:
psql, client libraries, connection
poolers) use SCRAM-SHA-256 authenticationThis hybrid approach provides maximum security for SQL connections while maintaining compatibility with web-based tools.
Starting in v26.0.0, Self-Managed Materialize requires a license key.
{{< yaml-table data="self_managed/license_key" >}}
For new deployments, you configure your license key in the Kubernetes Secret resource during the installation process. For details, see the installation guides. For existing deployments, you can configure your license key via:
kubectl -n materialize-environment patch secret materialize-backend -p '{"stringData":{"license_key":"<your license key goes here>"}}' --type=merge
{{< private-preview />}}
For PostgreSQL sources, starting in v26.0.0, Materialize introduces new syntax
for CREATE SOURCE and CREATE TABLE to allow better handle DDL changes to the upstream
PostgreSQL tables.
{{< note >}}
This feature is currently supported for PostgreSQL sources, with additional source types coming soon.
Changing column types is currently unsupported. {{< /note >}}
{{% include-example file="examples/create_source/example_postgres_source" example="syntax" %}}
{{% include-example file="examples/create_table/example_postgres_table" example="syntax" %}}
For more information, see:
The inPlaceRollout setting has been deprecated and will be ignored. Instead,
use the new setting rolloutStrategy to specify either:
WaitUntilReady (Default)ImmediatelyPromoteCausingDowntimeFor more information, see rolloutStrategy.
Corresponding to the v26.0.0 release, the following versions of the sample Terraform modules have been released:
{{< yaml-table data="self_managed/terraform_list" >}}
{{< tabs >}} {{< tab "Materialize on AWS" >}}
{{< yaml-table data="self_managed/aws_terraform_versions" >}}
{{% self-managed/aws-terraform-upgrade-notes %}}
Click on the Terraform version link to go to the release-specific Upgrade Notes.
{{</ tab >}}
{{< tab "Materialize on Azure" >}}
{{< yaml-table data="self_managed/azure_terraform_versions" >}}
{{% self-managed/azure-terraform-upgrade-notes %}}
See also Upgrade Notes for release specific notes.
{{</ tab >}}
{{< tab "Materialize on GCP" >}}
{{< yaml-table data="self_managed/gcp_terraform_versions" >}}
{{% self-managed/gcp-terraform-upgrade-notes %}}
See also Upgrade Notes for release specific notes.
{{</ tab >}}
{{< tab "terraform-helm-materialize" >}}
{{< yaml-table data="self_managed/terraform_helm_compatibility" >}}
{{</ tab >}} {{</ tabs >}}
{{< include-md file="shared-content/self-managed/upgrade-notes/v26.0.md" >}}
See also Version specific upgrade notes.