Cookbook
Simple recipes for using zarrita.
Open an Array v2 & v3
import * as zarr from "zarrita";
const store = new zarr.FetchStore("http://localhost:8080/data.zarr");
const arr = await zarr.open(store, { kind: "array" });
arr; // zarr.Array<DataType, FetchStore>
arr.shape; // [5, 10]
arr.chunks; // [2, 5]
arr.dtype; // "int32"Open a Group v2 & v3
import * as zarr from "zarrita";
const store = new zarr.FetchStore("http://localhost:8080/data.zarr");
const group = await zarr.open(store, { kind: "group" });
group; // zarr.GroupOpen a Group or Array v2 & v3
import * as zarr from "zarrita";
const store = new zarr.FetchStore("http://localhost:8080/data.zarr");
const node = await zarr.open(store);
node; // zarr.Array<DataType, FetchStore> | zarr.GroupOpen a Group or an Array from another Node v2 & v3
import * as zarr from "zarrita";
const store = new zarr.FetchStore("http://localhost:8080/data.zarr");
const node = await zarr.open(store);
const arr = await zarr.open(node.resolve("path/to/foo"), { kind: "array" });Open Array or Group with strict version v2 & v3
You can enforce version with open.v2 or open.v3 respectively.
import * as zarr from "zarrita";
const store = new zarr.FetchStore("http://localhost:8080/data.zarr");
const arr = await zarr.open.v2(store, { kind: "array" });Create an Array v3
Requires the store to implement Writable.
import * as zarr from "zarrita";
import { FileSystemStore } from "@zarrita/storage";
const store = new FileSystemStore("tempstore");
const arr = await zarr.create(store, {
shape: [10, 10],
chunks: [5, 5],
dtype: "int32",
});
arr; // zarr.Array<"int32", FileSystemStore>Create a Group v3
Requires the store to implement Writable.
import * as zarr from "zarrita";
import { FileSystemStore } from "@zarrita/storage";
const store = new FileSystemStore("tempstore");
const group = await zarr.create(store, {
attributes: { answer: 42 },
});
group; // zarr.GroupOpen a Consolidated Store
Zarr v2 allows consolidating metadata for an entire hierarchy at the store root (under /.zmetadata). Metadata consolidation is particularly useful when interacting with remote stores, where each metadata fetch incurs a network request and hence, latency.
The withConsolidated helper wraps an existing store, proxying metadata requests with the consolidated metadata, thereby minimizing network requests.
import * as zarr from "zarrita";
let store = await zarr.withConsolidated(
new zarr.FetchStore("https://localhost:8080/data.zarr")
);
// The following do not incur network requests for metadata
let root = await zarr.open(store, { kind: "group" });
let foo = await zarr.open(root.resolve("foo"), { kind: "array" });The store returned from withConsolidated is readonly and adds .contents() list the known contents of the hierarchy:
store.contents(); // [{ path: "/", kind: "group" }, { path: "/foo", kind: "array" }, ...]TIP
The withConsolidated helper errors out if v2 consolidated metadata is absent. Use tryWithConsolidated for uncertain cases; it leverages consolidated metadata if available.
let store = await zarr.tryWithConsolidated(
new zarr.FetchStore("https://localhost:8080/data.zarr"),
);