Developers

For Developers

Write a YAML recipe, push it through the Hub CI, and your tool ends up signed in registry.biochef.app and runnable from the BioChef web app.

Quickstarts

Three ways in

Pick a path and get to a running BioChef in under five minutes.

Step 01 · Author

Write a new recipe

Author a YAML recipe in your own repo. The Hub workflow validates, signs, and publishes it for you.

  1. 1 Fork biochef-recipes and create recipes/<tool>/biochef.yaml.
  2. 2 Run hub validate and add tiny golden fixtures under tests/.
  3. 3 Open a PR. The reusable Hub workflow runs validate → build → SBOM → cosign → publish.
ieeta-pt/biochef-recipes

Step 02 · Run

Run the BioChef app locally

Clone the SPA, install deps, and serve it with the dev server. No backend required.

  1. 1 git clone https://github.com/ieeta-pt/Biochef and npm install.
  2. 2 (Optional) install Emscripten 3.1.65 and run npm run build-wasm to rebuild the SPA's bundled GTO modules from source. Hub CI uses Emscripten 4.0.18 for new recipes.
  3. 3 npm start and open http://localhost:8082.
ieeta-pt/Biochef

Step 03 · Inspect

Pull a signed bundle

Tools live in the BioChef Registry as content-addressable OCI bundles. The web app fetches them by digest at runtime; you can pull and verify them locally with the Hub CLI or ORAS.

  1. 1 Resolve a tool by digest in the signed index.json.
  2. 2 Pull the OCI bundle (bundle.json + WASM/JS layers + SBOM) with the Hub CLI or ORAS.
  3. 3 Verify the cosign signature before loading the tool.
Hub CLI on GitHub

Snippets

What the code looks like

A recipe in YAML, the Hub CLI run, and a saved workflow.

apiVersion: v1
id: app.biochef.wgsim
name: wgsim
description: Simulate NGS reads from a reference FASTA.
version: 0.3.1-bc.1
homepage: https://github.com/lh3/wgsim
license:
  spdx: MIT
  files: [LICENSE]
source:
  repo: https://github.com/lh3/wgsim
  version: "0.3.1"
status: experimental
build:
  wasm:
    strategy: emscripten
runtime:
  modes: [wasm, remote]
operations:
  - id: wgsim.simulate
    name: Simulate (wgsim)
    bin: wgsim
    description: Simulate paired-end reads
    io:
      inputs:
        - { name: ref, types: [FASTA], mode: file }
      outputs:
        - { name: out1, types: [FASTQ], mode: file }
        - { name: out2, types: [FASTQ], mode: file }
    parameters:
      - { name: num_pairs, type: integer, flag: -N }
      - { name: seed, type: integer, flag: -S }
yaml32 lines