Herdr UI
Herdr의 TUI가 뛰어나며, 창을 통해 추가되는 기능
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A library for interfacing with SpatialData stores in TypeScript/JavaScript.
This monorepo contains:
zarrita for higher-level metadata representationsIf you prefer not to use Volta, use Node.js >= 20.19 (or 22.12+) and pnpm >= 10.
# Install Volta once
curl https://get.volta.sh | bash
# Restart your shell so Volta is on PATH
volta install [email protected] [email protected]
# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test
# Lint code
pnpm lint
# Format code
pnpm format
# Start documentation site
pnpm docs:dev
To try readZarr in a Node REPL from this repo, first generate the example fixture. test-fixtures/ is gitignored, so a fresh checkout will not have it yet:
pnpm test:fixtures:generate:0.8.0
pnpm build
node
Then:
const { readZarr } = await import('./packages/core/dist/index.js');
const { FileSystemStore } = await import('@zarrita/storage');
const sdata = await readZarr(new FileSystemStore('./test-fixtures/v0.8.0/blobs.zarr'));
sdata.toString();
For more detail, including URL-backed examples, see packages/core/README.md.
To run the full test suite, you'll need:
The Python environment is managed by uv and defined in python/pyproject.toml. To set it up:
Installing uv:
# Install uv (Unix/macOS)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Or using pip/pipx
pip install uv
# or
pipx install uv
Setting up the environments:
The project uses completely separate Python environments for each spatialdata version. Each version has its own directory with its own pyproject.toml and virtual environment:
# Set up environment for spatialdata 0.5.0
uv sync --directory python/v0.5.0
# Set up environment for spatialdata 0.6.1
uv sync --directory python/v0.6.1
# Set up environment for spatialdata 0.7.2
uv sync --directory python/v0.7.2
# Set up environment for spatialdata 0.8.0
uv sync --directory python/v0.8.0
# Or set up all at once (the fixture generation script will do this automatically)
Each environment:
python/v{version}/.venv/pyproject.toml that pins a specific spatialdata versionNote: The fixture generation script automatically sets up these environments when needed. You only need to manually sync if you want to activate an environment directly or use it in your editor.
Version Mapping:
zmetadata)ome key) in zarr v3 stores (consolidated zarr.json)0/1/2 to s0/s1/s2, and writes the AnnData obs/var index as a nullable-string-array group (a values array beside a mask array) rather than a plain string-array arrayThe project includes editor configuration files (.vscode/settings.json and .cursor/settings.json) that point the Python interpreter at python/spatialdata-js-util/.venv. That is the package with source, tests and a CLI to edit, so it is what imports should resolve against; the python/v*/ environments exist only to run one release's generate_fixtures.py and are not a useful default.
VS Code / Cursor:
Cmd/Ctrl+Shift+P → "Python: Select Interpreter" → Choose:
./python/v0.5.0/.venv/bin/python3 for spatialdata 0.5.0./python/v0.6.1/.venv/bin/python3 for spatialdata 0.6.1./python/v0.7.2/.venv/bin/python3 for spatialdata 0.7.2./python/v0.8.0/.venv/bin/python3 for spatialdata 0.8.0Other editors:
python/spatialdata-js-util/.venv/bin/python3python/v0.5.0/.venv/bin/python3 for spatialdata 0.5.0python/v0.6.1/.venv/bin/python3 for spatialdata 0.6.1python/v0.7.2/.venv/bin/python3 for spatialdata 0.7.2python/v0.8.0/.venv/bin/python3 for spatialdata 0.8.0# Run all tests (unit + integration)
pnpm test:all
# Run only unit tests (fast, no fixtures needed)
pnpm test:unit
# Run only integration tests (requires fixtures)
pnpm test:integration
# Run tests from individual packages
pnpm test
Test fixtures are generated on-demand using the Python spatialdata library. Each version uses a separate Python environment with the specific spatialdata version pinned to ensure accurate fixture generation.
Fixtures are stored in test-fixtures/ (excluded from git).
# Generate fixtures for all spatialdata versions (0.5.0, 0.6.1, 0.7.2 and 0.8.0)
# This will automatically set up the version-specific environments if needed
pnpm test:fixtures:generate
# Generate fixtures for a specific version
pnpm test:fixtures:generate:0.5.0
pnpm test:fixtures:generate:0.6.1
pnpm test:fixtures:generate:0.7.2
pnpm test:fixtures:generate:0.8.0
How it works:
python/v0.5.0/, python/v0.6.1/, python/v0.7.2/ and python/v0.8.0/pyproject.toml with the spatialdata version pinneduv sync for each environment before generating fixturesNote: Integration tests will automatically generate fixtures if they're missing, but you can pre-generate them for faster test runs.
What the matrix does and does not prove: each environment pins spatialdata and lets everything else float, so a fixture is spatialdata-X against whatever anndata / zarr / pyarrow its lock resolved on the day — one sample from a much larger writer space, not a characterisation of the release. Permuting that space (spatialdata × anndata × zarr × …) is not the answer: it costs ~70s of generation per cell for a combinatorial number of cells, still is not exhaustive, and aims at the wrong target, since what matters is which encodings land on disk rather than which writer combination produced them. Use the matrix to discover that an encoding exists, then pin the encoding in a writer-independent unit test — packages/core/tests/nullableStringArray.spec.ts is the worked example. See the comment on FIXTURE_VERSIONS in tests/integration/fixtureVersions.ts for the longer version.
The main Node integration tests now load fixtures directly from a FileSystemStore. This server is still useful for HTTP smoke tests and browser-oriented local development with FetchStore:
# Start the test fixture server (default http://localhost:38473)
pnpm test:server
Override the port with SPATIALDATA_FIXTURE_PORT if needed.
Once running, fixtures are accessible at:
http://localhost:38473/test-fixtures/v0.5.0/blobs.zarrhttp://localhost:38473/test-fixtures/v0.6.1/blobs.zarrhttp://localhost:38473/test-fixtures/v0.7.2/blobs.zarrhttp://localhost:38473/test-fixtures/v0.8.0/blobs.zarrThe server provides directory listings and serves all zarr metadata files with appropriate CORS headers.
The CORS proxy server allows accessing spatialdata stores that don't have CORS headers enabled. This is useful for local development when testing against remote stores.
Standalone Usage:
# Start the CORS proxy server (runs on http://localhost:8081)
pnpm test:proxy
Usage:
Proxy a remote URL using query parameter:
http://localhost:8081/?url=https://example.com/data.zarr/.zattrs
Example:
If you have a spatialdata store at https://example.com/mydata.zarr that doesn't have CORS headers, you can access it through the proxy:
import { readZarr } from '@spatialdata/core';
// Instead of:
// const sdata = await readZarr('https://example.com/mydata.zarr');
// Use the proxy (query parameter form):
const sdata = await readZarr('http://localhost:8081/?url=https://example.com/mydata.zarr');
Automatic Proxy Management:
The validation script (pnpm validate:datasets:js) automatically manages its own proxy server. The proxy is started at the beginning of validation and stopped when complete, so you don't need to run it separately.
⚠️ Warning: The CORS proxy is for local development only. It has no security restrictions and should never be exposed to the internet.
The project includes a script to validate dataset compatibility with the JavaScript implementation using publicly available spatialdata datasets.
Test datasets with the JavaScript implementation in Node.js (outside browser):
# First, build the packages
pnpm build
# Validate all datasets with JS implementation
pnpm validate:datasets:js
# Validate a specific dataset
pnpm validate:datasets:js -- --dataset "Xenium"
# Output to a file
pnpm validate:datasets:js -- --output-file validation-results-js.md
Note: The validation script automatically starts its own CORS proxy server, uses it for all requests, and shuts it down when validation completes. You don't need to run pnpm test:proxy separately.
The validation script generates a table showing which datasets work with the JavaScript implementation:
The detailed results include:
This is useful for:
The validation script supports multiple output formats:
# Markdown (default) - Human-readable report
pnpm validate:datasets:js -- --output-format markdown --output-file results.md
# JSON - Machine-readable results
pnpm validate:datasets:js -- --output-format json --output-file results.json
# CSV - Spreadsheet-friendly format
pnpm validate:datasets:js -- --output-format csv --output-file results.csv
MIT © Centre For Human Genetics, Oxford University