# Install, platforms and updates

> Install an OpenEng engine with one command, see which platforms each engine supports, check a download's SHA-256 checksum, and learn how engines update themselves and how to uninstall them.

The published OpenEng engines (Terminal, Kubernetes, Data and the AI engine) install with one command
from openeng.app. The script picks the binary for your operating system and CPU, checks its SHA-256
checksum when it can, installs it to `~/.local/bin`, and puts that folder on your `PATH`. The app
engines then keep themselves up to date; the AI engine has no release feed yet, so re-run its
installer to update. The Git and Chat engines aren't published yet.

## Engines and installers

| Engine | Binary | Used by | Status |
| --- | --- | --- | --- |
| [Terminal](terminal.md) | `openeng-terminal` | terminal.openeng.app | Published |
| [Kubernetes](kubernetes.md) | `openeng-kubernetes` | k8s.openeng.app | Published |
| [Data](data.md) | `openeng-data` | data.openeng.app | Published |
| [Git](git.md) | `openeng-git` | git.openeng.app | Not published yet |
| [Chat](chat.md) | `openeng-chat` | chat.openeng.app | Not published yet |
| [OpenEng AI](ai.md) | `openeng` | app.openeng.app, the Web Console | Published for Linux x86_64. Starting it requires an active Pro plan. |

**Terminal**

```bash
curl -fsSL https://openeng.app/engine/terminal/install.sh | bash
```

**Kubernetes**

```bash
curl -fsSL https://openeng.app/engine/kubernetes/install.sh | bash
```

**Data**

```bash
curl -fsSL https://openeng.app/engine/data/install.sh | bash
```

**OpenEng AI**

```bash
curl -fsSL https://openeng.app/engine/install.sh | bash
```

