Introduction
On June 17, 2026, the DuckDB team released two important versions simultaneously: DuckDB 1.5.4 (Variegata) and DuckDB 1.4.5 LTS (Andium). As the fifth patch release in the 1.5.x series, version 1.5.4 focuses on stability fixes, crash prevention, and performance optimization. More importantly, the team revealed exciting news in the announcement — DuckDB v2.0.0 is scheduled for release this fall.
This post dives deep into the key improvements in 1.5.4 and explores what the upcoming v2.0.0 might bring.
Version Overview
| Feature | DuckDB 1.5.4 (Variegata) | DuckDB 1.4.5 LTS (Andium) |
|---|---|---|
| Release Type | Regular patch release | LTS patch release |
| Release Date | 2026-06-17 | 2026-06-17 |
| Support Period | Until v2.0.0 | Long-term support |
| Main Focus | Crash fixes, performance | Stability, backward compatibility |
| Use Case | Recommended for production | Users needing long-term stability |
Key Fixes and Improvements
1. Correctness Fixes: Deep Optimization of VARIANT Type
The VARIANT type is one of DuckDB’s core features for handling semi-structured data. Version 1.5.4 fixed several critical bugs related to VARIANT:
-- Fixed: VARIANT now reads correct rows under filter conditions
-- Before this fix, filtered VARIANT reads could return wrong rows
CREATE TABLE variant_data AS
SELECT * FROM read_json_auto('data.json');
-- This query now returns correct results
SELECT
variant_col:field1::VARCHAR AS field1,
variant_col:field2::INTEGER AS field2
FROM variant_data
WHERE variant_col:field1 IS NOT NULL;
Another important fix involves the target and source table binding logic in MERGE INTO statements:
-- Fixed: WHEN NOT MATCHED now only considers the target table
-- WHEN NOT MATCHED BY TARGET now only considers the source table
MERGE INTO target_table t
USING source_table s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET t.value = s.value
WHEN NOT MATCHED THEN INSERT VALUES (s.id, s.value);
2. Enhanced JSON Processing Capabilities
JSON functions are among DuckDB’s most popular features. Version 1.5.4 addressed multiple JSON-related issues:
-- Fixed: json_keys now correctly handles wildcard paths
SELECT json_keys('{"a": {"b": 1, "c": 2}}', '$.a.*');
-- Fixed: ignore_errors parameter no longer silently accepts invalid JSON
SELECT * FROM read_json_auto('data.json', ignore_errors => true);
-- Fixed: NULL JSON keys are now properly rejected
SELECT json_extract('{"key": "value"}', 'null_key');
3. Crash Prevention: Peace of Mind for Production
Version 1.5.4 fixed several issues that could cause crashes:
| Issue ID | Description | Impact |
|---|---|---|
| #21854 | Double free and memory leak in Arrow GeoArrow CRS serialization | GIS extension crash |
| #22836 | Progress bar crash when piping SQL | CLI usage crash |
| #23174 | Crash when storage path is not set | Configuration error crash |
| #23232 | Gzip compression write overflow | Parquet write crash |
# Python robustness test example with DuckDB
import duckdb
# After the fix, these operations no longer crash
con = duckdb.connect(':memory:')
con.execute("INSTALL parquet; LOAD parquet;")
# Processing large Parquet files
result = con.execute("""
SELECT
COUNT(*) as total_rows,
SUM(amount) as total_amount
FROM read_parquet('large_data/*.parquet')
""").fetchdf()
print(result)
4. Performance Optimizations
Version 1.5.4 includes several significant performance improvements:
-- Fixed: Native geometry Parquet statistics pruning
-- Now more effectively skips unnecessary Parquet row groups
SELECT * FROM read_parquet('geo_data.parquet')
WHERE ST_Intersects(geometry, ST_Polygon(...));
-- New: OPERATOR_ROW_GROUPS_SCANNED statistics
-- Helps diagnose Parquet read performance
SHOW ALL SETTINGS LIKE 'operator_row_groups_scanned';
For jemalloc builds, system heap memory trimming was also optimized:
# Memory usage comparison (jemalloc build)
import duckdb
import tracemalloc
tracemalloc.start()
# Execute large Parquet reads
con = duckdb.connect("benchmark.duckdb")
con.execute("CREATE TABLE big_data AS SELECT * FROM read_parquet('data/*.parquet');")
current, peak = tracemalloc.get_traced_memory()
print(f"Current memory: {current / 1024 / 1024:.2f} MB")
print(f"Peak memory: {peak / 1024 / 1024:.2f} MB")
tracemalloc.stop()
5. Other Important Improvements
CLI Dark Mode Support: Version 1.5.4 added -dark-mode and -light-mode command-line options, improving the terminal experience:
# Explicitly specify dark mode
duckdb -dark-mode
# Explicitly specify light mode
duckdb -light-mode
# Auto-detect terminal background color (improved)
duckdb
ATTACH Option Enhancement: Added experimental vacuum_rebuild_indexes option:
-- Rebuild indexes when attaching a database
ATTACH 'other.db' AS other_db (vacuum_rebuild_indexes);
Security Hardening: Multiple DuckDB/Parquet decompression and deserialization paths were hardened for improved security.
From 1.5.4 to v2.0.0: Roadmap Outlook
At the end of the announcement, the DuckDB team revealed exciting news: v2.0.0 will be released this fall. While the specific feature list has not been published yet, based on the development trends of the v1.5.x series, we can speculate on what v2.0.0 might include:
Potential v2.0.0 Features
Enhanced Streaming Processing: Building on stream windowing functions from v1.5.x, v2.0.0 may provide a more complete streaming data processing framework.
Stronger Geospatial Support: Alongside fixing GeoArrow CRS serialization issues, v2.0.0 may introduce more comprehensive GIS functionality.
Improved Concurrent Transactions: Based on OLTP optimizations in v1.5.x, v2.0.0 may offer more complete ACID transaction support.
Expanded Extension Ecosystem: With ExtensionKit and C# extensions launching, v2.0.0 may further enrich the extension ecosystem.
Performance Milestones: v2.0.0 may break records in benchmarks like TPC-DS.
Comparison with Traditional Tools
| Dimension | DuckDB 1.5.4 | PostgreSQL | Pandas | Apache Spark |
|---|---|---|---|---|
| Installation Complexity | ⭐ Zero dependencies | ⭐⭐ Needs config | ⭐⭐ Needs pip | ⭐⭐⭐⭐ Cluster deploy |
| Query Speed | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| Memory Efficiency | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ |
| SQL Compatibility | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ❌ | ⭐⭐⭐ |
| Extension Ecosystem | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Learning Curve | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
Upgrade Recommendations
Production Environment Upgrade Strategy
# 1. Check current version
duckdb --version
# 2. Backup existing databases
cp production.duckdb production_backup_$(date +%Y%m%d).duckdb
# 3. Upgrade DuckDB CLI
curl -L https://github.com/duckdb/duckdb/releases/download/v1.5.4/duckdb_cli-linux-amd64.zip -o duckdb.zip
unzip -o duckdb.zip
sudo mv duckdb /usr/local/bin/
# 4. Verify upgrade
duckdb --version
duckdb -c "SELECT version();"
Python Environment Upgrade
# pip upgrade
pip install --upgrade duckdb
# Or using uv
uv pip install --upgrade duckdb
# Verify
import duckdb
print(duckdb.__version__) # Should show 1.5.4
Monetization Advice
For enterprise users, upgrading to 1.5.4 brings the following direct benefits:
Reduced Production Incidents: Fixed crash issues can directly lower operational costs. Each downtime event caused by crashes can cost thousands of dollars, while the upgrade cost is nearly zero.
Improved Analysis Efficiency: Performance optimizations mean the same hardware can process more data, saving cloud infrastructure costs.
Preparation for v2.0.0: Upgrading to 1.5.4 early prepares you for the v2.0.0 migration in the fall, avoiding concentrated upgrade risks.
Data Security: Security hardening fixes potential vulnerabilities, protecting enterprise data assets.
Developer Experience: CLI dark mode and better error messages improve developer efficiency, indirectly reducing labor costs.
Conclusion
DuckDB 1.5.4 (Variegata), though a patch release, fixed numerous critical issues and significantly improved stability and security. Paired with the upcoming v2.0.0, DuckDB is becoming an increasingly powerful competitor in the data analytics space.
Meanwhile, DuckCon #7 will be held in Amsterdam — a great opportunity to learn about the latest DuckDB developments and engage with the community. Whether watching online or attending in person, it should not be missed.
Tip: v2.0.0 is coming soon. Stay tuned to the official DuckDB blog and GitHub repository for the latest updates and migration guides.
