All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to (or is loosely based on) Semantic Versioning.
- Bumped
arrowfrom59.0.0to59.1.0. - Bumped
bytemuckfrom1.25.0to1.25.1. - Bumped
xxhash-rustfrom0.8.15to0.8.16. - Bumped
muxio-family crates from0.10.2-alphato0.15.0-alpha(breaking wire format change, see Migration below; the basemuxiocrate is superseded bymuxio-core; pulls intungstenite/tokio-tungstenite0.30alongside the existing0.29). - Refreshed
Cargo.lockto reflect updated transitive dependencies (e.g.,rand0.10.2,typenum1.20.1). - Added
.DS_Storeand.codegraphto.gitignore. - Replaced
chunks_exact(N)withas_chunks::<N>()inalign_or_copyto satisfy current clippy lints (no functional change).
- Fixed a potential reader/writer deadlock in
DataStorethat could hang concurrent workloads indefinitely (observed as CI timeouts on macOS).reindexacquired the mmap mutex before the key-index write lock while readers held a key-index read guard across the mmap lock — an ABBA cycle. Locks are now always acquired in a single global order (file→key_indexer→mmap) across read, batch-read, and write paths. - Clarified the crate-level "Safety Notes" (#99): appending via the engine API is always safe (the store re-maps the file internally after each write); the "do not resize while in use" warning refers to resizing the storage file out-of-band while the store is open.
Note: The following migration is only necessary if using the wire protocol handled by Muxio.
muxio >= 0.15.0-alphais not wire-compatible with peers built against<= 0.14.0-alpha:muxio-coreremoved theu64 timestamp_microsfield from frame headers (FRAME_HEADER_SIZEreduced from21to13bytes), so old peers sending 21-byte headers are rejected asCorruptFrame. Note that request/stream IDs additionally gained a high-bit direction marker (client0x0000_0000, server0x8000_0000) in0.14.0-alpha. Upgrade all muxio-based clients and servers together; mixed-version deployments will fail to communicate.- Stores written by
simd-r-driveitself are unaffected — the change only impacts live RPC transports (WS/IPC), not the on-disk format.
- Hash stability tests (
tests/hash_stability_tests.rs) that enforce hardcoded xxh3 hash values to guard against silent regressions if thexxhash-rustdependency is updated or replaced.
- Bumped
arrowfrom58.3.0to59.0.0. - Bumped
dashmapfrom6.1.0to6.2.1. - Bumped
serde_jsonfrom1.0.149to1.0.150. - Bumped
serial_testfrom3.4.0to3.5.0. - Bumped
crossbeam-epochfrom0.9.18to0.9.20(fixes RUSTSEC-2026-0204).
- Bumped
arrowfrom58.1.0to58.3.0. - Bumped
clapfrom4.6.0to4.6.1. - Bumped
muxio-family crates from0.10.1-alphato0.10.2-alpha. - Bumped
rayonfrom1.11.0to1.12.0. - Bumped
tokiofrom1.51.1to1.52.3. - Refreshed
Cargo.lockto reflect updated transitive dependencies (hashbrown0.17.1, consolidatedtokio-tungstenite/tungsteniteversions).
- Bumped workspace dependency versions:
randfrom0.9.2to0.10.1, andtokiofrom1.51.0to1.51.1.
- Updated benchmark imports to use
rand::RngExtso benchmark targets compile cleanly withrand0.10.x.
- If there are breaking changes, put a short, actionable checklist here.
- Replaced
bincodewithbitcodefor serialization in extension utilities and related tests. - Updated dependency versions across workspace crates and refreshed lockfiles to current compatible releases.
- Bumped Apache Arrow dependency to 57.0.0. (No other functional changes.)
- Default payload alignment increased from 16 bytes to 64 bytes to ensure
SIMD- and cacheline-safe zero-copy access across SSE/AVX/AVX-512 code
paths. Readers/writers compiled with
<= 0.14.x-alphathat assume 16-byte alignment will not be able to parse 0.15.x stores correctly.
- Debug/test-only assertions (
assert_aligned,assert_aligned_offset) to validate both pointer- and offset-level alignment invariants.
- Updated documentation and examples to reflect the new 64-byte default
PAYLOAD_ALIGNMENT(still configurable insrc/storage_engine/constants.rs). EntryHandle::as_arrow_bufferandinto_arrow_buffernow check both pointer and offset alignment when compiled in test or debug mode.
- Stores created with 0.15.x are not backward-compatible with 0.14.x readers/writers due to the alignment change.
- To migrate:
- Read entries with your existing 0.14.x binary.
- Rewrite into a fresh 0.15.x store (which will apply 64-byte alignment).
- Deploy upgraded readers before upgrading writers in multi-service environments.
- Files written by 0.14.0-alpha use padded payload starts for fixed alignment. Older readers (<= 0.13.x-alpha) may misinterpret pre-pad bytes as part of the payload. Upgrade all readers/writers before mixing file versions.
- Fixed payload alignment for zero-copy typed views. Payloads now begin
at an address that is a multiple of
PAYLOAD_ALIGNMENT, configured insrc/storage_engine/constants.rsvia:PAYLOAD_ALIGN_LOG2PAYLOAD_ALIGNMENT = 1 << PAYLOAD_ALIGN_LOG2
- Experimental
arrowfeature which exposesas_arrow_bufferandinto_arrow_buffermethods inEntryHandle.
- Internal on-disk layout: each non-tombstone payload may be preceded by a small zero pre-pad (0..A-1 bytes) to satisfy alignment (A is the configured alignment). Public API is unchanged.
- Regenerate stores with the new version:
- Open the old store with the matching old binary and read entries.
- Write each entry into a new 0.14.0-alpha store.
- Replace the old file after verification.
- If you maintain separate services, deploy reader upgrades before writer upgrades to avoid mixed-version reads.