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: yarnWhen 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
| Category | Templates |
|---|---|
| System | brew, apt, yum, pacman |
| Windows | chocolatey, scoop |
| Version managers | mise, asdf, volta, nvm, fnm, rbenv, pyenv |
| Ruby | bundler, rails-db |
| Node.js | yarn, npm, pnpm, bun, next, vite, remix |
| Python | pip, poetry, uv, django, alembic |
| Rust | cargo, diesel |
| Go | go |
| Swift | swift |
| Java | maven, spring-boot |
| .NET | dotnet |
| Dart / Flutter | dart, flutter |
| Deno | deno |
| Database migrations | rails-db, prisma, diesel, alembic |
| Containers | docker-compose, helm |
| Infrastructure as Code | pulumi, ansible |
| Cross-cutting | env-copy, pre-commit |
| Monorepo / Workspace | nx, turborepo, lerna |
See Built-in Templates for full details on each template.
Template Resolution Order
Templates are resolved in this order (first match wins):
- Project templates -
.bivvy/templates/steps/ - User templates -
~/.bivvy/templates/steps/ - Remote templates - Fetched from configured sources
- 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 commandTemplate Inputs
Some templates accept inputs for customization:
steps: db: template: postgres inputs: database_name: myapp_dev port: 5433Creating Custom Templates
Create .bivvy/templates/steps/<name>.yml:
name: my-templatedescription: "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"