Annotate single-cell transcriptomes with reference gene expression programs

starCAT (star-CellAnnoTator) scores every cell in a dataset against a curated catalog of gene expression programs and derives discrete annotations such as cell type, proliferation and activation state. Choose a reference, pick a counts file, and the analysis runs here in your browser.

Runs entirely in your browser Your data is never uploaded Nothing to install Nature Methods, 2025

Run starCAT

1Choose a reference catalog
2Select your counts file
Raw UMI counts, cells × genes, with gene symbols as gene names. Download an example dataset (15,000 T cells, 55 MB).
Input tips
  • H5AD: counts are read from X, or from layers['counts'] / raw.X when X is normalised. Store the matrix in sparse (csr) format to keep files small.
  • CellRanger H5: filtered_feature_bc_matrix.h5 works as is; non-gene features such as antibody capture are ignored.
  • Gene names must be HGNC symbols (e.g. CD3E), not Ensembl IDs.
  • Only the genes in the reference are read, and cells are processed in batches, so datasets of 100,000+ cells run in well under a minute. Very large files are limited by browser memory; the Python package has no such limit.
  • Problems? Please open an issue.

Results

usage.tsv holds each cell's normalised usage of every program (rows sum to 1). scores.tsv holds the reference's derived annotations: continuous scores, their binary calls and discrete labels.

Show log

      

How it works

Private by design

The page downloads a Python runtime (Pyodide) and the published starcatpy package into your browser, then reads your file locally. No server ever sees your data.

The latest starCAT implementation

The page runs the current release of the starcatpy package. Counts for the reference genes are variance-scaled and each cell is fitted by non-negative least squares against the fixed reference programs; derived scores and labels follow the reference's own scoring rules.

Built for real datasets

Only the reference genes are read from disk and cells are fitted in batches, so memory stays flat as datasets grow. Need more? Run the Python package or build your own reference.