Bundle Installation Methods¶
Every practical way to install and distribute a multi-component software bundle — a product made of several parts (a database, a server, a CLI) that must end up working together on a user's machine. Each method here comes with how it works, an example, and honest pros & cons.
There is no single best method — there's a trade-off between shipping fast with low friction (script pipes, Docker) and trust, polish & discoverability (signed installers, OS package managers). Use this site to pick deliberately.
Compare all methods How to choose
⭐ Why major players lead with curl | sh and irm | iex¶
The one-liner pattern
The most common "Get started" command in modern developer tools is a single line that pipes a hosted install script into the shell. irm | iex is just the PowerShell-native equivalent of curl | sh — Invoke-RestMethod downloads, Invoke-Expression runs — and PowerShell ships in Windows, so it needs nothing else.
Shipped this way by Claude Code, OpenAI Codex, rustup, Homebrew, Deno, Bun, uv, Ollama, nvm, Tailscale, k3s, Docker and many more.
| Tool | Get-started command (abridged) |
|---|---|
| Claude Code | curl -fsSL https://claude.ai/install.sh \| bash · irm https://claude.ai/install.ps1 \| iex |
| OpenAI Codex CLI | one-line script / npm bootstrap — same pattern |
| Rust (rustup) | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \| sh |
| Homebrew | /bin/bash -c "$(curl -fsSL …/install.sh)" |
| Deno | curl -fsSL https://deno.land/install.sh \| sh |
| Bun | curl -fsSL https://bun.sh/install \| bash |
| uv (Astral) | curl -LsSf https://astral.sh/uv/install.sh \| sh |
| Ollama | curl -fsSL https://ollama.com/install.sh \| sh |
Why they converge on it: one line, zero prerequisites · cross-platform parity · adaptive to OS/arch · does the whole job (PATH, services, config, multi-component startup) · ships & updates instantly · trivial in CI. The honest trade-off is trust — the user runs code they haven't read — which the verified variant and security guide address.
Explore¶
-
Start fast (MVP)
A script pipe that drives Docker Compose — zero registry, cross-platform, full setup logic.
-
Harden it
Download → verify → run with a pinned release + SHA256, plus the security checklist.
-
Windows users
-
macOS / Linux users
Homebrew, native deb/rpm, Snap/Flatpak.
-
Language ecosystems
-
Cloud / Kubernetes
The 20 methods¶
| # | Method | Platforms | Best stage |
|---|---|---|---|
| 1 | Script pipe (curl\|sh, irm\|iex) |
All | MVP |
| 2 | Download → verify → run | All | MVP+ |
| 3 | Homebrew | macOS, Linux | Growth → Mature |
| 4 | Winget | Windows | Mature |
| 5 | Scoop | Windows | Growth |
| 6 | Chocolatey | Windows | Growth → Mature |
| 7 | Linux native (deb/rpm) | Linux | Mature |
| 8 | Snap / Flatpak | Linux | Growth → Mature |
| 9 | pip / pipx / uvx | All | MVP → Growth |
| 10 | npm / npx | All | MVP → Growth |
| 11 | cargo / go / gem | All | Niche |
| 12 | Docker run / pull | All | MVP |
| 13 | Docker Compose | All | MVP (multi) |
| 14 | Docker socket bootstrap | All | CI/demo only |
| 15 | Helm / Kubernetes | K8s | Mature (cloud) |
| 16 | Native installers | Per-OS | Mature |
| 17 | GitHub Releases (binaries) | All | MVP → Growth |
| 18 | Version managers (asdf/mise/proto) | All | Niche (devs) |
| 19 | IaC & cloud marketplace | Cloud | Mature (cloud) |
| 20 | Source build | All | Fallback |
See the full scored Comparison matrix, then the Decision guide.
Case study
This catalog grew out of bundling Exasol components (Nano / Personal + MCP Server + JSON Tables) into a one-command install. See why curl | sh + Docker Compose was chosen.