DuckDB 1.4.3 LTS: Enhanced Performance and Windows Arm64 Support

database

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 HAVING clause without a GROUP BY.
  • Columns incorrectly included during a JOIN operation with a LIKE pattern.
  • The optimizer incorrectly removed ORDER BY from 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 vortex extension now ships with significant performance improvements for writing Vortex files.

Miscellaneous

  • Fixed invalid Unicode errors occurring with LIKE expressions.
  • 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:

QueryAMD64 (emulator)Arm64 (native)
Q12.872.10
Q20.560.40
Q32.361.58
Q42.011.45
Q52.291.61
Q60.500.39
Q72.041.52
Q82.131.46
Q97.397.32
Q104.186.98
Q110.430.57
Q122.921.04
Q136.650.54
Q141.561.12
Q150.900.55
Q160.970.74
Q172.571.67
Q184.865.15
Q192.961.72
Q201.751.12
Q217.054.44
Q221.780.97
Median2.211.49
Geomean2.091.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.