Skip to main content
The canonical schema lives at: https://nika.sh/schema/workflow.json It’s a standard JSON Schema draft 2020-12 document. Your editor’s YAML LSP can consume it directly.

The mark

nika: <name>, the first line of every workflow. The key nika declares “this is a Nika document”, the value is the workflow’s own kebab-case identifier — there is no version to pin and no separate schema: or apiVersion: field (the engine’s internal canonical URI stays https://nika.sh/spec/v1 for RDF / conformance tooling, but the author never types a URL). A tasks: key makes the document a workflow; the project file nika.yaml (no tasks:) names the project (nika: my-project), not a schema tag.

Point your editor

Add the LSP modeline at the top of any .nika so your editor’s YAML language server consumes the JSON Schema directly:
the modeline · paste at the top of any workflow
See editor setup for per-IDE instructions.

Local validation

Versioning policy

  • The envelope carries no version marker — the mark is the name.
  • Minor additions (a new optional field, a new builtin) are additive.
  • A grammar change before 1.0 ships with its migration (nika check --fix) and a refusal that names the move (the pre-1.0 stability contract); after engine 1.0.0 the grammar is additive only.
  • Anti-pattern: nika: v1 + workflow: { id } — the previous envelope (through 0.108); nika check --fix moves the id onto nika:.