Skip to content

Templates

Templates define reusable setup steps. Bivvy includes 45+ built-in templates covering system package managers, version managers, language-specific dependency tools, database migrations, containers, infrastructure as code, and monorepo tools. You can also create custom templates.

Using Templates

Reference a template in your step configuration:

steps:
deps:
template: yarn

When you run bivvy init, templates are auto-detected based on files in your project (e.g., Gemfile triggers the bundler template, package-lock.json triggers npm).

Available Built-in Templates

CategoryTemplates
Systembrew, apt, yum, pacman
Windowschocolatey, scoop
Version managersmise, asdf, volta, nvm, fnm, rbenv, pyenv
Rubybundler, rails-db
Node.jsyarn, npm, pnpm, bun, next, vite, remix
Pythonpip, poetry, uv, django, alembic
Rustcargo, diesel
Gogo
Swiftswift
Javamaven, spring-boot
.NETdotnet
Dart / Flutterdart, flutter
Denodeno
Database migrationsrails-db, prisma, diesel, alembic
Containersdocker-compose, helm
Infrastructure as Codepulumi, ansible
Cross-cuttingenv-copy, pre-commit
Monorepo / Workspacenx, turborepo, lerna

See Built-in Templates for full details on each template.

Template Resolution Order

Templates are resolved in this order (first match wins):

  1. Project templates - .bivvy/templates/steps/
  2. User templates - ~/.bivvy/templates/steps/
  3. Remote templates - Fetched from configured sources
  4. Built-in templates - Bundled with Bivvy

Overriding Template Values

Override any template field in your step config:

steps:
deps:
template: yarn
command: "yarn install --frozen-lockfile" # override default command

Template Inputs

Some templates accept inputs for customization:

steps:
db:
template: postgres
inputs:
database_name: myapp_dev
port: 5433

Creating Custom Templates

Create .bivvy/templates/steps/<name>.yml:

name: my-template
description: "My custom setup step"
category: custom
inputs:
env:
description: "Environment name"
type: string
default: development
step:
title: "Run my setup"
command: "my-setup --env ${env}"
completed_check:
type: file_exists
path: ".setup-complete"

Next Steps