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.
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 repository — 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 |
|---|---|
$SDODS_HOME/app | always (source install) |
$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 |
Re-running is safe: the checkout is fetched and checked out again, the shim is 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. - 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