stellar <command> [options]
Commands:
init <slug> Scaffold a new project (writes stellar.yaml + dirs)
ingest Build LanceDB + DuckDB stores from raw inputs
serve Run uvicorn against the configured project
build-frontend Build the React SPA with project branding
deploy rsync to the configured deploy target + emit nginx/systemd
doctor Validate stellar.yaml against the data directory
Common options:
--config PATH Path to stellar.yaml (default: ./stellar.yaml)
--version Print version and exit
-h, --help Show this help
Scaffold a new project directory. Writes a minimal stellar.yaml, a
data/raw/ subdirectory, a README.md, and a .gitignore that hides
the generated data stores.
# Scaffold ./my_atlasstellarinitmy_atlas
# Scaffold into a specific pathstellarinitmy_atlas--dir/srv/atlases/my_atlas
# Refuses to overwrite a non-empty directorymkdiralready_here&&touchalready_here/file
stellarinitalready_here
# stellar: /abs/path/already_here exists and is not empty — refusing to overwrite# exit 2
Reads the h5ad / Seurat .rds inputs declared in stellar.yaml and
builds the gene-major Lance store, the DuckDB metadata file, and every
enabled module's parquet output. Idempotent — re-running drops and
recreates the artifacts.
# Default: stellar.yaml in the current directorystellaringest
# Explicit config pathstellaringest--configexamples/pbmc_3k/stellar.yaml
# Quiet mode — only the final "ingest complete" linestellaringest--quiet
# Missing config → exit 2stellaringest--config/tmp/nope.yaml
# stellar ingest: no config at /tmp/nope.yaml# exit 2
The first ingest of a Seurat .rds input triggers an R subprocess
conversion. See Recipes → From a Seurat object
for the prerequisites.
Run uvicorn against the project's FastAPI app. Mounts the always-on
core routes (/api/config, /api/embedding/coords, …) and one router
per enabled module under /api/<module>/.... Also mounts the
pre-built SPA at project.base_url.
# Localhost-only on the default portstellarserve--configstellar.yaml
# Public binding — combine with a reverse proxystellarserve--host0.0.0.0--port8000# Hot-reload during developmentstellarserve--reload
# Missing config → exit 2stellarserve--confignope.yaml
# stellar serve: no config at /abs/path/nope.yaml# exit 2
For production, run stellar serve under a systemd unit and put nginx
in front of it. See Deploy for the full recipe.
Run the SPA build (npm install + vite build) against
project.base_url so all asset URLs share that prefix. Writes the
bundle to stellar/frontend/dist/ inside the installed package — the
next stellar serve picks it up automatically.
You only need to run this if you're changing base_url, customising
the SPA source, or installing from a clone (the wheel ships a
pre-built bundle).
# Standard buildstellarbuild-frontend--configstellar.yaml
# Skip the install step on a repeat buildstellarbuild-frontend--skip-install
# Failure mode: no Node on PATHstellarbuild-frontend
# stellar build-frontend: `npm` not on PATH — install Node 18+ first.# exit 2
Rsync the SPA bundle (and any pre-baked static artifacts under
data/static/) to the configured deploy.target_dir, then print the
matching nginx + systemd snippets the maintainer can paste.
# Target read from stellar.yaml's deploy.target_dirstellardeploy--configstellar.yaml
# Override the target on the command linestellardeploy--configstellar.yaml--target/var/www/html/my_atlas
# Dry-run — see what would be copiedstellardeploy--dry-run
# Failure: no SPA bundle yetstellardeploy
# stellar deploy: no built SPA — run `stellar build-frontend` first.# exit 2
# Clean project — exit 0stellardoctor
# stellar doctor: 0 issues — your project is healthy.# Project with a misnamed cohort column — exit 1stellardoctor
# ✗ [input.matrices.primary] cohort.cell_type_column='cell_type' not in obs;# available cols: ['CellType', 'donor', 'condition']…## stellar doctor: 1 errors · 0 warnings# exit 1# Use in CI: gate deploy on a clean atlasstellardoctor--configstellar.yaml&&stellardeploy--configstellar.yaml
# On the build hoststellardoctor--configstellar.yaml# exit 0 requiredstellaringest--configstellar.yaml
stellarbuild-frontend--configstellar.yaml# only if base_url changedstellardeploy--configstellar.yaml# rsync + snippet# Then on the web host, restart the systemd unit:sudosystemctlrestartstellar-<slug>.service