Skip to content

Bootstrap from a repository ​

mise bootstrap can clone a repository and run from the configuration in it. Use --from for a bootstrap project that lives apart from your global config, and --adopt to make a repository your global mise config or to restore a setup repository of tracked dotfiles.

Choose --from or --adopt ​

Repository holdsCommandWhere the repository goesAfterwards
A bootstrap project: mise.toml and the files it usesmise bootstrap --from <url>$MISE_DATA_DIR/bootstrap-repo, or --from-dirRerun the same command to apply the project again
Global mise config: config.toml, conf.d/, tasks/mise bootstrap --adopt <url>Your global config directory, ~/.config/miseEvery later mise command reads it as your global config
A setup repository created with mise dot origin setmise bootstrap --adopt <url>mise's history store; files go to their pathsLater changes arrive through the history watcher or mise dot pull

--adopt detects a setup repository by the .mise-history/format.toml file that mise dot origin set writes, so the same flag covers both kinds. --from and --adopt cannot be combined.

Either way, the bootstrap runs from the repository's configuration, and mise trusts that configuration for this run. Review the repository before you run the command. Add --dry-run to preview, and -E <env> to select a config environment, such as -E work for mise.work.toml in a bootstrap project or config.work.toml in global config.

Bootstrap project (--from) ​

A bootstrap project is a repository with a mise.toml and the source files it refers to, such as dotfiles and templates. mise clones it and runs mise bootstrap from the checkout:

sh
mise bootstrap --from https://github.com/you/workstation.git
mise -E work bootstrap --from git@github.com:you/workstation.git

The checkout goes to $MISE_DATA_DIR/bootstrap-repo, normally ~/.local/share/mise/bootstrap-repo. Use --from-dir <DIR> to choose another directory.

To check out a branch, tag, or commit instead of the default branch, add ?ref= to the URL. A git:: prefix is accepted but not needed:

sh
mise bootstrap --from 'https://github.com/you/workstation.git?ref=v1'

When the checkout already exists:

  • Its origin must be the URL you pass. mise uses the checkout as it is.
  • --update pulls new commits first, and accepts only a fast-forward.
  • With ?ref=, --update looks the ref up on the remote again. A branch is checked out and fast-forwarded, and a branch wins over a tag with the same name. A tag moves to the commit it now names. A branch or tag that no longer exists on the remote is an error.

--dry-run with no checkout yet prints the clone command and stops, because there is no configuration to preview until the checkout exists.

Global configuration (--adopt) ​

Use --adopt when the repository is your global mise config, with files such as config.toml, config.work.toml, conf.d/, and tasks/:

sh
mise bootstrap --adopt you/mise-config

OWNER/REPO expands to https://github.com/OWNER/REPO.git. HTTPS and SSH URLs and local paths work too. mise clones the repository's default branch into $MISE_CONFIG_DIR, normally ~/.config/mise, and runs bootstrap from it. The files stay in place, so every later mise command reads them as your global config. If you set $MISE_GLOBAL_CONFIG_FILE, mise clones into that file's directory and loads that file.

The destination must be missing, empty, or already a Git checkout whose origin is the repository you name. Move an existing ~/.config/mise aside before adopting into it. With an existing checkout, --update fast-forwards it before the bootstrap runs. The checkout is an ordinary Git repository: commit and pull in it as you would anywhere else.

Setup repository (--adopt) ​

A setup repository holds the history of your tracked dotfiles, shared with mise dot origin set. Adopting one restores your tracked files and runs bootstrap from the restored configuration:

sh
mise bootstrap --adopt you/setup

mise does the following:

  1. Fetches the repository's default branch into its own history store.
  2. Restores each tracked file to its path on this machine.
  3. Remembers the repository as the origin for later synchronization.
  4. Runs bootstrap from the restored mise configuration.

mise does not clone a setup repository into $MISE_CONFIG_DIR. If that directory is already a Git checkout, though, its origin must be the repository you adopt. Setup repositories always come from their latest commit, so --update only refreshes package metadata and [bootstrap.repos] in the bootstrap that follows.

Track the mise configuration and any template sources on the first machine, so bootstrap can recreate tools and services and render templates here. If a file on this machine differs from the shared version, adoption pauses before it writes anything or runs bootstrap, so you can decide each file. --dry-run shows the files it would write and those held for a decision. --replace-history discards unrelated local history while adopting. It does not resolve files that differ; add --take-remote-all to take the repository's version of each.

Set up a machine walks through adopting a setup repository, including files that already exist. For synchronization after that, see Sync across machines.

On other machines ​

To adopt a repository on another machine over SSH, see Remote hosts.

MIT LicenseCopyright © 2026jdx.dev