The same commands are on [openeng.app/download](https://openeng.app/download).

> **Note:** The Git and Chat web apps are live, but their engines haven't been published yet. Their
> installer scripts exist, but they stop with `no git engine binary published for <os>/<arch> yet`
> (or `chat`), and nothing is installed.

## Platforms

The binaries published on openeng.app as of September 25, 2026:

| Engine | Linux x86_64 | Linux ARM64 | macOS (Apple silicon and Intel) | Windows |
| --- | --- | --- | --- | --- |
| Terminal | ✓ 0.0.4 | — | ✓ 0.0.3 | Through WSL |
| Kubernetes | ✓ 0.0.5 | ✓ 0.0.5 | ✓ 0.0.4 | Through WSL |
| Data | ✓ 0.0.4 | — | ✓ 0.0.3 | Through WSL |
| Git, Chat | — | — | — | — |
| OpenEng AI (`openeng`) | ✓ | — | — | Through WSL |

- **Linux** builds are the current releases, from September 19, 2026.
- **macOS** builds are the previous releases; the release notes say the new macOS builds follow.
  Each engine updates itself when a newer build for your platform is published.
- **Windows** has no native builds. Run the Linux installer inside WSL, for example:

  ```bash
  wsl bash -c 'curl -fsSL https://openeng.app/engine/terminal/install.sh | bash'
  ```

  Each engine also has a PowerShell script, `install.ps1`, but it only prints a WSL command like this one,
  because there is no Windows binary to install. The bash installer refuses to run in Git Bash,
  MSYS or Cygwin (`Windows shell detected`).

On a platform without a binary, the installer stops with
`no <app> engine binary published for <os>/<arch> yet` and installs nothing.

**The AI engine also needs a sandbox for its built-in local models.** `openeng` runs its built-in
model weights only inside a sandbox. On Linux, including WSL, that needs a working systemd user session or bubblewrap
with unprivileged user namespaces; containers and CI runners often have neither. Without one, the
engine starts but refuses the built-in local models; hosted, external-CLI and Ollama (catalog) models
still work
([Local models need a sandbox](engine.md#local-model-sandbox)).

## What the installer does

1. **Detects your platform.** It reads the OS (Linux or macOS) and the CPU (`x86_64`/`amd64`, or
   `arm64`/`aarch64`).
2. **Downloads the binary** over HTTPS: `openeng-<app>-<os>-<arch>` from
   `https://openeng.app/engine/<app>/bin/`, or `openeng-<os>-<arch>` from
   `https://openeng.app/engine/bin/` for the AI engine. It rejects anything that isn't a binary,
   such as a web page returned in its place.
3. **Checks the SHA-256 checksum** against the `.sha256` file published next to the binary, when it
   can fetch that file and finds `sha256sum` or `shasum`; it prints `checksum verified` when it did.
   On a mismatch it deletes the download and stops. If it can't fetch the checksum or finds no hash
   tool, it installs the binary without checking it and doesn't warn you, so if you don't see
   `checksum verified`, [check the download yourself](#verify-a-download).
4. **Runs the binary once** with `--help` to make sure it works on this machine. On macOS it also
   clears the quarantine flag, because the beta engines are not code-signed.
5. **Installs it** as `~/.local/bin/openeng-<app>` (the AI engine is `~/.local/bin/openeng`).
6. **Updates your `PATH`** if that folder isn't on it: it adds an `export PATH=…` line to
   whichever of `~/.bashrc`, `~/.zshrc` and `~/.profile` exist, and asks you to open a new terminal.
7. **Creates `~/.openeng`**, the folder every OpenEng engine keeps its files in.

The AI installer then downloads the default chat model with `openeng pull chat`, which is a few GB.
Set `OPENENG_NO_MODELS=1` to skip it; the engine downloads the models a config needs when it starts
with that config.

### Installer options

Set these in the environment of the `bash` that runs the script:

- `OPENENG_BIN_DIR`: where the binary is installed. Default: `~/.local/bin`.
- `OPENENG_TERMINAL_URL`, `OPENENG_KUBERNETES_URL`, `OPENENG_DATA_URL`: where an app installer
  downloads binaries from. Default: `https://openeng.app/engine/<app>/bin`.
- `OPENENG_ENGINE_URL`: where the AI installer downloads the binary from. Default:
  `https://openeng.app/engine/bin`.
- `OPENENG_NO_MODELS=1`: AI installer only; skips the default model download.

```bash
curl -fsSL https://openeng.app/engine/terminal/install.sh | OPENENG_BIN_DIR="$HOME/bin" bash
```

## Check a download yourself

Every binary has a checksum file at the same URL plus `.sha256`. To check a binary by hand:

```bash
curl -fsSLO https://openeng.app/engine/terminal/bin/openeng-terminal-linux-x86_64
curl -fsSL https://openeng.app/engine/terminal/bin/openeng-terminal-linux-x86_64.sha256
sha256sum openeng-terminal-linux-x86_64    # on macOS: shasum -a 256 openeng-terminal-linux-x86_64
```

The hash that `sha256sum` prints must equal the one in the `.sha256` file. The checksum confirms the
download matches the file openeng.app serves. It isn't a signature: the beta engines aren't
code-signed, and the checksum comes from the same place as the binary. For an app engine's newest
build, the release record on releases.openeng.app lists the same checksum from a separate site
([The release feed](catalogs.md#release-feed)).

## Start the engine

**Engineering apps.** Open the app in your browser and sign in. The app shows a start command with a
one-time key, for example:

```bash
openeng-terminal serve --oauth=<one-time key>
```

Run it, and the app connects on its own ([walkthrough](getting-started.md#start-and-connect)). The
Terminal installer's closing hint leaves out the key. Without one, the engine prints
`cannot start: the engine requires --oauth=<one-time key> (copy it from the Connect screen)` and
exits.

**OpenEng AI.** Start the engine with your OpenEng key, an API key you create in the Console under
Deploy → API keys:

```bash
openeng serve --key=<your OpenEng key>
# or
OPENENG_KEY=<your OpenEng key> openeng serve
```

The engine registers the key with the OpenEng API, which requires an active Pro plan. Pro launches in
Q4 2026 and can't be purchased yet ([Plans & billing](account.md)). As of September 25, 2026 the
OpenEng AI services the engine registers with aren't live yet, on any plan ([status](ai.md)). Without a key, the engine prints
`cannot start: no OpenEng key (--key=<key> or OPENENG_KEY). Generate one in the Console (Pro required).`
The [OpenEng AI quickstart](ai-getting-started.md) covers the rest, and [the engine
reference](engine.md#start) lists every command and flag.

## Updates

### Engineering app engines

For Terminal, Kubernetes and Data, updates are automatic and can't be turned off:

- **At every start**, before it signs in, the engine asks
  [releases.openeng.app](https://releases.openeng.app) for the latest release for its platform. If
  there's a newer one, it downloads it, checks its SHA-256 checksum (no valid checksum, no install),
  confirms the new binary reports the expected version, swaps it in and restarts into it. That start
  already runs the new version.
- **While it runs**, the engine checks again every 30 minutes. A newer version is downloaded,
  checked and staged without interrupting you. Terminal, Kubernetes and Data then show a banner,
  "Engine update … ready — restart the engine to apply it", with a **Restart engine** button that
  restarts the engine into the new version; the app reconnects on its own. Otherwise the update
  applies the next time you start the engine. The first such restart after updating from Terminal or
  Data 0.0.3, or Kubernetes 0.0.4, asks for a fresh one-time key once; updating at the next start
  needs nothing.
- **If releases.openeng.app can't be reached**, the engine starts the version you have and tries
  again later. A download with the wrong checksum or version is never installed.
- **The current macOS builds**, which are older releases, still use the release service's former
  address; the next macOS builds move to releases.openeng.app. Keep that in mind if you allow outbound
  traffic by host name.

### The OpenEng AI engine

As of September 25, 2026 there is no engine release in the feed; re-run the installer to update.

The `openeng` engine is built to check releases.openeng.app when it starts and then every six hours,
sending your OpenEng key with each check.
When the feed has a newer version, it downloads it, checks its SHA-256 checksum, and applies it the next time the engine
starts. A release marked critical, or a running version below the minimum supported version, is
swapped in right away, and the engine tells you to restart it; it never stops itself in the middle of
work. Set `OPENENG_SELF_UPDATE=0` to turn updates off, and with them the checks that send the key
([engine updates](engine.md#updates)).

### Release notes

[releases.openeng.app](https://releases.openeng.app) lists the releases of the Terminal, Kubernetes,
Data and Git engines with their changelogs (Git has a release record but no published binary; the AI
engine and Chat have no feed yet). The same data is public JSON, for `terminal`, `kubernetes`, `data`
and `git` ([the release feed](catalogs.md#release-feed)):

```text
https://releases.openeng.app/v1/<product>/stable/latest
https://releases.openeng.app/v1/<product>/stable/versions
```

## Uninstall

For an app engine, using Terminal as the example:

1. **Stop the engine**: press <kbd>Ctrl</kbd>+<kbd>C</kbd> in the terminal where it runs.
2. **Delete the binary**:

   ```bash
   rm ~/.local/bin/openeng-terminal
   ```

   If you installed with `OPENENG_BIN_DIR`, delete it from that folder instead.
3. **Remove the `PATH` line** the installer added to `~/.bashrc`, `~/.zshrc` or `~/.profile`. It
   follows a `# OpenEng Terminal Engine` comment. Keep it if another OpenEng engine lives in the
   same folder.
4. **Optionally, delete the engine's data**: `rm -rf ~/.openeng/terminal`. This removes everything
   the engine saved on this machine, such as terminal groups, history and saved connections.

The AI engine is `~/.local/bin/openeng`; its files, including downloaded models, are in `~/.openeng`
itself ([the `~/.openeng` layout](engine.md#files)). `~/.openeng` is shared by every OpenEng engine, so delete the whole folder only if you use
none of them.

## Troubleshooting

**`no … engine binary published for <os>/<arch> yet`.** Your platform isn't in the
[table above](#platforms). Git and Chat have no engine yet; Terminal and Data have no Linux ARM64
build.

**`checksum mismatch for …`.** The download was damaged or altered on the way. The installer has
already deleted it; run the command again. If it keeps happening, check for a proxy that rewrites
downloads.

**`the downloaded engine did not run`.** The binary doesn't run on this machine (wrong platform or a
corrupt download). Run the installer again.

**`command not found` right after installing.** The new `PATH` line only applies to new terminals.
Open a new one, or run the `export PATH=…` line the installer printed.

**`Windows shell detected`.** You ran the bash installer in Git Bash, MSYS or Cygwin. Use WSL.

**macOS warns about an unidentified developer.** The installer clears the quarantine flag, but some
proxies and antivirus tools set it again. Clear it yourself:
`xattr -d com.apple.quarantine ~/.local/bin/openeng-terminal`.
