pizzarr 0.2.1
Cloud storage
- New
zarrs_get_key()reads a single key from any store the zarrs backend can open, returning raw bytes orNULLwhen the key is absent. Cloud stores delegate all I/O toobject_storeand expose no key-level read, so consolidated metadata (.zmetadata) was unreachable from R for ans3://orgs://URL. Reading that one key is enough to enumerate a store’s arrays and recover their dimension names and attributes, which is what group-level inquiry overs3://needs.
Cloud storage fixes
- S3 requests were always sent unsigned, so configured AWS credentials were ignored and private buckets returned 403. Signing is now decided from the environment: requests are unsigned when no credential source is present, so public buckets still work without configuration, and signed as soon as
AWS_ACCESS_KEY_ID,AWS_SESSION_TOKEN,AWS_PROFILE, or another credential variable is set.AWS_SKIP_SIGNATUREforces either behaviour. -
zarr_open()on ans3://orgs://string fell through toDirectoryStore, which tried to create a directory named after the URL. These URLs now resolve toS3StoreandGcsStore, and cloud stores default to read mode. -
S3StoreandGcsStoreinherited no-opget_item(),contains_item(), andlistdir()methods that silently returnedNULL. They now raise an error naming the supported read paths. -
HttpStore$listdir()took no arguments, so thepathargument every other store accepts raised an error that callers swallowed —ZarrGroup’s print method reportedNo. members : 0for every HTTP-backed group. It now acceptspathand lists within it.
Documentation
- New
vignettes/remote-stores.Rmdcovering remote and cloud access: the mapping fromfsspec/xarraystorage_optionsto pizzarr’s environment variables, the HTTPS ands3://routes, alternate endpoints such as MinIO, Ceph, and Open Storage Network pods, and the current limits. - Alternate S3 endpoints are configured with
AWS_ENDPOINT;AWS_ALLOW_HTTPandAWS_VIRTUAL_HOSTED_STYLE_REQUESTcover plain-HTTP and path-style addressing. This worked before but was undocumented. - Anonymous access to public GCS buckets over
gs://is documented, and now tested. It needsGOOGLE_SKIP_SIGNATURE=true, since GCS does not infer anonymous access from absent credentials the way S3 does. -
S3Store,GcsStore, andHttpStoregained detailed documentation of credentials, endpoints, and which distribution tier each requires. -
zarr_open()’sstoreargument now documents every accepted form: a path, anhttp(s)://URL, ans3://orgs://URL, or aStoreobject. -
zarr_open_group()’sstorage_optionsargument is documented as ignored rather than as anfsspecpassthrough. - Vignettes reorganized around data conventions rather than transport, now that connection details have their own article.
remote-ome-ngff.Rmdmerged intoome-ngff.Rmd, which covers the OME-NGFF multiscales convention against both a local and a remote store;remote-anndata.Rmdrenamedanndata.Rmd. - The OME-NGFF and AnnData vignettes now evaluate their code at build time instead of showing static listings, so the examples are checked. Both require the
bloscpackage and network access, and degrade to unevaluated when either is missing. - README gained a “Remote and cloud data” section.
pizzarr 0.2.0
CRAN release: 2026-04-20
Two-tier distribution
- CRAN ships pure R (no Rust compilation). r-universe ships pre-built binaries with the zarrs Rust backend compiled in. No Rust toolchain needed for end users on either tier.
- New functions:
is_zarrs_available(),pizzarr_compiled_features(),pizzarr_upgrade(). -
tools/cran-build.shproduces a CRAN tarball withsrc/stripped out.
zarrs Rust backend (r-universe tier)
- Added zarrs Rust backend via extendr for parallel decompression, codec execution, and store abstraction. 9
#[extendr]functions, 13 Rust source files. - Transparent dispatch:
ZarrArray$get_item()and$set_item()automatically use the zarrs fast path when eligible (contiguous slices, supported dtype, filesystem or HTTP store). Unsupported selections fall through to the R-native path silently. - Read path: two-step dtype dispatch retrieves data at stored precision, then widens to R-compatible types (f32→f64, i16→i32, etc.) in Rust before crossing the FFI boundary.
- Write path: symmetric narrowing with range checks (R double→f32, R integer→i16, etc.). Out-of-range values produce errors, not silent truncation.
- Array creation via zarrs:
zarr_create()dispatches to the zarrs backend when available. Supports V2 and V3 formats with four codec presets (none, gzip, blosc, zstd). - C↔︎F order transpose moved from R (
aperm) to Rust, eliminating two full-array copies per read and up to five per write. Cache-blocked tiling for 2D, output-order iteration for nD. - HTTP/HTTPS reads via
zarrs_httpcrate.HttpStore-backed arrays use zarrs for parallel chunk decode on remote data. R-nativecrul-based path remains as fallback. - S3 reads via
object_storecrate. NewS3StoreR6 class fors3://URLs. Public buckets work without credentials (unsigned requests). - GCS reads via
object_storecrate. NewGcsStoreR6 class forgs://URLs. Public GCS data accessible via HTTPS endpoint without credentials. - Process-global store handle cache with explicit lifecycle management via
zarrs_close_store().
Configuration
- New
pizzarr_config()function for viewing and setting concurrency options. Three settings:nthreads(rayon thread pool size),concurrent_target(codec concurrency level), andhttp_batch_range_requests(multipart range toggle for HTTP stores). All three backed by environment variables (PIZZARR_NTHREADS,PIZZARR_CONCURRENT_TARGET,PIZZARR_HTTP_BATCH_RANGE_REQUESTS). -
zarrs_runtime_info()now includesnthreads(rayon thread pool size).
Breaking changes
- Removed R-native parallel chunk I/O infrastructure. The
pizzarr.parallel_backend,pizzarr.parallel_write_enabled, andpizzarr.progress_baroptions are no longer used. On r-universe builds, zarrs handles parallelism internally via its Rust thread pool. On CRAN (pure R), chunk I/O is sequential. - Dropped
pbapply,parallel,future, andfuture.applyfrom Suggests. - Removed
vignettes/parallel.Rmd. Replaced byvignettes/zarrs-backend.Rmd. - Minimum R version raised from 4.1.0 to 4.2.
pizzarr 0.1.2
CRAN release: 2026-04-06
- Added
get_dimension_names()method toZarrArrayfor V3 dimension names support. - OME-NGFF vignettes now use base R
rasterImage()instead of therasterpackage (#161).
pizzarr 0.1.0
CRAN release: 2026-03-24
This is the first release of pizzarr to CRAN. The package has significant testing and validation but has not been vetted by a large and diverse user community. As a result, bugs and undesirable behavior may be found. If you find issues please report them at:
https://github.com/zarr-developers/pizzarr/issues
- Initial release of pizzarr.
- Read and write Zarr V2 and Zarr V3 stores.
- Storage backends: DirectoryStore, MemoryStore, HttpStore.
- Compression codecs: Zstd, LZ4, Blosc, zlib, gzip, bzip2, LZMA.
- VLenUTF8 object codec for variable-length strings.
- Parallel read/write support via pbapply, parallel, and future.
- R-like one-based and Python-like zero-based slicing.
