Skip to content

Commit 595d8bf

Browse files
dforsberclaude
andcommitted
release: v0.9.0
Update download links and Docker tags to 0.9.0. Set release date to 2026-04-08. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent d623aa9 commit 595d8bf

2 files changed

Lines changed: 65 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,67 @@ All notable changes to BoilStream will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.9.0] - 2026-04-08
9+
10+
### Features
11+
12+
- **Materialized Views (Windowed Aggregations)**: Tumbling and sliding window aggregations over streaming data
13+
- `CREATE MATERIALIZED VIEW ... WITH (window_type, window_size, timestamp_column)` DDL
14+
- Tumbling windows (non-overlapping) and sliding windows (overlapping with `slide_interval`)
15+
- Ingestion timestamp mode: omit `timestamp_column` to window by server ingestion time (`__boils_meta_timestamp`)
16+
- Wall-clock aligned window boundaries at Unix epoch multiples
17+
- Automatic `window_start` and `window_end` column injection for consumer-side deduplication
18+
- Crash recovery with PostgreSQL watermark persistence — no duplicate or skipped windows on restart
19+
- Dual semaphore executor: fast views (< 60s) get priority, slow views (≥ 60s) capped at N-1 slots
20+
- Per-view FIFO queue with round-robin dequeue — no dropped windows on backpressure
21+
- All standard aggregations: COUNT, SUM, AVG, MIN, MAX, PERCENTILE, MEDIAN, MODE, approx_count_distinct
22+
23+
- **CREATE/DROP STREAMING VIEW DDL**: Row-by-row derived topics with continuous SQL transformations
24+
- `CREATE STREAMING VIEW name AS SELECT ... FROM source WHERE ...`
25+
- `DROP STREAMING VIEW [IF EXISTS] name`
26+
- Supports filtering (WHERE), projections, CASE expressions, scalar functions (UPPER, DATE_TRUNC, casts)
27+
- Three-level view hierarchy: `CREATE VIEW` (query-time) → `CREATE STREAMING VIEW` (continuous row-level) → `CREATE MATERIALIZED VIEW` (windowed aggregation)
28+
29+
- **Tantivy Full-Text Search**: Per-table full-text search indexing with two-tier hot/cold architecture
30+
- Enable via `ALTER TABLE ... SET (tantivy_enabled=true, tantivy_text_fields='col1,col2')`
31+
- **Tantivy-only mode**: set `parquet_enabled=false` for search-only tables without Parquet overhead
32+
- Hot tier: local disk indexes, searchable within seconds of ingestion
33+
- Cold tier: segments packed into `.bundle` files and uploaded to S3, registered in DuckLake
34+
- Shadow DuckLake table (`{table}__tantivy_idx`) automatically tracks all cold tier bundles
35+
- Query with `multilake_search(catalog, shadow_table, query [, limit])` — returns results with `_score` relevance column
36+
- Automatic Arrow-to-tantivy type mapping: TEXT (tokenized), STRING (exact-match), numeric/timestamp (range queries)
37+
38+
- **Tenant Management**: Multi-tenant config schema, tenant admin API endpoints, dashboard, landing page, and member management
39+
- **Auth Invite System**: Auto-create tenant at signup with URL-based invite tokens
40+
- **Playwright Smoke Tests**: End-to-end browser smoke tests for auth flows
41+
42+
### Fixes
43+
44+
- **Schema Registry cascade**: Soft-delete schema_registry entries when topics are deleted, preventing stale topic_id references after DROP/CREATE cycles
45+
- **Schema re-registration**: Clear `deleted_at` on schema re-registration to fix ghost soft-deleted entries after table recreation
46+
- **Matview TIMESTAMP stats**: Convert TIMESTAMP column statistics from epoch integers to ISO strings for correct DuckLake registration
47+
- **Matview persistence**: Harden matview persistence load and window boundary alignment
48+
- **Tantivy S3 paths**: Fixed S3 key prefix stripping, shadow table data_path handling, and double-slash prevention in upload paths
49+
- **Tantivy shutdown**: Fixed shutdown hang and durability ack broadcasting in tantivy-only mode
50+
- **Tantivy shadow tables**: Create via DuckDB DDL instead of direct SQL for proper catalog integration
51+
- **PgWire ATTACH performance**: Fixed clean-data ATTACH hang where all connections timed out at 15s. Moved role/schema setup to normal user init path, skip redundant work on DuckLake self-connections, and spawn post-ATTACH index creation as background tasks. 30-user concurrent P99: 15s → 800ms
52+
- **PgWire ATTACH hang**: Fixed DuckLake ATTACH hanging after raw bytes relay by resetting client state
53+
- **PgWire deadlock**: Eliminated `get_duckdb_context()` deadlock in streaming INSERT detection
54+
- **PgWire streaming view errors**: Hardened CREATE/DROP STREAMING VIEW error handling with rollback on failure
55+
- **Session init timeout**: Added initialization timeout to prevent indefinite connection hangs
56+
- **DuckLake auto-attach**: Fixed `memory` database context being lost after DuckLake auto-attach
57+
- **DuckLake ATTACH regression**: Fixed topic name resolution for ALTER TABLE after ATTACH
58+
- **DuckLake table_id collision**: Fixed CDC metadata query collision when DuckLake reuses table_id values
59+
- **Self-connection stability**: Replaced connection abort with `pg_connection_limit=2` and idle timeout cleanup
60+
- **Airport loopback**: Fixed table discovery and schema mapping for streaming INSERT
61+
- **Auth dark mode**: Corrected CSS variables across all UI files
62+
63+
### Improvements
64+
65+
- **PgWire performance**: Eliminated redundant SQL parsing in Extended Query protocol, added AST caching for parse_sql and detect_client_type
66+
- **PgWire refactor**: Extracted shared cursor handlers, query classification, and streaming INSERT detection into reusable modules
67+
- **Matview executor**: Redesigned to connect via pgwire as regular client with tenant isolation, replacing direct DuckDB access
68+
869
## [0.8.4] - 2026-02-24
970

