Skip to content

mise bootstrap remote ​

  • Usage: mise bootstrap remote [FLAGS] [TARGET]…
  • Effect: destructive — may delete or irreversibly overwrite
  • Source code: src/cli/bootstrap.rs

Bootstrap one or more machines over SSH

Packs a local project directory, copies it to each target, stages mise there, and runs mise bootstrap. The directory is --source. Without it, an inventory host uses its own source, then the one in [bootstrap.remote], then the current directory; a --host target uses the current directory. Pick targets by name, --tag, or --all from [bootstrap.remote.hosts], or give any SSH destination with --host.

Targets need a POSIX shell plus tar, mktemp, cksum, and uname; Windows targets are not supported. --dry-run still connects, uploads, and inspects each target, but changes nothing there. With --adopt, each target adopts the repository as mise bootstrap --adopt does, instead of receiving a project directory.

The --github-relay-* flags let targets read private GitHub repositories through this machine's credentials for the length of the run, without copying a token to them. See https://mise.jdx.dev/bootstrap/github-relay.html.

Arguments ​

  • [TARGET]… — Inventory host names from [bootstrap.remote.hosts]

Flags ​

  • --adopt <GIT_URL|OWNER/REPO> — Adopt global configuration or shared dotfile history on each target

  • --all — Select every inventory host

  • --bootstrap-command <COMMAND> — Shell command, run on each target, that installs mise and puts it on PATH

  • --connect-timeout <SECONDS> — SSH connection timeout in seconds

    Default: 10

  • --copy-link <PATH> — Copy the target of this source-relative symbolic link instead of the link; repeat for more

  • --copy-links — Copy the targets of every symbolic link in the source instead of the links

  • --exclude <PATTERN> — Another pattern to leave out of the archive; repeat for more

  • --fail-fast — Stop after the first failed target

  • --force-dotfiles — Overwrite files on each target that conflict with whole-file dotfile entries

  • --host <[USER@]HOST> — SSH destination that is not in the inventory ([user@]host); repeat for more

  • -i --identity-file <PATH> — SSH identity file, overriding the inventory and SSH config

  • -n --dry-run — Show what would change on each target without changing it

    It still connects to each target, uploads the project, stages mise, and inspects the target.

  • --install-mise[=PATH] — Install the provisioned mise on each host instead of only staging it

    Defaults to ~/.local/bin/mise; pass --install-mise=<PATH> for another path.

  • --keep-staging — Keep the remote staging directory for debugging

  • --mise-bin <PATH> — Upload this local mise executable, for platforms without an official release binary

  • --no-install-mise — Do not install mise on the host, even when the selected hosts configure it

  • --only <PART> — Run only these parts on each target

    Repeat the flag or separate parts with commas. Cannot be combined with --skip.

    Choices: plugins, packages, accounts, files, services, firewall, compose, repos, dotfiles, mise-shell-activate, macos-defaults, macos-launchd-agents, linux-systemd-units, user, tools, task, final-hook

  • --port <PORT> — SSH port, overriding the inventory and SSH config

  • --prompt-secrets — Prompt securely for missing secret inputs on the remote host

  • --remote-env <ENV> — Config environments to load on each target; repeat or separate with commas (for example, ci,dotfiles)

  • --remote-mise <COMMAND> — Existing mise executable name or path; relative paths use the staged project

  • --skip <PART> — Skip these parts on each target

    Repeat the flag or separate parts with commas. Cannot be combined with --only.

    Choices: plugins, packages, accounts, files, services, firewall, compose, repos, dotfiles, mise-shell-activate, macos-defaults, macos-launchd-agents, linux-systemd-units, user, tools, task, final-hook

  • --source <DIR> — Local directory to archive and send to each target

  • --ssh-option <OPTION> — OpenSSH -o option; repeat for multiple options

  • --tag <TAG> — Select configured hosts with this tag; repeat to match any tag

  • --update — Refresh package metadata and update repositories on each target

  • -y --yes — Skip confirmation prompts on each target

  • --github-relay-read-only — Borrow read-only GitHub access for this run (Linux and macOS only)

    Needs exactly one of --github-relay-repo or --github-relay-all-repos.

  • --github-relay-repo <OWNER/REPO> — Repository the targets may read through the relay; repeat for more (needs --github-relay-read-only)

  • --github-relay-all-repos — Let targets read every repository your local credentials can read (needs --github-relay-read-only)

  • --github-relay-log-requests — Log sanitized relay requests on local stderr (needs --github-relay-read-only)

  • --github-relay-no-log-requests — Turn off request logging, overriding the github_relay settings (needs --github-relay-read-only)

  • --github-relay-log-format <FORMAT> — Relay log and summary format, text or jsonl (needs --github-relay-read-only)

  • --github-relay-max-duration <DURATION> — End borrowed access after a duration such as 1h; 0s lasts the whole run (needs --github-relay-read-only)

  • -h --help — Print help

Examples ​

Preview a run on a host that is not in the inventory

mise bootstrap remote --host devbox --dry-run

Bootstrap one inventory host

mise bootstrap remote cache

Bootstrap every inventory host tagged canary, without prompts

mise bootstrap remote --tag canary --yes

Bootstrap every inventory host and stop at the first failure

mise bootstrap remote --all --fail-fast

Leave mise installed on the host after the run

mise bootstrap remote --host [email protected] -i ~/.ssh/mise-cache --install-mise

Let the host read one private GitHub repository during the run

mise bootstrap remote --host devbox --github-relay-read-only --github-relay-repo example/setup
MIT LicenseCopyright © 2026jdx.dev