Installation
One command installs both binaries into ~/.es-runtime/bin, checksum-verified: esrun, the server runtime, and esdev, the development toolchain.
Install
curl -fsSL https://esrun.opentechf.org/install.sh | bashirm https://esrun.opentechf.org/install.ps1 | iexPrefer to build from source? See the README.
Just one of them
A server or CI image has no use for the development binary — and esdev is not a deployment target.
# Linux / macOS curl -fsSL https://esrun.opentechf.org/install.sh | bash -s -- --only=esrun curl -fsSL https://esrun.opentechf.org/install.sh | bash -s -- --only=esdev
# Windows (PowerShell) — `irm | iex` cannot pass arguments, so this is an env var. $env:ES_RUNTIME_ONLY = 'esrun'; irm https://esrun.opentechf.org/install.ps1 | iex
Platforms
Every release ships prebuilt binaries for six targets. How far each one has been exercised differs:
| Target | Tested on |
|---|---|
| Linux x64 | Real machines and CI |
| Windows x64 | Real machines and CI |
| macOS arm64 (Apple silicon) | CI only, not yet on a real machine |
| macOS x64 (Intel) | Built in CI, not tested |
| Linux arm64 | Built in CI (cross-compiled), not tested |
| Windows arm64 | Built in CI, not tested |
| FreeBSD | Upcoming, no binary yet |
ES-Runtime targets modern servers. On Linux it needs glibc 2.39 or newer: Ubuntu 24.04, Debian 13 and later. Older distributions, and musl-based ones such as Alpine, are not supported; the installer says so before downloading.
A problem on any of them is worth reporting.
Pinning a version
Each binary is released under its own tag and is pinned independently. Latest:
- esrun 0.45.0
- esdev 0.24.0
ESRUN_VERSION=0.45.0 ESDEV_VERSION=0.24.0 curl -fsSL https://esrun.opentechf.org/install.sh | bashES_RUNTIME_INSTALL overrides the install prefix.
Upgrade
On a development machine, esdev upgrade updates esdev and the esrun installed beside it, each to its own newest release:
esdev upgrade # both esdev upgrade --only=esrun # just esrun (or --only=esdev) esdev upgrade --dry-run # say what would change, change nothing
The two are versioned and tagged separately, so each resolves its own release. A binary already current says so and changes nothing. An esrun elsewhere on PATH is left alone.
On a server, or anywhere only esrun is installed, upgrade by re-running the installer with the version you want (Pinning a version), as a deployment's image or install step does:
# Linux / macOS curl -fsSL https://esrun.opentechf.org/install.sh | ESRUN_VERSION=<version> bash -s -- --only=esrun
# Windows (PowerShell) $env:ESRUN_VERSION = '<version>'; $env:ES_RUNTIME_ONLY = 'esrun'; irm https://esrun.opentechf.org/install.ps1 | iex
esrun does not replace itself.
The archive is checked against the release's checksums.txt before anything is replaced. A release without one, or an archive whose SHA-256 does not match it, is refused and the installed binary is left as it was. The new binary is written beside the old one and renamed into place, so an interrupted upgrade never leaves half a binary.
A download the network interrupts (a dropped connection, a stalled transfer, or a server error) is tried again, up to three attempts in all. On a terminal the archive's download shows a progress bar.
Uninstall
Delete the install directory and remove it from your PATH.
# Linux / macOS — remove the install dir, then drop the PATH line from your shell profile. rm -rf "$HOME/.es-runtime" # fish keeps its PATH entry in a file of its own. rm -f "${XDG_CONFIG_HOME:-$HOME/.config}/fish/conf.d/es-runtime.fish"
# Windows (PowerShell) — remove the install dir, then remove it from your user PATH. Remove-Item -Recurse -Force "$HOME\.es-runtime"
Installs used to land in ~/.esrun/bin. The installer now uses ~/.es-runtime/bin and leaves the old directory alone — it will not delete binaries it did not place. Remove ~/.esrun and its PATH entry, or a stale esrun there will shadow the new one.