DuckDB 1.4.3 LTS: Enhanced Performance and Windows Arm64 Support
DuckDB 1.4.3 LTS introduces native extensions and Python support for Windows Arm64, alongside critical bug fixes, performance improvements, and a new ODBC driver, enhancing data analytics capabilities.
DuckDB 1.4.3, the latest patch release in the 1.4 Long-Term Support (LTS) series, is now available. This update introduces native extensions and Python support for Windows Arm64, alongside crucial bug fixes and performance enhancements.
Key Improvements and Fixes
This version includes a range of performance improvements and bug fixes, addressing various aspects of the database:
Correctness
- Incorrect "rows affected" reported by the ART index.
- Wrong results returned in a corner case involving a
HAVINGclause without aGROUP BY. - Columns incorrectly included during a
JOINoperation with aLIKEpattern. - The optimizer incorrectly removed
ORDER BYfrom aggregates. - Fixed updates on indexed tables utilizing DICT_FSST compression.
- Resolved general update issues with DICT_FSST compression.
Crashes and Internal Errors
- Addressed potential errors in constraint violation messages when checking foreign key constraints.
- Resolved a race condition that could trigger a segfault in the encryption key cache.
- Fixed an edge case in the index deletion code path.
Performance
- Improved slow performance of macro binding for unbalanced trees.
- Enhanced memory management during WAL replay in the presence of indexes.
- The
vortexextension now ships with significant performance improvements for writing Vortex files.
Miscellaneous
- Fixed invalid Unicode errors occurring with
LIKEexpressions. - Corrected the inverted offset in the default time zone of DuckDB-Wasm.
- Resolved an issue where copying to Parquet with a prepared statement did not work.
Windows Arm64 Support
A significant addition in this release is the beta support for Windows Arm64, now offering native DuckDB extensions and Python wheels.
Extension Distribution for Windows Arm64
Users can now natively install core extensions, including complex ones like spatial, on Windows Arm64.
duckdb
PRAGMA platform;
┌───────────────┐
│ platform │
│ varchar │
├───────────────┤
│ windows_arm64 │
└───────────────┘
INSTALL spatial;
LOAD spatial;
SELECT ST_Area(ST_GeomFromText('POLYGON((0 0, 4 0, 4 3, 0 3, 0 0))')) AS area;
┌────────┐
│ area │
│ double │
├────────┤
│ 12.0 │
└────────┘
Python Wheel Distribution for Windows Arm64
Python wheels are now distributed for Windows Arm64, enabling direct installation on compatible devices like Copilot+ PCs.
pip install duckdb
This installs the duckdb package using the binary distributed through PyPI.
python
Python 3.13.9 (tags/v3.13.9:8183fa5, Oct 14 2025, 14:51:39) [MSC v.1944 64 bit (ARM64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import duckdb
>>> duckdb.__version__
'1.4.3'
It's important to note that many Python installations on Windows Arm64 devices currently use the x86_64 (AMD64) Python distribution and run through Microsoft's Prism emulator. To identify your Python installation's platform, observe the first line of the Python CLI output (e.g., Python 3.13.9 ... (ARM64)).
Performance Benchmark on Windows Arm64
A benchmark was conducted using the TPC-H SF100 dataset with the tpch extension to evaluate performance on Windows Arm64. The test system was a 15-inch Microsoft Surface Laptop, featuring a 12-core Snapdragon CPU (3.4 GHz), 64 GB RAM, and a 1 TB disk.
The benchmark snippet used for testing:
import duckdb
import os
import time
con = duckdb.connect("tpch-sf100.db")
con.execute("INSTALL tpch")
con.execute("LOAD tpch")
con.execute("CREATE OR REPLACE TABLE timings(query INTEGER, runtime DOUBLE)")
print(f"Architecture: {os.environ.get('PROCESSOR_ARCHITECTURE')}")
for i in range(1, 23):
start = time.time()
con.execute(f"PRAGMA tpch({i})")
duration = time.time() - start
print(f"Q{i}: {duration:.02f}")
con.execute(f"INSERT INTO timings VALUES ({i}, {duration})")
res = con.execute(f"""
SELECT median(runtime)::DECIMAL(8, 2), geomean(runtime)::DECIMAL(8, 2)
FROM timings""").fetchall()
print(f"Median runtime: {res[0][0]}")
print(f"Geomean runtime: {res[0][1]}")
Detailed TPC-H SF100 results on Windows Arm64:
| Query | AMD64 (emulator) | Arm64 (native) |
|---|---|---|
| Q1 | 2.87 | 2.10 |
| Q2 | 0.56 | 0.40 |
| Q3 | 2.36 | 1.58 |
| Q4 | 2.01 | 1.45 |
| Q5 | 2.29 | 1.61 |
| Q6 | 0.50 | 0.39 |
| Q7 | 2.04 | 1.52 |
| Q8 | 2.13 | 1.46 |
| Q9 | 7.39 | 7.32 |
| Q10 | 4.18 | 6.98 |
| Q11 | 0.43 | 0.57 |
| Q12 | 2.92 | 1.04 |
| Q13 | 6.65 | 0.54 |
| Q14 | 1.56 | 1.12 |
| Q15 | 0.90 | 0.55 |
| Q16 | 0.97 | 0.74 |
| Q17 | 2.57 | 1.67 |
| Q18 | 4.86 | 5.15 |
| Q19 | 2.96 | 1.72 |
| Q20 | 1.75 | 1.12 |
| Q21 | 7.05 | 4.44 |
| Q22 | 1.78 | 0.97 |
| Median | 2.21 | 1.49 |
| Geomean | 2.09 | 1.59 |
Benchmarking results showed a geometric mean runtime of 2.09 seconds for the AMD64 package (running via emulator) compared to 1.59 seconds for the native Arm64 package, demonstrating a significant 24% performance improvement.
ODBC Driver for Windows Arm64
Additionally, a native ODBC driver is now available for Windows Arm64.
Conclusion
This release marks another step in enhancing DuckDB's capabilities and compatibility. The DuckDB team extends its gratitude to all contributors for their valuable issue reports and patches. Users can look forward to upcoming releases, v1.4.4 and v1.5.0, slated for early next year.