Version 0.2.0 (2026-04-21) * `use_alt_rep` parameter temporarily disabled with warning for this version * Add stored `xxhash` checks and warn on mismatch by default * Replace the old custom unwind-jump handling with `Rcpp::unwindProtect()` and extend the same cleanup model to qdata read/write paths * Add `R_CheckStack()` to qdata recursive read/write paths so deep nesting fails cleanly instead of crashing * Harden malformed-input handling in `qs2`, `qdata`, `qx_dump()`, and `qs_to_rds()`: reject oversized compressed-block headers, oversized qdata lengths, short malformed blocks, and attribute counts, malformed attribute names and semantically invalid R attributes * Add max output size parameter in `zstd_decompress_file()` and `zstd_in()`, and delete partial output on failure * Make `qs_save()` and `qd_save()` fail cleanly if file writes start successfully but later fail (e.g. due to full disk) * Require actual raw vectors in `zstd_(de)compress_raw()`, `blosc_(un)shuffle_raw()`, and `xxhash_raw()` instead of allowing implicit coercion * Harden `base85` / `base91` utilities and expand utility regression coverage for malformed and empty inputs * Fix qdata delayed attribute replay ordering for malformed or canonicalized attribute subtrees * Remove the old dynamic-blocksize plumbing and keep the fixed block-size path only * Update bundled zstd from `1.5.6` to `1.5.7` and vendored qdata-cpp xxHash from `0.8.2` to `0.8.3` * Add reproducible local vendoring helpers for bundled zstd and vendored xxHash * Add deterministic malformed-input regressions and expand fuzz coverage in local hardening scripts * Refactor qdata internals into a vendored standalone `qdata-cpp` package * Fix usage of `Rf_error` error handling (https://github.com/qsbase/qs2/issues/26) * Fix performance bug, use correct shuffle flag at high compress levels Version 0.1.7 (2026-01-18) * Replace `ATTRIB` and `SET_ATTRIB` calls (no longer in API) * Enable TBB by default (via RcppParallel); use configure --without-TBB to force disable * Add ZSTD file substitution helpers `zstd_in` and `zstd_out` * Add ZSTD bindings section to the vignette Version 0.1.6 (2025-11-20) * If `nthreads > 1` requested and TBB not available, fall back to `nthreads = 1` and produces a warning instead of an error * Minor fix: for complex vectors with attributes header was written twice in `qd_save` * Minor fix: for non-UTF8 environments and non-ascii strings and using `stringfish` ALTREP, `qd_save` was not correctly translating to UTF8 * Add zstd file utilities `zstd_compress_file` and `zstd_decompress_file` * Add `tests/utility_testing.R` to test additional utility functions * Update qdata deserializer to set class attributes without deprecated `SET_OBJECT` function Version 0.1.5 (2025-03-07) * Fix `_u8` literal operator to align with C++23 (-Wdeprecated-literal-operator) * Add global parameters for serialization arguments, see `Global Options for qs2` in the README / vignette Version 0.1.4 (2024-12-12) * Fix for decompression error edge case (https://github.com/qsbase/qs2/issues/7) Version 0.1.3 (2024-12-02) * Add additional `PROTECT` and `UNPROTECT` calls to remove false positive RCHK warnings Version 0.1.2 (2024-11-24) * Add support for newer versions of TBB using tbb::flow::input_node (https://github.com/qsbase/qs2/issues/2) * Add in memory serialization functions `qs_serialize`, `qs_deserialize`, `qd_serialize` and `qd_deserialize` * Add `qs_readm` and `qs_savem` functions for saving and loading multiple objects * Added XXH3 64 bit standalone function `xxhash_raw` * Ported from `qs` package: star name database from the International Astronomical Union; see `?starnames` * Ported from `qs` package: base85 and basE91 ASCII encoding Version 0.1.1 (2024-09-16) * Initial CRAN release