brisc#
brisc is a high-performance library for analyzing single-cell data at scale. It prioritizes running as fast as possible on multi-core CPU systems, strict reproducibility, and a clean, user-friendly interface. On datasets of 1 to 20 million cells, it cuts the runtime of common workflows from hours to minutes. Get started. ›
Blazing fast
Achieved through ground-up optimization of core algorithms and effective parallelism.
Deterministic
Every step gives floating-point identical results between runs, for any number of threads.
Complete toolkit
Preprocessing, dimensionality reduction, harmonization, label transfer, clustering, embedding, pseudobulk DE, and plotting.
Interoperable
Read and write .h5ad, .rds, .h5Seurat, and 10x files; interleave Python and R analyses via ryp without intermediate writes to disk.
Memory-efficient
~2× lower peak memory usage than Scanpy by tracking cells that pass QC instead of subsetting.
User-friendly
Sensible defaults, strict type-checking, and solution-focused error messages.
from brisc import SingleCell
sc = SingleCell('data.h5ad')\
.qc()\
.hvg(batch_column='sample')\
.normalize()\
.pca()\
.neighbors()\
.shared_neighbors()\
.cluster(resolution=[0.25, 0.5, 1, 1.5, 2])\
.pacmap()
from brisc import SingleCell
sc_ref = SingleCell('data_ref.h5ad').qc()
sc_query = SingleCell('data_query.h5ad').qc()
sc_ref, sc_query = sc_ref.hvg(sc_query)
sc_ref = sc_ref.normalize()
sc_query = sc_query.normalize()
sc_ref, sc_query = sc_ref.pca(sc_query)
sc_ref, sc_query = sc_ref.harmonize(sc_query)
sc_query = sc_query.label_transfer_from(
sc_ref, 'cell_type',
cell_type_column='cell_type_transferred')
from brisc import SingleCell
pb = SingleCell('data.h5ad')\
.qc()\
.pseudobulk('sample', 'cell_type')
de = pb\
.qc('condition')\
.DE('~ condition + sex + pmi',
group='condition',
categorical_columns=['condition', 'sex'])