avaliev's picture
Demo Deployment - 0.0.1 version
c75526e verified
# Viash Component Architecture Guide
## Overview
Viash enables building reusable, portable components across Docker, native, and Nextflow platforms.
## Component Structure
### Configuration File (config.vsh.yaml)
```yaml
name: "spatial_qc"
description: "Spatial transcriptomics quality control component"
argument_groups:
- name: "Input/Output"
arguments:
- name: "--input"
type: "file"
description: "Input spatial data (h5ad format)"
required: true
- name: "--output"
type: "file"
direction: "output"
description: "Output filtered data"
required: true
- name: "Parameters"
arguments:
- name: "--min_genes"
type: "integer"
description: "Minimum genes per cell"
default: 200
resources:
- type: "python_script"
path: "script.py"
platforms:
- type: "docker"
image: "quay.io/biocontainers/scanpy:1.9.1--pyhd8ed1ab_0"
- type: "nextflow"
```
### Script Implementation
```python
import argparse
import scanpy as sc
import json
parser = argparse.ArgumentParser()
parser.add_argument('--input', required=True)
parser.add_argument('--output', required=True)
parser.add_argument('--min_genes', type=int, default=200)
args = parser.parse_args()
adata = sc.read_h5ad(args.input)
sc.pp.filter_cells(adata, min_genes=args.min_genes)
adata.write(args.output)
```
## Development Workflow
```bash
# Build component
viash build config.vsh.yaml -p docker
# Test component
viash test config.vsh.yaml
# Build for Nextflow
viash build config.vsh.yaml -p nextflow -o target/nextflow/
```
## Best Practices
1. **Single Responsibility**: Each component should do one thing well
2. **Clear Interfaces**: Well-defined inputs and outputs
3. **Comprehensive Testing**: Unit tests for all functionality
4. **Documentation**: Clear descriptions and examples