All notable changes to Dux are documented here.

[0.2.0] - 2026-03-24

Bug Fixes

  • Nx zero-copy types, connected components convergence, ADBC v0.10.0 (#14)

Documentation

  • Comprehensive documentation uplift (#3)
  • Comprehensive distributed execution guide + docs uplift (#24)

Features

  • Telemetry instrumentation across all layers
  • FLAME elastic compute integration
  • Migrate to ADBC (#2)
  • Distributed & graph algorithm improvements (#4)
  • Shuffle skew detection + bloom filter pre-filtering (#5)
  • Lattice framework for distributed aggregate merging (8b Phase A) (#6)
  • Approximate betweenness centrality (Brandes' algorithm) (#7)
  • Streaming merger for lattice-compatible distributed aggregation (#8)
  • ASOF JOIN + JSON processing verbs (#9)
  • Cross-source joins via ATTACH (#10)
  • Update ADBC + zero-copy IPC ingest and Nx tensor path (#12)
  • Insert_into verb + distributed DuckLake reads (#13)
  • Size-balanced file assignment in Partitioner (#15)
  • Hive partition pruning in distributed reads (#18)
  • Distributed writes — workers write directly to storage (#19)
  • Distributed Postgres reads via hash-partitioned ATTACH (#20)
  • Partition_by option for Hive-partitioned Parquet output (#21)
  • Distributed insert_into — workers INSERT in parallel (#22)
  • Excel IO — from_excel/2 and to_excel/2 (#23)

Miscellaneous

  • Bump to dev version
  • Docs touchups (#11)
  • Expand CI matrix to full OTP × Elixir lattice (#17)
  • Prep for v0.2.0 (#25)

Testing

  • Add peer tests for size-balanced partitioner (#16)

[0.1.1] - 2026-03-22

Bug Fixes

  • SQL injection hardening — escape identifiers and options
  • Eliminate temp table GC race via process dictionary
  • Livebook setup cells — Mix.install alone in setup block
  • Unused variable warning in distributed test
  • Quote identifiers in Merger and Broadcast SQL
  • V0.1.0 release readiness fixes
  • GC race in Worker.register_table + distributed PageRank
  • Distributed parquet partitioning — Merger re-aggregation + compute idempotency
  • Make rustler dep unconditionally optional for Hex
  • Release workflow — use cross-version: from-source
  • Add NIF version features to Cargo.toml for precompilation
  • NIF features — default to 2_16, pass through to rustler crate
  • Drop x86_64-unknown-linux-musl target
  • Link rstrtmgr.lib on Windows for DuckDB Restart Manager APIs

Documentation

  • Document non-deterministic ordering of distinct/1
  • README, guides, cheatsheet, changelog for 0.1.0
  • Convert guides to .livemd with atom keys
  • Remove commented output from livebooks, fix examples
  • Proper Livebook format — setup cell, self-contained examples
  • Remove spark-killer language
  • Add RELEASING.md with rustler_precompiled release flow
  • Comprehensive docs pass — Graph options, README verbs, cheatsheet
  • Update distributed guide — auto join routing, remove Broadcast ref

Features

  • Initial Dux project scaffolding
  • DuckDB NIF layer with connection management
  • Start Connection in supervisor, add property tests
  • Verb API with lazy pipelines and CTE compilation
  • Query macro compiling Elixir expressions to DuckDB SQL
  • IO via DuckDB — CSV, Parquet, NDJSON read/write
  • Dux.Graph — graph analytics as verb compositions
  • GC sentinel NIF + upgrade to Rustler 0.37
  • Distributed resource tracking (Remote GC)
  • Remote Worker — DuckDB per BEAM node with :pg discovery
  • Coordinator — distributed query fan-out and merge
  • Broadcast joins for star-schema distributed queries
  • Nx zero-copy interop — LazyContainer + to_tensor
  • Benchmark suite with Benchee
  • Atom_keys option for collect/1 and to_columns/1
  • Pretty-printed SQL preview
  • Display — Inspect protocol, Table.Reader, peek
  • Graph inspect with summary stats
  • Distributed shuffle join for large-large joins
  • Pivot_wider and pivot_longer verbs
  • Distributed correctness — pipeline splitter, aggregate fixes
  • Distributed PageRank via broadcast pattern
  • Distributed connected components via broadcast-iterate pattern
  • Distributed shortest_paths and triangle_count
  • Distributed STDDEV/VARIANCE decomposition + shared SQL helpers
  • Distributed join routing — auto-broadcast local right sides
  • Shuffle join routing for large right sides in distributed joins
  • Multi-column join support for Shuffle + peer tests for join routing
  • Show distribution info in Inspect display
  • Embedded test datasets + data-driven E2E tests

Miscellaneous

  • Add dependency lockfiles
  • Add credo linting, mise config, format code
  • CI workflows, rustler_precompiled, Hex packaging
  • Cargo fmt
  • Fix all credo issues — alias, nesting, TODO tag
  • Clean up distributed graph — keep distributed PageRank, defer CC
  • Bump version
  • Prepare for v0.1.1 release (#1)

Refactoring

  • Macros on Dux, verb/verb_with split, remove Dux.Q
  • Atom keys in from_list, cleaner docs
  • Distribution as a struct property
  • Rename API — distributed→distribute, collect→to_rows, new collect semantics
  • Consolidate escape_ident/esc/qi to shared Dux.SQL.Helpers.qi/1

Testing

  • Comprehensive NIF and connection tests
  • Comprehensive verb API tests
  • SQL injection security tests + fix from_list identifier escaping
  • End-to-end integration tests + fix join ON clause aliasing
  • Distributed :peer integration tests
  • Full distributed workflow — create, distribute, aggregate, collect
  • :peer distributed correctness tests on real BEAM nodes
  • Distribute API verification tests + update distributed_test to new API
  • Peer-node integration test for auto-broadcast join routing