Skip to content

Introduction to Metis

Metis Logo

Development Status

Metis is under active development. The docs may lag behind the current implementation.

What is Metis?

Metis is a GA4GH WES 1.1.0 compliant Workflow Execution Service written in Rust. It provides a standardised HTTP API for submitting, monitoring, and cancelling workflow runs across any engine.

Design Principles

  • Decoupled API and engine — the HTTP layer never executes workflows. Submission and execution are separated by NATS.
  • Pluggable via trait — adding a new engine requires implementing a single Rust trait, nothing in the core API changes.
  • Config-driven — engine behaviour (command template, parameter validation, denied flags, workdir layout) is entirely controlled by engine.yaml. No code changes required for a new engine variant.
  • Spec compliant — follows GA4GH WES 1.1.0 with extensions for SSE streaming and log pagination.

Architecture Overview

Three decoupled layers:

LayerComponentRole
HTTPmetis-apiValidates requests, serves status/logs, handles cancellation
MessagingNATSAsync job queue — decouples submission from execution
ExecutionEngine RuntimeBuilds CLI, spawns process, captures output, tracks state

Supported Workflow Engines

EngineWorkflow TypeVersions
NextflowNFLDSL2
(extensible)anyvia trait

Any binary that can be invoked as a subprocess can be wrapped as a Metis engine — configure commandTemplate in engine.yaml and start metis-engine-generic.

Run States

Runs follow the WES state machine:

text
QUEUED → INITIALIZING → RUNNING → COMPLETE
                              ↘ EXECUTOR_ERROR
                              ↘ CANCELED
                              ↘ SYSTEM_ERROR

Next Steps

Proprietary software. All rights reserved.