DOC_INDEX
THEME
From Just
Translate a justfile of recipes into an OrchStep workflow - recipes, dependencies, variables, parameters, and private recipes.
If you use just as a command runner - a justfile full of recipes like
build, test, deploy - OrchStep is a direct, friendlier replacement. You
keep the same mental model (named commands that run shell, with variables and
dependencies) and gain typed outputs, parallel blocks, and shareable modules.
The 30-second version
just -> orchstep run # default task
just build -> orchstep run build
just deploy production 2.1.0 -> orchstep run deploy --var environment=production --var version=2.1.0
just --list -> orchstep list-tasksHow the concepts map
| Just | OrchStep |
|---|---|
A recipe (build:) | A task (build: under tasks:) |
| A recipe body line | A step: func: shell with do: |
Recipe deps (ci: test build) | Steps that call task: test / task: build |
x := "y" assignment | defaults: |
{{x}} interpolation | {{ vars.x }} |
Recipe params (deploy env=...) | Named --var + defaults: |
[private] recipe | An internal _-prefixed task |
Side by side
JUSTFILE
version := "1.0.0"
environment := "staging"
build:
echo "building v{{version}}"
test:
echo "running tests"
deploy env=environment ver=version:
echo "deploying v{{ver}} to {{env}}"
ci: test buildORCHSTEP.YML
name: app
desc: Build, test, and deploy the app
defaults:
version: "1.0.0"
environment: "staging"
tasks:
build:
steps:
- name: compile
func: shell
do: echo "building v{{ vars.version }}"
test:
steps:
- name: unit
func: shell
do: echo "running tests"
deploy:
steps:
- name: ship
func: shell
do: echo "deploying v{{ vars.version }} to {{ vars.environment }}"
ci: # recipe deps become task calls
steps:
- name: run_test
task: test
- name: run_build
task: buildRun it
orchstep run build
orchstep run deploy --var environment=production --var version=2.1.0$ orchstep run deploy --var environment=production --var version=2.1.0
$ echo "deploying v2.1.0 to production"
deploying v2.1.0 to production
Result: successJust's positional recipe arguments (just deploy production 2.1.0) become the
explicit, order-free named --var environment=production --var version=2.1.0.
List everything with orchstep list-tasks.
Gotchas worth knowing
{{x}}becomes{{ vars.x }}. Same braces you already know - just add thevars.prefix so OrchStep knows where to look the value up.- Positional to named. Just parameters are positional at the call site;
OrchStep uses order-free named
--var, so you never have to remember which argument came first. [private]becomes a leading underscore. A[private]recipe maps to a task named with a leading_- it stays callable internally but is kept out oforchstep list-tasksand the menu.envis reserved. Don't name a variableenv- that namespace is for environment variables ({{ env.PATH }}). Useenvironment(the loader will stop you with a clear error otherwise).
What you gain
orchstep run --dry-runpreviews the whole chain (includingci->test/build).- The same file runs on Windows without
justinstalled. - Steps pass typed outputs instead of echoing strings.
- Shared recipes can become versioned modules.
Where to go next
- Composing Tasks - how
task:calls pass parameters. - Variables and Outputs - the
{{ vars.x }}namespace in depth. - CLI Reference - every flag for
orchstep run.