COOLJAPAN
← All posts

rs3gw 0.2.1 Released — Pure-Rust Compression Lands with OxiArc

rs3gw is a Pure Rust S3-compatible object-storage gateway powered by scirs2-io. The 0.2.1 patch migrates compression to COOLJAPAN OxiArc (oxiarc-zstd/lz4/deflate), expands Object Lock, RestoreObject, and SSE test coverage to 961 tests, and resolves an OpenTelemetry version conflict.

release rs3gw s3 object-storage rust oxiarc storage-gateway

Your object-storage gateway just lost its last C codec.

Today we released rs3gw 0.2.1 — a hardening patch that moves compression onto Pure-Rust OxiArc and broadens correctness coverage across Object Lock, RestoreObject, and SSE.

No C. No C++. No Go. No Fortran. rs3gw was already a single static binary speaking the S3 wire protocol without a line of native code in the request path — but until now the storage layer still leaned on the C-backed zstd and lz4 codecs to compress object data. With 0.2.1 that changes: compression is served by COOLJAPAN OxiArc (oxiarc-zstd, oxiarc-lz4, oxiarc-deflate), closing another C dependency in the storage path. The result is the same Zstd and LZ4 behavior on the wire, now sovereign, auditable, and built from Rust source you can read end to end.

Why 0.2.1 matters

This is a small, focused patch — but it carries one genuinely strategic change and several pieces of hardening:

Technical Deep Dive

OxiArc compression in the storage layer. Object compression lives in src/storage/. Where the gateway previously handed bytes to the C zstd/lz4 codecs, it now routes them through OxiArc — oxiarc-zstd for the zstd:N levels, oxiarc-lz4 for fast LZ4, and oxiarc-deflate for deflate-class needs. The codec selection driven by RS3GW_COMPRESSION is unchanged from the caller’s perspective; only the implementation underneath moved to Pure Rust.

Correctness coverage for retention and encryption. S3 Object Lock (both GOVERNANCE and COMPLIANCE modes), RestoreObject, and server-side encryption are the features where a subtle bug is least acceptable. The new tests exercise these paths directly. Object Lock and SSE live under src/storage (encryption in src/storage/encryption.rs) and src/api; the added tests cover lock retention semantics, restore flows, and SSE round-trips.

Observability alignment. Tracing is wired in src/observability/tracing.rs. The OpenTelemetry version pin to 0.31 keeps that module compiling against tracing-opentelemetry 0.32.x without the dependency resolver fighting over incompatible OTel majors.

Getting Started

rs3gw is a server. Build it and run it:

git clone https://github.com/cool-japan/rs3gw.git
cd rs3gw
git checkout v0.2.1
cargo build --release
./target/release/rs3gw

Configure it through the environment:

export RS3GW_BIND_ADDR="0.0.0.0:9000"
export RS3GW_STORAGE_ROOT="./data"
export RS3GW_ACCESS_KEY="minioadmin"
export RS3GW_SECRET_KEY="minioadmin"
export RS3GW_COMPRESSION="zstd:3"   # now served by OxiArc (oxiarc-zstd) under the hood

Then talk to it with the standard AWS CLI — point --endpoint-url at port 9000:

aws --endpoint-url http://localhost:9000 s3 cp data.csv s3://my-bucket/   # stored & compressed via OxiArc
aws --endpoint-url http://localhost:9000 s3 ls s3://my-bucket/

Objects written through this path are compressed by OxiArc — no C codec involved.

What’s New in 0.2.1

Tips

This is the foundation

rs3gw fits into the COOLJAPAN ecosystem: it is built on scirs2-io and SciRS2, and as of 0.2.1 it compresses through OxiArc — the COOLJAPAN Pure-Rust compression toolkit — alongside siblings like SciRS2, NumRS2, OptiRS, PandRS, OxiBLAS, OxiCode, and OxiZ. Every layer that touches your bytes is Rust you can audit.

Repository: https://github.com/cool-japan/rs3gw

Star the repo if a Pure-Rust S3 gateway with no native codec dependency belongs in your stack. Sovereign storage, all the way down.

KitaSan at COOLJAPAN OÜ May 16, 2026

↑ Back to all posts