--- title: "Design principles for the Rarr package" date: "`r BiocStyle::doc_date()`" author: - name: Hugo Gruson affiliation: - EMBL Heidelberg email: hugo.gruson@embl.de package: "`r BiocStyle::pkg_ver('Rarr')`" vignette: > %\VignetteIndexEntry{Design principles for the Rarr package} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} output: BiocStyle::html_document --- ## Guiding principles - **performant**. We focus on speed & memory efficiency. This results in Rarr being among the most performant Zarr implementations. This is ensured by the use of an extensive [continuous benchmarking](https://lorenzwalthert.github.io/touchstone/index.html) suite. Performance critical steps are written in C. - **maintainable and extensible**. Additional codecs can easily be supported as the entire codec codebase is decoupled from the rest of the codebase. ## Scope We aim for full support of the Zarr specification. There is currently no clear decision process regarding support for [Zarr extensions](https://github.com/zarr-developers/zarr-extensions). Please reach out if you have a specific use case that relies on a Zarr extension. ## Zarr version Rarr is a "Zarr version 3 first" implementation. There is full support for both version 2 and version 3 Zarr arrays but: - the package API is modelled on the version 3 specification - we backport some backward compatible feature from version 3 to version 2. For example, the `dimension_names` field is supported for both version 2 and version 3 arrays. This is neither strictly defined nor forbidden in the version 2 specification, but it is a feature that we have chosen to support in both versions for consistency. - if we ever had to make a decision on a tradeoff (e.g., performance tradeoff) between version 2 and version 3, we would prioritise version 3. ## Functional programming