Compare

Where OpenIVM fits.

Most incremental systems are either a separate streaming engine you feed with change data, or a feature of one managed warehouse. OpenIVM is a compiler that runs inside the engine you already use and emits plain SQL.

SystemWhat it isWhere it runsWhen views updateIncremental SQL coverageLicense
OpenIVMIVM compiler (SQL in, SQL out)Inside your engine as an extension: DuckDB today, Spark in developmentOn demand (PRAGMA refresh) or on a schedule (REFRESH EVERY)Inner and outer joins, aggregates, DISTINCT, semi/anti joins, windows, CTEs; other shapes fall back to full refreshMIT
pg_ivmPostgreSQL extensionInside PostgreSQLImmediately, in AFTER triggers in the same transaction as each writeJoins, count/sum/avg/min/max, DISTINCT, EXISTS, simple CTEs; no window functions, HAVING, UNION, or aggregates over outer joinsPostgreSQL License
MaterializeStreaming data warehouse (Differential Dataflow)Separate system, fed by change data capture or KafkaContinuously, as changes arriveBroad SQL, maintained as streaming dataflowsBusiness Source License (source-available)
FelderaIVM engine built on DBSPSeparate pipeline engineContinuously, as changes arriveBroad SQL, compiled to DBSP circuitsMIT (open-source edition)
RisingWaveStreaming databaseSeparate system, PostgreSQL wire protocolContinuously, as changes arriveBroad streaming SQLApache 2.0
Snowflake Dynamic TablesManaged warehouse featureInside SnowflakeTo a target lag; each refresh is incremental or fullDocumented list of incrementally refreshable constructsProprietary
Databricks materialized viewsManaged lakehouse featureInside Databricks, on serverless pipelinesOn a schedule or trigger; incremental when possible, best effortDocumented list of incrementally refreshable constructsProprietary

Summarized from each project's public documentation and repository, September 2026. Spotted something out of date? Open an issue.

What sets OpenIVM apart.

  • The output is SQL. The maintenance program is ordinary SQL you can read, test and run elsewhere, not a runtime you have to operate. See what it generates.
  • No second system. No change-data-capture pipeline or separate cluster: views are maintained inside DuckDB, and soon Spark, over ordinary batch tables.
  • Open and research-backed. MIT-licensed, built at CWI Amsterdam, and described in a SIGMOD 2024 paper.

When something else fits better.

  • You need freshness on every write. A streaming system (Materialize, Feldera, RisingWave) or pg_ivm's immediate maintenance updates views as changes arrive; OpenIVM refreshes on demand or on a schedule.
  • You want a managed service on your warehouse. Snowflake Dynamic Tables and Databricks materialized views are built into those platforms.
  • Your query is a small single-table aggregate. DuckDB recomputes these so fast that incremental refresh has little to win; the gains come with joins and larger data.