nf-core Pipeline Catalog

BioLang provides native access to the nf-core catalog — over 100 curated, peer-reviewed bioinformatics pipelines built on Nextflow. Browse, search, and inspect pipelines directly from BioLang with built-in functions. No import needed.

Browsing Pipelines

Use nfcore_list() to browse all pipelines in the catalog. You can optionally sort by "stars" (default), "name", or "release", and limit the number of results:

# List all pipelines, sorted by stars (default)
let pipelines = nfcore_list()
pipelines |> print()

# Sort by name
nfcore_list("name") |> print()

# Get top 10 most-starred pipelines
let top10 = nfcore_list("stars", 10)
top10 |> print()

Returns a List of Records with fields: {name, description, stars, topics, latest_release}.

Searching

Search pipelines by name, description, or topics with nfcore_search(). The search is case-insensitive:

# Search for RNA-seq pipelines
nfcore_search("rnaseq") |> print()

# Search for variant-related pipelines, limit to 5
nfcore_search("variant", 5) |> print()

# Search by topic keyword
nfcore_search("single-cell") |> print()

Pipeline Details

Get detailed metadata for a specific pipeline with nfcore_info():

# Get full details for the sarek pipeline
let info = nfcore_info("sarek")
print(info)
# => { name: "sarek", full_name: "nf-core/sarek", description: "...",
#      stars: 142, url: "https://...", license: "MIT", topics: [...],
#      open_issues: 23, created: "2018-...", updated: "2024-..." }

Returns a Record with fields: {name, full_name, description, stars, url, license, topics, open_issues, created, updated}.

Releases

List all releases for a pipeline with nfcore_releases():

# Get all releases for rnaseq
let releases = nfcore_releases("rnaseq")
releases |> print()
# => [{ tag: "3.14.0", published_at: "2024-..." }, ...]

# Get the latest release tag
let latest = nfcore_releases("rnaseq") |> first()
print("Latest:", latest.tag)

Returns a List of Records: {tag, published_at}.

Parameter Schema

Inspect the parameter schema for a pipeline with nfcore_params(). Parameters are grouped by category:

# Get parameter schema for rnaseq
let params = nfcore_params("rnaseq")
print(params)
# => { input_output: [{ name: "input", type: "string", description: "...", default: nil }, ...],
#      reference_genome: [{ name: "genome", type: "string", ... }, ...],
#      ... }

# List all parameter groups
params |> keys() |> print()

# Inspect a specific group
params.input_output |> print()

Returns a Record of parameter groups, where each group maps to a List of {name, type, description, default}.

Configuration

The nf-core catalog URL is configurable via ~/.biolang/apis.yaml or the BIOLANG_NFCORE_CATALOG_URL environment variable. Set GITHUB_TOKEN for higher GitHub API rate limits (5,000 req/hr instead of 60 req/hr).

Builtin Reference

Function Args Returns Description
nfcore_list sort_by?, limit? List<Record> List all pipelines, sorted by "stars" (default), "name", or "release"
nfcore_search query, limit? List<Record> Search pipelines by name/description/topic
nfcore_info name Record Detailed pipeline metadata from GitHub
nfcore_releases name List<Record> All releases with tag and date
nfcore_params name Record Parameter schema grouped by category

Practical Examples

Find and Compare Variant Calling Pipelines

# Find all variant-related pipelines and compare them
nfcore_search("variant")
  |> map(|p| {
    name: p.name,
    stars: p.stars,
    description: p.description,
    latest: p.latest_release
  })
  |> sort(.stars)
  |> reverse()
  |> print()

Inspect Pipeline Parameters Before Running

# Check what inputs sarek expects
let params = nfcore_params("sarek")

# List required parameters (those without defaults)
params
  |> values()
  |> flatten()
  |> filter(|p| p.default == nil)
  |> map(|p| { name: p.name, type: p.type, description: p.description })
  |> print()

Track Pipeline Releases

# Check release history for multiple pipelines
let pipelines = ["rnaseq", "sarek", "fetchngs", "taxprofiler"]

pipelines
  |> map(|name| {
    let releases = nfcore_releases(name)
    let latest = releases |> first()
    { pipeline: name, latest_tag: latest.tag, released: latest.published_at }
  })
  |> to_table()
  |> print()