date: 2026-07-09 title: 'Spice v2.1.0 (Jul 9, 2026)' type: blog authors: [jeadie] tags: [release, cayenne, cdc, postgres, distributed-query, datafusion, iceberg, ballista, ai, search, security, kafka, duckdb, arrow]
Spice v2.1.0 is now available! 🎉
Spice v2.1.0 is the next minor release of Spice, headlined by high-throughput Cayenne CDC, scaling and resilience improvements to PostgreSQL logical replication, expanded distributed query with Iceberg catalog scans and broadcast joins, and the upgrade to DataFusion v54 (including v53), Arrow v58.3, and Vortex v0.74. The release also adds experimental adaptive self-tuning for the Cayenne accelerator, distributed GLM inference, and a range of security, search, and connector improvements.
Highlights in v2.1.0 include:
changes-mode datasets share a single replication slot, unchanged-TOAST recovery, and resilient reconnects across rolling deploysA major focus of v2.1 is Spice Cayenne (opens in a new tab) write-path throughput for change-data-capture (HTAP) workloads:
cayenne_insert_record table IDs are stored as 16-byte raw-UUID BLOBs, cutting CDC WAL volume ~34%; upsert commits publish metadata-only, dropping per-key insert records; transient staged CDC deltas are light-encoded.cayenne_delta_encoding setting (default auto) selects delta-write encoding, and cayenne_compression_strategy: zstd is now fully wired.Delta-write encoding effort and Vortex compression are tunable per accelerator. cayenne_delta_encoding: auto (the default) size-gates fresh CDC/append writes — small deltas use a light scheme and are re-encoded during compaction — or pin an explicit level 0..10 (7 is the full default cascade); cayenne_compression_strategy selects the Vortex compression:
PostgreSQL logical replication (CDC, refresh_mode: changes, introduced in v2.0 (opens in a new tab)) gets significant scaling and resilience work in v2.1:
refresh_mode: changes PostgreSQL (opens in a new tab) datasets on the same connection can name the same pg_replication_slot to share a single replication slot, walsender decoder, and publication, with decoded changes multiplexed by (schema, table) to each dataset. This collapses the slot count from one-per-dataset to one — staying well under Postgres's default max_replication_slots = 10.REPLICA IDENTITY FULL, when an UPDATE leaves a large TOASTed column unchanged, pgoutput sends an "unchanged" marker; Spice now fills that value from the old tuple — its old value is its current value — so updates no longer error or drop columns. Without an old tuple, the error persists with a hint to enable REPLICA IDENTITY FULL.SQLSTATE 55006 ("replication slot is active for PID") and 53300 ("requested standby connections exceeds max_wal_senders") — are now classified as transient and retried with backoff instead of fatally terminating the stream. Replication connections are also released at shutdown start (not process exit), freeing walsender seats for replacement instances.Distributed Query (opens in a new tab) gains:
Apache DataFusion (opens in a new tab) is upgraded to v54, folding in v53, alongside Arrow v58.3 and Vortex v0.74 (with a pin bump adding intra-file decode split and a per-execution kernel cache). Two DataFusion releases land in this upgrade:
LATERAL joins, SQL lambda functions (x -> expr with array_transform/array_filter/array_any_match), spilling nested-loop joins, and a faster arrow-avro reader. Performance work includes morsel-driven Parquet scans (up to ~2x faster for skewed scans), 20-50x faster sort-merge semi/anti/mark joins, redundant-sort-key pruning, NDV-based cardinality estimation, and inner_product/cosine_distance functions.LIMIT-aware Parquet row-group pruning, broader filter pushdown through joins and UNION, nested-field pushdown (get_field into the scan), faster query planning (some plans dropping from ~4-5ms to ~100us), and 42 faster built-in functions.Federation deny-list enforcement and catalog DDL are restored after the DataFusion upgrades, and a cost-based left-deep join reordering rule is added for Cayenne acceleration.
reasoning_content, including tensor-parallel GLM inference. Load a GLM model with model_type: glm4 (glm4moe and glm4moelite are also supported):For large models, GLM inference can be distributed across nodes (tensor parallelism) via the mistral.rs pure-TCP ring all-reduce backend — no NCCL/system dependency. This is a Spice.ai Enterprise (opens in a new tab) feature requiring the distributed build. Run the same model on each node, changing only node_rank:
GET /v1/nsql/context endpoint returns the SQL dialect, dataset schemas (with optional sample rows), and registered functions that Spice injects into natural-language-to-SQL (POST /v1/nsql) requests — useful for inspecting or caching exactly what the model sees:Returns the dialect, per-dataset schema (keys, indexes, searchable columns), the registered function inventory, and sample rows (abbreviated):
QueryVectors paginates for top-K up to 10,000.CommandStatementSubstraitPlan support.on_schema_change supports widening-only evolution and a drop_and_recreate policy.The Spice Cayenne accelerator gains experimental opt-in self-tuning. cayenne_tuning: auto derives configuration from the detected hardware and inferred schema, while adaptive additionally runs a per-table closed-feedback controller that adapts flush caps, the in-memory CDC tier, compaction cadence, and write concurrency toward operator SLOs (replication lag, freshness, query latency, queries-per-hour). Cayenne can also maintain aggregates incrementally — with predicate-aware delta serving and incremental retraction — and fold whole-table SUM/AVG/COUNT/MIN/MAX from statistics. These features are experimental and disabled by default.
query_executions metric gains a datasets dimension.cayenne_metastore: turso is honored for partitioned tables and the dataset checkpoint.digest_many collisions: Values are length-prefixed so column boundaries can't collide./v1/queries chunk row_offset uses the cumulative offset rather than chunk_index * chunk_size.| Dependency / Component | Version |
|---|---|
| DataFusion | v54 |
| Arrow (arrow-rs) | v58.3 |
| Vortex | v0.74 |
| iceberg-rust | v0.9.1 |
| DuckDB | v1.5.3 |
| Rust toolchain | v1.95.0 |
No breaking changes.
No new cookbook recipes.
The Spice Cookbook (opens in a new tab) includes more than 100 recipes to help you get started with Spice quickly and easily.
To upgrade to v2.1.0, use one of the following methods:
CLI:
Homebrew:
Docker:
Pull the spiceai/spiceai:2.1.0 image:
For available tags, see DockerHub (opens in a new tab).
Helm:
AWS Marketplace:
Spice is available in the AWS Marketplace (opens in a new tab).
Full Changelog: https://github.com/spiceai/spiceai/compare/v2.0.0...v2.1.0 (opens in a new tab)
group_into_sub_batches to reduce sub-batch splits by @sgrebnov (opens in a new tab) in #11059 (opens in a new tab)DataType::Null to Int32 in acceleration schema for duckdb by @krinart (opens in a new tab) in #11062 (opens in a new tab)RuntimeStatus by @krinart (opens in a new tab) in #11114 (opens in a new tab)datasets dimension to the query_executions metric by @phillipleblanc (opens in a new tab) in #11138 (opens in a new tab)postgres as a valid accelerator engine when postgres-accel is disabled by @sgrebnov (opens in a new tab) in #11169 (opens in a new tab)InList membership conjunct of hash-join dynamic filters by @sgrebnov (opens in a new tab) in #11335 (opens in a new tab)spice cloud * commands by @ewgenius (opens in a new tab) in #11316 (opens in a new tab)num_rows for hash-join sizing by @sgrebnov (opens in a new tab) in #11515 (opens in a new tab)