1071
### Features

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,16 @@ Download, start, and connect with any Postgres-compatible BI tool. Data streams
3636

3737
```bash
3838
# Download (linux-x64, linux-aarch64, darwin-aarch64)
39-
curl -L -o boilstream https://www.boilstream.com/binaries/darwin-aarch64/boilstream-0.8.4
40-
curl -L -o boilstream-admin https://www.boilstream.com/binaries/darwin-aarch64/boilstream-admin-0.8.4
39+
curl -L -o boilstream https://www.boilstream.com/binaries/darwin-aarch64/boilstream-0.9.0
40+
curl -L -o boilstream-admin https://www.boilstream.com/binaries/darwin-aarch64/boilstream-admin-0.9.0
4141
chmod +x boilstream boilstream-admin
4242

4343
SERVER_IP_ADDRESS=1.2.3.4 ./boilstream
4444

45-
# Docker: boilinginsights/boilstream:x64-linux-0.8.4 or :aarch64-linux-0.8.4
45+
# Docker: boilinginsights/boilstream:x64-linux-0.9.0 or :aarch64-linux-0.9.0
4646
docker run -v ./config.yaml:/app/config.yaml \
4747
-p 443:443 -p 5432:5432 -p 50051:50051 -p 50250:50250 \
48-
-e SERVER_IP_ADDRESS=1.2.3.4 boilinginsights/boilstream:aarch64-linux-0.8.4
48+
-e SERVER_IP_ADDRESS=1.2.3.4 boilinginsights/boilstream:aarch64-linux-0.9.0
4949
```
5050

5151
> _Use the accompanying `docker-compose.yml` to start Grafana and MinIO_

0 commit comments

Comments
 (0)