Installer
Every flag, environment variable, exit code and file the one-line installers touch.
The complete contract of install.sh and install.ps1: options, exit codes, what they write,
what they never write, and how to audit them before running.
This page is the two scripts only. If you would rather your own package manager owned the install — npm, Homebrew, Docker, winget, Scoop or apt — see with a package manager.
Sources
| URL | Script |
|---|---|
https://sdods.com/install.sh | macOS and Linux (POSIX sh) |
https://sdods.com/install.ps1 | Windows (PowerShell 5.1 and 7) |
https://sdods.com/install.sh · install.ps1 | the same files, mirrored |
…/install.sh.sha256 · …/install.ps1.sha256 | checksums in sha256sum -c format |
Both are served as text/plain with Cache-Control: no-store, and both come from installer/ in the source tree — one source of truth, copied into the sites at build time.
Options
install.sh accepts --flag value and --flag=value. install.ps1 uses PowerShell parameters (-Flag value). Environment variables apply to both and are overridden by an explicit flag.
Prop
Type
HTTPS_PROXY, HTTP_PROXY, NO_PROXY and NO_COLOR are honoured. SDODS_REPO_URL overrides the clone source, which is useful behind an internal mirror.
Exit codes
| Code | Meaning |
|---|---|
| 0 | success (also --help, --version-check and a cancelled uninstall) |
| 1 | generic failure |
| 2 | usage error: unknown flag, missing value, invalid choice |
| 3 | unsupported platform (Windows under git-bash, BSD, unknown architecture) |
| 4 | missing prerequisite: git, curl, or the requested package manager |
| 5 | Node.js missing or older than 22 |
| 6 | download failure: clone, fetch or toolchain download |
| 7 | install failure: dependency install, or an incomplete checkout |
| 8 | permission problem: bin directory not writable, or running as root |
What it writes
| Path | Written when |
|---|---|
| package manager's global directory | default: the published @sdods/* packages |
$SDODS_HOME/app | only with --source git |
$SDODS_HOME/.bun | Bun was not already on PATH |
$SDODS_HOME/.fnm | --install-node and neither fnm nor nvm was present |
$BIN_DIR/sdods | source install (Windows: sdods.cmd and sdods.ps1) |
| shell profile or user PATH | only with --modify-path |
| Browser engine cache | unless --browsers none |
| the workspace you named | only with --workspace |
~/.claude.json, ~/.codex/config | only with --mcp, through sdods mcp install |
On the default path no shim is written: the global package provides the sdods command itself.
Re-running is safe: the package is upgraded in place (or, on a source install, the checkout is fetched and checked out again and the shim rewritten), and the PATH line is added only once.
Safety
- It refuses to run as root unless
SDODS_ALLOW_ROOT=1, so browsers and caches stay owned by you. --uninstallremoves only$SDODS_HOMEand the shim, and refuses paths such as$HOMEor/.- With no terminal available it will not guess an answer to a destructive prompt; pass
--yesexplicitly. - On a source install the clone is verified with
git rev-parse HEADand a check thatpackages/cliarrived. - Read it before you run it:
curl -fsSLO …/install.sh && sha256sum -c install.sh.sha256 && less install.sh.
Automation examples
curl -fsSL https://sdods.com/install.sh | sh -s -- \
--browsers chromium --bin-dir /usr/local/bin --yes
sdods --versionENV SDODS_HOME=/opt/sdods SDODS_BIN_DIR=/usr/local/bin \
SDODS_BROWSERS=chromium SDODS_YES=1 SDODS_ALLOW_ROOT=1
RUN curl -fsSL https://sdods.com/install.sh | sh& ([scriptblock]::Create((irm https://sdods.com/install.ps1))) -Yes -ModifyPath -Browsers chromiumNext steps
- Installation guide for the narrative version
- Tokens and keys: nothing is required to run tests
- Claude Code and Codex for the
--mcpflag