The data archiving and compression foundation of the COOLJAPAN ecosystem just got hands-on.
Today we released OxiArc 0.2.7 — a CLI- and operations-focused patch that lets you edit archives in place for the first time.
No C. No Fortran. No zlib. No libarchive. No external shared libraries.
No FFI overhead. No build hell.
Just clean, memory-safe, blazing-fast archiving and compression that compiles to a single static binary and runs everywhere, including WASM.
Why 0.2.7 matters: editing, not just reading and writing
Up to now, OxiArc could create archives and extract them — but changing an existing archive meant unpacking it, dropping in your file, and repacking the whole thing. That round-trip is gone.
OxiArc 0.2.7 introduces the oxiarc add command: append files directly to an existing ZIP, TAR, or LZH archive. It ships with --dry-run so you can preview exactly what an append will do before a single byte is written, and --verbose for per-entry detail.
This release shares the format and codec coverage of 0.2.6 — still 12 archive formats and 10 compression algorithms — because the work here went into operations, robustness, and ergonomics rather than new formats. OxiArc is now feature-complete, tested, and API-stable as of v0.2.7: ~47,303 lines of pure Rust across 12 crates, with 1,041 tests passing.
What’s new
The headline is in-place editing, but 0.2.7 is a broad operational upgrade:
oxiarc add— append files to existing ZIP, TAR, and LZH archives, with--dry-runand--verbose.- Lenient mode enhancements in
oxiarc-archive—listandextractnow recover gracefully from malformed or partially-written archives instead of giving up. LzhExtensions— a new module inoxiarc-archivefor extended LZH manipulation, including appending and rewriting entries.- Async LZH and TAR streaming — new
async_lzh.rsandasync_tar.rsbring these formats into the async I/O story. - Cooperative cancellation —
oxiarc-coregains aCancellationTokenso long-running archive operations can be stopped cleanly. - Progress reporting —
oxiarc-coreaddsProgressHandle/ProgressSinkinfrastructure for live progress on big jobs. - Man page generation — the CLI grows a
mansubcommand (viaclap_mangen). - Colored output — ANSI colors with full respect for
NO_COLORand--no-color. - Windows hardening — long-path support and reserved-filename handling during extraction.
Under the hood, testing expanded too: end-to-end tests for ZIP AES-256 and ZipCrypto encryption, progress/cancellation tests for Brotli, and a fresh batch of CLI integration tests. Dependencies were refreshed to clap 4.6.1 and tokio 1.52.1. As always: zero clippy warnings (-D warnings), zero rustdoc warnings, and full COOLJAPAN policy compliance.
Technical Deep Dive: appending without repacking
The crate layout is what makes in-place editing tractable. oxiarc-archive owns the container formats, and the new LzhExtensions module sits alongside the existing readers/writers to handle the awkward parts of LZH — a format where rewriting entries means carefully managing headers and offsets. For ZIP and TAR, oxiarc add walks the existing structure and appends rather than rebuilds.
The cancellation and progress machinery lives one layer down in oxiarc-core, so it’s shared by every codec and container. A CancellationToken threads through long operations; a ProgressSink receives updates without coupling the codecs (oxiarc-deflate, oxiarc-lzma, oxiarc-lz4, oxiarc-zstd, oxiarc-lzhuf, oxiarc-snappy, oxiarc-brotli) to any particular UI. That’s why the Brotli path could pick up progress and cancellation tests in this release with no special-casing.
Getting Started
Install the CLI:
cargo install oxiarc-cli
Preview an append, then do it for real:
oxiarc add archive.zip newfile.txt --dry-run
oxiarc add archive.zip newfile.txt --verbose
Prefer the library? Add the archive crate and the codec you need:
cargo add oxiarc-archive
cargo add oxiarc-deflate
use oxiarc_deflate::{deflate, inflate};
use oxiarc_archive::ZipReader;
use std::fs::File;
let compressed = deflate(b"Hello, World!", 6)?;
let decompressed = inflate(&compressed)?;
let file = File::open("archive.zip")?;
let mut zip = ZipReader::new(file)?;
for entry in zip.entries() {
println!("{}: {} bytes", entry.name, entry.size);
}
What’s New in 0.2.7
- Append files to existing ZIP/TAR/LZH archives with the new
oxiarc addcommand (--dry-run,--verbose). - Lenient
listandextractrecover from malformed or partial archives. - New
LzhExtensionsmodule for extended LZH appending and entry rewriting. - Async LZH and TAR streaming support.
- Cooperative cancellation (
CancellationToken) and progress reporting (ProgressHandle/ProgressSink). mansubcommand for man-page generation; colored CLI output respectingNO_COLOR/--no-color.- Windows long-path and reserved-filename handling on extract.
- clap 4.6.1, tokio 1.52.1; zero clippy and rustdoc warnings.
Tips
- Preview before you write. Run
oxiarc add archive.zip newfile.txt --dry-runto see exactly which entries an append will produce before touching the file. - Get per-entry detail with
--verbosewhen you want to audit whatoxiarc adddid. - Keep CI logs clean by setting
NO_COLOR=1or passing--no-colorso ANSI escapes never leak into your build output. - Install the man page with
oxiarc man > oxiarc.1and drop it wherever your system keeps section-1 pages. - Recover broken archives. Lenient mode lets
listandextractsalvage data from partial or malformed archives instead of failing outright. - Cancel long jobs cleanly. Library users can wire a
CancellationTokeninto long-running operations and watch progress through aProgressSink.
This is the foundation
OxiArc is the sovereign archiving and compression backend for the wider COOLJAPAN stack, and in-place editing makes it a better fit for the pipelines that lean on it:
- OxiMedia — video/image asset packaging and distribution
- SciRS2 / NumRS2 — dataset compression and long-term storage
- OxiGDAL — geospatial file archiving
- ToRSh / OxiRAG — high-throughput data ingestion pipelines
- RusMES — mail attachment handling
Repository: https://github.com/cool-japan/oxiarc
Star the repo if you want high-performance archiving and compression — now with in-place editing — and none of the traditional native toolchain headaches.
The era of “just use zlib” or “link libarchive” is coming to an end.
— KitaSan at COOLJAPAN OÜ April 21, 2026