v0.1.5
Patch release. The PyPI-packaged (Python/C++) change over 0.1.4 is the extend_for_viewer(primary=) API; the rest is JS (the @lstar/core reader, consumed from the repo, not the wheel).
Python / R / JS — extend_for_viewer(primary=)
Name the grouping the viewer opens on. It's hoisted to the front of the prepared groupings, so it keys the counts_cellmajor locality reorder and is summarized first, and it composes with auto-detect (primary="cell_type" with no explicit groupings still preps every detected grouping but keys the reorder on cell_type). counts_cellmajor_order records provenance.group; a primary that isn't a grouping over the cell axis is rejected with a clear error. Identical semantics on Python, R, and JS, enforced by a cross-surface conformance leg (conformance/viewer_primary.sh).
JS reader (@lstar/core) — hosted single-file .lstar.zarr.zip + throughput
Not in the PyPI wheel; in the tag for browser/Node consumers:
ZipStorecorrectness + performance: tolerates zarrita's leading-slash chunk keys (fixes a silent data-collapse on hosted zips); reads a chunk in one round-trip (local header folded into the data read); and fetches withcache: "no-store"so concurrent same-URL range reads parallelize (avoids the browser HTTP cache lock).cscColumns(name, cols[])— a batched, coalesced multi-column read (the column-major twin ofcsrRows) for gene panels; and the byte-range fast path now range-reads within a chunk for multi-chunk arrays.- A field's independent component arrays (labels/values/offsets, codes/categories) are read concurrently, removing an avoidable round-trip from the viewer's first-paint path.