Welcome to This Week in RisingWave — a weekly roundup of merged pull requests, bug fixes, and notable changes in the RisingWave open-source project. RisingWave is a PostgreSQL-compatible streaming database built in Rust, designed for real-time data processing at scale.
This week saw 25 pull requests merged, spanning SQL enhancements, streaming memory management, Iceberg connector hardening, and expanded sink format support.
New Features
jsonb_agg(*) — Wildcard Aggregation Support
#25282 adds wildcard parameter support to jsonb_agg, so you can now write:
SELECT jsonb_agg(*) FROM my_table GROUP BY category;
This brings RisingWave closer to PostgreSQL's json_agg(*) behavior and is useful for aggregating entire rows into a JSON array without explicitly listing columns.
Configurable Join Cache Eviction
#25210 makes join_cache_evict_interval_rows configurable at the streaming job level. Previously, the eviction interval for in-memory join caches was fixed. Now you can tune it based on your join's cardinality and memory budget — useful for jobs where the default eviction strategy causes either too-frequent spills or unexpectedly large memory footprints.
Vnode Key Stats for Materialized Views
#25290 / #25320 introduces an optional vnode key stats configuration for materialized views. When enabled, RisingWave tracks per-vnode key distribution statistics, giving operators better visibility into data skew across streaming fragments. This is particularly valuable when debugging uneven throughput or hot vnodes in large deployments.
Secrets in Function Call Arguments
#25212 extends secret reference support to function call arguments. You can now pass a secret reference (e.g., a stored API key or credential) directly into a function call rather than interpolating the plaintext value. This closes a gap in RisingWave's secrets management model, where secrets were previously available in connector definitions but not in user-defined functions.
CSV and XML Encoding for File Sinks (POC)
#25292 lands a proof-of-concept implementation for CSV and XML output encoding in file sinks. This expands the supported output formats beyond the existing JSON/Parquet options. While still marked as POC, this lays the groundwork for writing structured data to file-based destinations (S3, GCS, local) in tabular or XML form.
Bug Fixes
Iceberg: Type Mismatch and Primary Key Restrictions
Two Iceberg source fixes landed this week:
- #25316 fixes a type mismatch error that occurred when RisingWave read certain column types from an Iceberg source that didn't align with the inferred schema.
- #25295 explicitly disallows creating an Iceberg source with a primary key. Iceberg tables are not designed for upsert semantics at the source level, and allowing PKs led to undefined behavior in downstream streaming joins and aggregations.
Secret Dependencies Tracked for Views and Sinks
#25291 fixes a dependency tracking bug where views and sinks that referenced secrets did not properly register those dependencies. This could cause issues when secrets were rotated or dropped — the objects depending on them wouldn't be notified or invalidated correctly.
Default Column Positioning Fixed
#25196 corrects the position of default column expressions in the binder. In some edge cases, default values were being evaluated at the wrong stage in the query planning pipeline, which could lead to incorrect INSERT behavior on tables with default columns.
Barrier Truncation in Idle Batching Log Sinks
#25276 / #25277 fixes a bug where batching log sinks failed to truncate barriers during idle periods. This caused unnecessary memory retention in long-running pipelines that occasionally go quiet — the barrier queue would grow without being flushed until the next batch of data arrived.
Stale Refresh Events After Source Drop
#25272 ensures that stale refresh finish events are ignored after a source has been dropped. Previously, these lingering events could trigger unexpected state transitions or error logs in the meta service.
Internal Improvements
Fragment Mapping Notification Decoupled from Streaming
#25263 refactors the meta service to decouple serving fragment mapping notifications from streaming operations. This is an architectural cleanup that improves the separation of concerns between the serving layer (handling query routing) and the streaming layer (handling computation graph updates). It should also reduce the surface area for edge-case bugs at the meta service layer.
DataFusion Bumped to 52.4.0
#25162 upgrades the DataFusion dependency from 52.2.0 to 52.4.0, picking up upstream performance improvements and bug fixes in the batch query execution engine.
Java 17 for Maven Build
#25294 updates the Maven compiler target from Java 11 to Java 17. This is a prerequisite for using newer Java ecosystem dependencies in the connector and UDF layers.
Documentation
Several README updates landed this week (#25318, #25324, #25326, #25329), clarifying RisingWave's positioning as an event streaming platform and refining the description of its storage architecture. If you haven't read the README recently, it's worth a look.
Looking Ahead: Iceberg Maintenance in v2.9
Three issues were opened this week targeting the release-2.9 milestone, all focused on Iceberg table maintenance:
This signals a coordinated push to make RisingWave's Iceberg integration production-ready from an operational standpoint — not just write-path correctness, but long-term table health management.
Get Involved
- GitHub: risingwavelabs/risingwave — star the repo, browse open issues, or pick up a
good first issue - Slack: Join the RisingWave Community Slack to discuss streaming use cases and get help
- Latest release: v2.8.1 (April 5, 2026)
This Week in RisingWave is published weekly. See you next Friday.

