Generate interactive QC reports from scientific data with progressive loading and spatial visualization. Perfect for single-cell genomics, spatial transcriptomics, and other large-scale biological datasets.
Quick start: npm install -g siqc
→ siqc --help
- 🚀 Progressive Loading: Large datasets (millions of cells) load incrementally without blocking the UI
- 📊 Interactive Visualizations: Histograms, scatter plots, heatmaps, and spatial plots with Plotly.js
- 🗜️ Efficient Compression: Binary data format with gzip compression for optimal file sizes
- 📄 Standalone Reports: Single HTML file with no external dependencies
- 🎯 Spatial Analysis: Advanced spatial plotting with faceting and optimization
- ⚡ Performance Optimized: Web Workers, typed arrays, and multi-scale rendering
- 🛠️ Easy CLI: Simple command-line interface for quick report generation
# Install globally from npm
npm install -g siqc
# Install globally from git repository (development version)
npm install -g git+https://github.com/openpipelines-bio/siqc.git
git clone https://github.com/openpipelines-bio/siqc.git
cd siqc
npm install
# In development, CLI is available via `npm run cli` instead of global `siqc`
# Generate single-cell test data
siqc generate-test-data --type sc --output ./example-data
# Generate spatial test data
siqc generate-test-data --type xenium --output ./spatial-data
# Render report from test data
siqc render --data ./example-data/data.json --structure ./example-data/structure.json --output ./my-report.html
# Open the report in your browser
open my-report.html
Prepare your data in the required format (see Data Format) and render:
siqc render --data ./my-qc-data/data.json --structure ./my-qc-data/structure.json --output ./my-qc-report.html
Generate example datasets for testing and development.
siqc generate-test-data --type <type> --output <directory>
Options:
--type, -t
: Dataset type (sc
,sc_large
,xenium
,xenium_large
)--output, -o
: Output directory for generated files--verbose
: Enable verbose logging
Examples:
siqc generate-test-data --type sc --output ./test-data
siqc generate-test-data --type xenium_large --output ./large-spatial --verbose
Generate QC report from existing data.
siqc render --data <file> --structure <file> --output <file> [options]
Options:
--data, -d
: Path to data JSON file (required)--structure, -s
: Path to structure JSON file (required)--output, -o
: Output HTML file path (required)--payload, -p
: Path to binary payload file (auto-generated if not specified)--auto-generate
: Auto-generate payload file if not specified (default: true)--verbose
: Enable verbose logging
Examples:
siqc render --data ./data.json --structure ./structure.json --output ./report.html
siqc render --data ./data.json --structure ./structure.json --output ./report.html --payload ./cached-payload.bin
Compress data to binary payload format for faster loading.
siqc compress --data <file> --structure <file> --output <file>
Options:
--data, -d
: Path to input data JSON file (required)--structure, -s
: Path to structure JSON file (required)--output, -o
: Output binary payload file path (required)--verbose
: Enable verbose logging
Examples:
siqc compress --data data.json --structure structure.json --output payload.bin
Your data should be in columnar format for optimal performance:
{
"cell_rna_stats": {
"columns": [
{
"name": "sample_id",
"dtype": "categorical",
"data": [0, 0, 1, 1, 2],
"categories": ["sample_A", "sample_B", "sample_C"]
},
{
"name": "total_counts",
"dtype": "integer",
"data": [1200, 1500, 800, 2000, 1100]
},
{
"name": "fraction_mitochondrial",
"dtype": "numeric",
"data": [0.05, 0.08, 0.12, 0.03, 0.07]
}
]
},
"spatial_coords": {
"columns": [
{
"name": "x_coord",
"dtype": "numeric",
"data": [100.5, 200.3, 300.1, 150.7, 250.9]
},
{
"name": "y_coord",
"dtype": "numeric",
"data": [50.2, 75.8, 90.3, 120.5, 80.1]
}
]
}
}
Define the report structure and categories:
{
"title": "My QC Report",
"categories": [
{
"key": "cell_rna_stats",
"name": "Cell RNA Statistics",
"additionalAxes": false,
"defaultFilters": []
},
{
"key": "spatial_coords",
"name": "Spatial Coordinates",
"additionalAxes": true,
"defaultFilters": []
}
]
}
Data Types:
categorical
: Integer indices with category labelsinteger
: Whole numbersnumeric
: Floating-point numbersboolean
: True/false values