scPassport 🧬

A passport system for single-cell objects. Stamp your Seurat, SingleCellExperiment, or SummarizedExperiment data with full metadata, lineage tracking, and processing logs — all stored inside the .rds file itself.


Installation

# Install from GitHub
remotes::install_github("sedatkacar56/scPassport")

What It Does

Every object gets a passport that travels with it forever:

Object Type Passport Location Processing Log Location
Seurat @misc$passport @misc$processing_log
SingleCellExperiment metadata(obj)$passport metadata(obj)$processing_log
SummarizedExperiment metadata(obj)$passport metadata(obj)$processing_log
Section Fields
Identity object_id, rds_self (RDS number), created
Animal animal_id, species, sex, age, condition, tissue
Experiment project, researcher, date, notes
Lineage parent_id, rds_parent, lineage chain, children, rds_children
Custom anything you want to add
Processing Log every step logged with cell count + timestamp

Quick Start

Seurat

library(scPassport)

# Stamp your object — popup opens, fill the form
WTHeme <- scPassport(WTHeme)

# Log processing steps
WTHeme <- NormalizeData(WTHeme)
WTHeme <- log_step(WTHeme, "NormalizeData",
           params = list(method = "LogNormalize"))

# Stamp a child subset — parent linked automatically
EndofrHeme <- subset(WTHeme, subset = cell_type == "Endothelial")
EndofrHeme <- scPassport(EndofrHeme, parent = WTHeme)

# Read passport anytime
read_passport(EndofrHeme)

SingleCellExperiment

library(scPassport)
library(SingleCellExperiment)

sce <- SingleCellExperiment(assays = list(counts = count_matrix))

# Same functions — passport goes into metadata(sce)$passport
sce <- scPassport(sce)
sce <- log_step(sce, "scran normalization")
read_passport(sce)

SummarizedExperiment

library(scPassport)
library(SummarizedExperiment)

se <- SummarizedExperiment(assays = list(counts = count_matrix))

# Same functions — passport goes into metadata(se)$passport
se <- scPassport(se)
se <- log_step(se, "DESeq2 normalization")
read_passport(se)

Output of read_passport()

========== PASSPORT ==========
Object ID  : EndofrHeme
RDS Self   : 225
Created    : 2026-03-09 10:34:12
-------- Animal --------
Animal ID  : M01
Species    : Rattus norvegicus
Sex        : male
Age        : P60
Condition  : Heme
Tissue     : Lung - Endothelial
-------- Experiment --------
Project    : HEME rat PROJECT
Researcher : Sedat
Date       : 2026-03-09
Notes      : rpca integrated, subset from WTHeme
-------- Lineage --------
Parent     : WTHeme
RDS Parent : 224
Chain      : WTHeme
Children   : gCapC, gCapB, gCapD
RDS Children: 226, 227, 228
-------- Custom Fields --------
integration_type: rpca
ILMN_name      : ILMN_5564
======= PROCESSING LOG =======
[1] NormalizeData             | 54184 cells | 2026-03-09 ...
[2] RunPCA                    | 54184 cells | 2026-03-09 ...
[3] Subset Endothelial        | 12453 cells | 2026-03-09 ...
==============================

Functions

Function Description
scPassport(obj) Open popup to fill/update passport
scPassport(obj, parent = WTHeme) Stamp child, auto-link to parent
scPassport(obj, read = TRUE) Print passport to console
read_passport(obj) Print passport to console
log_step(obj, "step name", params = list(...)) Log a processing step

Works with Seurat, SingleCellExperiment, and SummarizedExperiment objects.


Author

Sedat Kacar Pulmonary Post Doc — Indiana University Praise be to Allah (SWT)