Featured image of post DuckDB 1.5.4 Released: Stability Enhancements and v2.0.0 Preview

DuckDB 1.5.4 Released: Stability Enhancements and v2.0.0 Preview

DuckDB 1.5.4 Variegata delivers critical bug fixes, crash prevention, and performance improvements, while the team previews v2.0.0 coming this fall.

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

FeatureDuckDB 1.5.4 (Variegata)DuckDB 1.4.5 LTS (Andium)
Release TypeRegular patch releaseLTS patch release
Release Date2026-06-172026-06-17
Support PeriodUntil v2.0.0Long-term support
Main FocusCrash fixes, performanceStability, backward compatibility
Use CaseRecommended for productionUsers 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 IDDescriptionImpact
#21854Double free and memory leak in Arrow GeoArrow CRS serializationGIS extension crash
#22836Progress bar crash when piping SQLCLI usage crash
#23174Crash when storage path is not setConfiguration error crash
#23232Gzip compression write overflowParquet 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

  1. Enhanced Streaming Processing: Building on stream windowing functions from v1.5.x, v2.0.0 may provide a more complete streaming data processing framework.

  2. Stronger Geospatial Support: Alongside fixing GeoArrow CRS serialization issues, v2.0.0 may introduce more comprehensive GIS functionality.

  3. Improved Concurrent Transactions: Based on OLTP optimizations in v1.5.x, v2.0.0 may offer more complete ACID transaction support.

  4. Expanded Extension Ecosystem: With ExtensionKit and C# extensions launching, v2.0.0 may further enrich the extension ecosystem.

  5. Performance Milestones: v2.0.0 may break records in benchmarks like TPC-DS.

Comparison with Traditional Tools

DimensionDuckDB 1.5.4PostgreSQLPandasApache 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:

  1. 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.

  2. Improved Analysis Efficiency: Performance optimizations mean the same hardware can process more data, saving cloud infrastructure costs.

  3. 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.

  4. Data Security: Security hardening fixes potential vulnerabilities, protecting enterprise data assets.

  5. 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.

📺 Watch video tutorials → Olap Studio YouTube

Subscribe for more DuckDB & AI automation tutorials

Built with Hugo
Theme Stack designed by Jimmy

⚠️ This site is an independent community project, not affiliated with, endorsed by, or sponsored by the DuckDB Foundation or official DuckDB project.

"DuckDB" is a registered trademark of the DuckDB Foundation. This site uses the name solely for factual description purposes.

All content is for educational and community promotion purposes only and does not constitute any commercial service.