Skip to content

bivvy init

Initialize Bivvy configuration for your project.

Usage

Terminal window
bivvy init
Terminal window
bivvy init --minimal
Terminal window
bivvy init --template=ruby
Terminal window
bivvy init --from=../other-project

Options

OptionDescription
--minimalGenerate config without prompts, using only auto-detected templates
--template <name>Start from a specific template or category (skips auto-detection). Accepts a template name (e.g., bundle-install) or a category (e.g., ruby) to include all templates in that category.
--from <path>Copy .bivvy/config.yml from another project directory into the current project
--forceOverwrite existing configuration

What It Does

  1. Scans your project for technologies
  2. Detects package managers and version managers
  3. Identifies potential conflicts
  4. Generates .bivvy/config.yml
  5. Updates .gitignore for local overrides
  6. Offers to run setup immediately (interactive mode only)

When running interactively, after generating the config Bivvy presents a “Run setup now?” picker with two options — No (n) (default) and Yes (y). Choosing Yes chains directly into bivvy run with every generated step forced. Choosing No (or pressing Enter) shows a hint to run bivvy run later.

Examples

Interactive setup:

Terminal window
bivvy init

Quick setup for CI:

Terminal window
bivvy init --minimal

Force overwrite existing config:

Terminal window
bivvy init --force

Start from the Ruby template:

Terminal window
bivvy init --template=bundle-install

Include all Ruby-category templates:

Terminal window
bivvy init --template=ruby

Clone config from a sibling project:

Terminal window
bivvy init --from=../other-project

Detection

Bivvy automatically detects technologies and maps them to built-in templates. The table below mirrors the project-type detection in src/detection/project.rs and reflects every marker file the detector inspects:

CategoryDetected viaTemplate
RubyGemfilebundle-install
Ruby (Rails)config/routes.rb, config/application.rbrails-db
Node.jspackage.json (template chosen by lockfile)yarn-install (yarn.lock), pnpm-install (pnpm-lock.yaml), bun-install (bun.lockb), npm-install (default)
Node.js (Next.js)next.config.js, next.config.mjs, next.config.tsnextjs-build
Node.js (Vite)vite.config.js, vite.config.ts, vite.config.mjsvite-build
Node.js (Remix)remix.config.js, remix.config.ts, app/root.tsxremix-build
Pythonpyproject.toml, requirements.txt, setup.pypoetry-install (poetry.lock), uv-sync (uv.lock), pip-install (default)
Python (Alembic)alembic.ini, alembic/env.pyalembic-migrate
Python (Django)manage.pydjango-migrate
RustCargo.tomlcargo-build
Rust (Diesel)diesel.tomldiesel-migrate
Gogo.modgo-mod-download
PHPcomposer.jsoncomposer-install
PHP (Laravel)artisanlaravel-setup
Kotlin / JVM (Gradle)build.gradle, build.gradle.ktsgradle-deps
Spring Bootsrc/main/resources/application.properties, src/main/resources/application.ymlspring-boot-build
Elixirmix.exsmix-deps-get
SwiftPackage.swiftswift-resolve
Terraformmain.tf, terraform.tf, versions.tfterraform-init
AWS CDKcdk.jsoncdk-synth
Java (Maven)pom.xmlmaven-resolve
.NET*.sln, *.csprojdotnet-restore
Dartpubspec.yaml (no platform dirs)dart-pub-get
Flutterpubspec.yaml + android/, ios/, web/, macos/, linux/, or windows/ directoryflutter-pub-get
Denodeno.json, deno.jsonc, deno.lockdeno-install
Database (Prisma)prisma/schema.prismaprisma-migrate
Containersdocker-compose.yml, docker-compose.yaml, compose.yml, compose.yamldocker-compose-up
Kubernetes (Helm)Chart.yamlhelm-deps
IaC (Pulumi)Pulumi.yamlpulumi-install
IaC (Ansible)ansible.cfg, playbook.yml, playbook.yaml, site.yml, site.yamlansible-install
Cross-cutting.env.example, .env.sample, .env.template (and no .env)env-copy
Cross-cutting.pre-commit-config.yamlpre-commit-install
Monoreponx.jsonnx-build
Monorepoturbo.jsonturbo-build
Monorepolerna.jsonlerna-bootstrap

Version-manager detection is layered separately by the package-manager detector and resolves system-wide to one of: mise-tools, asdf-tools, volta-setup, fnm-setup, nvm-node, rbenv-ruby, pyenv-python.

Enriched Output

The generated config includes commented-out template details so you can see what Bivvy will do and how to customize it. The first line is a yaml-language-server directive pointing at the schema Bivvy installs locally, so editors with the YAML language server (VS Code, Neovim) get completion and validation out of the box:

# yaml-language-server: $schema=/Users/you/.bivvy/schema.json
# Bivvy configuration for my-app
# Docs: https://bivvy.dev/configuration
#
# Override any template field per-step:
# steps:
# example:
# template: bundle-install
# env:
# BUNDLE_WITHOUT: "production"
#
# Add custom steps:
# steps:
# setup_db:
# title: "Set up database"
# command: "bin/rails db:setup"
# check:
# type: execution
# command: "bin/rails db:version"
# validation: success
#
# Create named workflows:
# workflows:
# ci:
# steps: [bundle-install, yarn-install]
# settings:
# defaults:
# output: quiet
app_name: "my-app"
settings:
defaults:
output: verbose # verbose | quiet | silent
steps:
bundle-install:
template: bundle-install
# command: bundle install
# check:
# type: execution
# command: "bundle check"
# validation: success
yarn-install:
template: yarn-install
# command: yarn install
# check:
# type: execution
# command: "yarn check --verify-tree"
# validation: success
workflows:
default:
steps: [bundle-install, yarn-install]

Conflicts

When conflicts are detected (e.g., multiple lock files), Bivvy will:

  1. Show a warning about the conflict
  2. Suggest a resolution
  3. Allow you to choose which to include