1 unstable release
Uses new Rust 2024
| 0.1.0 | Mar 4, 2026 |
|---|
#8 in #transcriptomics
Used in kira-spatial
155KB
4K
SLoC
kira-spatial-io
kira-spatial-io is a deterministic Rust IO library for spatial transcriptomics datasets.
Purpose
- Deterministic ingest/export for 10x spatial datasets.
- Canonical in-memory model: SoA spatial domain + CSR expression matrix.
- Stable
.kira-spatial.binformat for fast validated reload.
Supported Formats
- 10x MTX/TSV +
spatial/viaDataset::open_10x. - Visium HD binned outputs (
binned_outputs/bin_*um) viaDataset::open_10x. - 10x H5 (
feature_slice.h5and compatible/matrix/*) viaDataset::open_h5. .kira-spatial.binimport/export viaDataset::from_kira_bin/Dataset::export_kira_bin.- Optional HD barcode mapping parquet (
barcode_mappings.parquet) with--features parquet.
Determinism Guarantees
- Canonical bin sorting:
(grid_row, grid_col)or(y, x)with total float ordering. - Canonical feature sorting:
gene_nameascending; stable remappedgene_id. - Canonical CSR rows: indices strictly increasing; duplicate
(bin,gene)merged by sum. - Canonical JSON metadata keys sorted recursively.
- Canonical dataset hash (
BLAKE3-128) verified on binary read. - Cross-run binary byte stability for same input + config.
See docs/DETERMINISM.md.
Memory Budget Behavior
LoadConfig.memory_budget_mb is enforced in staged builders:
- MTX CSR build checks final-size estimate before allocations.
- H5 CSR build checks final-size estimate and bounds chunk buffers by remaining budget.
- Parquet mapping loader enforces row-envelope estimate and errors with
MemoryLimitExceeded.
Feature Flags
| Feature | Default | Purpose |
|---|---|---|
parallel |
no | Enables optional rayon integration paths/tests. |
parquet |
no | Enables Visium HD barcode mapping parquet ingestion and typed accessor. |
Versioning Policy
- Crate version follows semver (
1.x.y). .kira-spatial.binlayout is frozen for v1.x (KIRA_SPATIAL_BIN_VERSION = 1).- Backward compatibility is guaranteed within major version for stable API and binary layout.
See docs/API_CONTRACT.md and docs/FORMAT.md.
Minimal Usage
use kira_spatial_io::{Dataset, LoadConfig, SpatialIoError};
fn load_export_reload() -> Result<(), SpatialIoError> {
let cfg = LoadConfig::default();
let ds = Dataset::open_10x("/data/sample_10x", cfg)?;
ds.export_kira_bin("/data/sample_10x/sample.kira-spatial.bin")?;
let reloaded = Dataset::from_kira_bin("/data/sample_10x/sample.kira-spatial.bin")?;
assert_eq!(ds.metadata_core().dataset_hash, reloaded.metadata_core().dataset_hash);
Ok(())
}
Dependencies
~29MB
~512K SLoC