diff --git a/README.md b/README.md
index 551f22d93d6..541675f4667 100644
--- a/README.md
+++ b/README.md
@@ -19,9 +19,11 @@
> The `omniroute` package on npm is published by upstream — `npm install -g omniroute` installs **upstream**, not this fork;
> the dashboard update check and `omniroute update` know the difference and only offer releases of this repository.
>
-> **Published right now:** the container tags `:next` and `:next-web`, built from the current default branch,
-> plus installation from source. `:latest` and the desktop installers begin to exist when a versioned release
-> is cut; until then every command below uses `:next`, so each one works exactly as written.
+> **Published right now:** desktop installers for Windows, macOS and Linux, attached to every
+> [GitHub Release](https://github.com/LMPrado-DZ23/OmniRoute/releases); the container tags `:latest`
+> and the immutable `:X.Y.Z`; the rolling `:next` and `:next-web`, built from the current default
+> branch; and installation from source. The commands below use `:latest` — pin `:X.Y.Z` when you
+> need a deployment you can reproduce.
@@ -730,7 +732,7 @@ of your shell history. → [CLI Integrations](docs/guides/CLI-INTEGRATIONS.md)
| Platform | Install | Highlights |
| 📦 GitHub Releases | installers for this fork | Windows .exe · macOS .dmg · Linux .AppImage |
- | 🐳 Docker | docker run … ghcr.io/lmprado-dz23/omniroute:next | Multi-arch AMD64 + ARM64 |
+ | 🐳 Docker | docker run … ghcr.io/lmprado-dz23/omniroute:latest | Multi-arch AMD64 + ARM64 |
| 🧪 npm (upstream package) | npm install -g omniroute | Installs the upstream build, not this fork |
| 🖥️ Desktop (Electron) | npm run electron:build | Native window + system tray — Windows / macOS / Linux |
| 🎩 Menu-bar (OmniRouteTray) | brew install --cask zoispag/tap/omniroute-tray | Supervises & auto-updates the server — macOS |
@@ -990,7 +992,7 @@ Auto-trigger by token threshold, flip on the adaptive dial, pin a named profile,
Pick the channel of **this fork** that fits you:
- **Desktop installer** — not published for this fork yet. When a version is released the `.exe` / `.dmg` / `.AppImage` for your OS appear on [GitHub Releases](https://github.com/LMPrado-DZ23/OmniRoute/releases), and opening one starts the server and the dashboard. Until then use Docker or source; both are supported.
-- **Docker** — `docker run -d --name omniroute -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data ghcr.io/lmprado-dz23/omniroute:next`
+- **Docker** — `docker run -d --name omniroute -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data ghcr.io/lmprado-dz23/omniroute:latest`
- **From source** (needs Node.js 22/24 LTS):
```bash
@@ -1046,10 +1048,10 @@ Use these only for clients that cannot attach `Authorization: Bearer ...`. Heade
```bash
docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
- -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data ghcr.io/lmprado-dz23/omniroute:next
+ -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data ghcr.io/lmprado-dz23/omniroute:latest
```
-`:next` is the channel this fork publishes today, from the current default branch. `:latest` follows the highest **published** stable SemVer. It does not track git `main`. Pin `:X.Y.Z` for GitOps. See [Docker Release Channels](docs/guides/DOCKER_GUIDE.md#release-channels).The image pins **`OMNIROUTE_MEMORY_MB=1024`**. That is enough for the dashboard and a light chat. **Coding agents** (`POST /v1/responses` from Claude Code, Codex, Grok, …) need a much larger V8 heap or the process `FATAL ERROR`s at ~12 GiB under two overlapping long contexts. Size the container above the heap (native buffers sit outside V8):
+`:latest` is a moving pointer: pulling it again later gives you whatever the newest stable release is by then. Pin `:X.Y.Z` for anything you need to reproduce. `:latest` follows the highest **published** stable SemVer. It does not track git `main`. `:next` is the rolling channel built from the current default branch, so it runs ahead of the last release. Pin `:X.Y.Z` for GitOps. See [Docker Release Channels](docs/guides/DOCKER_GUIDE.md#release-channels).The image pins **`OMNIROUTE_MEMORY_MB=1024`**. That is enough for the dashboard and a light chat. **Coding agents** (`POST /v1/responses` from Claude Code, Codex, Grok, …) need a much larger V8 heap or the process `FATAL ERROR`s at ~12 GiB under two overlapping long contexts. Size the container above the heap (native buffers sit outside V8):
| Workload | Heap (`-e OMNIROUTE_MEMORY_MB`) | Container (`--memory`) |
| ----------------------------------- | ------------------------------- | ---------------------- |
@@ -1060,19 +1062,18 @@ docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
```bash
docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
-e OMNIROUTE_MEMORY_MB=8192 --memory=10g \
- -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data ghcr.io/lmprado-dz23/omniroute:next
+ -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data ghcr.io/lmprado-dz23/omniroute:latest
```
Full table: [Docker Guide — runtime RAM](docs/guides/DOCKER_GUIDE.md#runtime-ram-for-coding-agents).
> **About the `:next` channel:** `ghcr.io/lmprado-dz23/omniroute:next` and
> `ghcr.io/lmprado-dz23/omniroute:next-web` follow the current default `release/v*`
-> branch, and today they are the only images this fork publishes. They are mutable:
-> pulling again later can give you a different build, so for a reproducible
-> deployment pin the digest that
+> branch, so they run ahead of the last release. They are mutable: pulling again later
+> can give you a different build, so for a reproducible deployment use an immutable
+> `:X.Y.Z` tag, or pin the digest that
> `docker image inspect ghcr.io/lmprado-dz23/omniroute:next --format '{{index .RepoDigests 0}}'`
-> reports. Immutable `:X.Y.Z` tags and the stable `:latest` pointer appear once a version
-> is released. See [Docker Release Channels](docs/guides/DOCKER_GUIDE.md#release-channels).
+> reports. See [Docker Release Channels](docs/guides/DOCKER_GUIDE.md#release-channels).
**🥟 Bun**
diff --git a/docs/guides/DOCKER_GUIDE.md b/docs/guides/DOCKER_GUIDE.md
index 9ea3467ea16..a4e3fa389bf 100644
--- a/docs/guides/DOCKER_GUIDE.md
+++ b/docs/guides/DOCKER_GUIDE.md
@@ -483,9 +483,14 @@ Multi-platform manifest: `linux/amd64` + `linux/arm64` native (Apple Silicon, AW
### Release Channels
-> **What exists today for this fork:** only `:next` and `:next-web`. No versioned release has been
-> published yet, so `:latest`, `:latest-web` and the immutable `:X.Y.Z` tags are not resolvable and the
-> examples in this guide use `:next`. The rows below describe what each channel means once releases begin.
+> **What exists today for this fork:** the first versioned release was published on 2026-09-19, so
+> `:latest`, `:latest-web` and the immutable `:X.Y.Z` tags now point at real images, alongside the
+> rolling `:next` and `:next-web` — all five resolve for an anonymous pull. **`:main` and `:main-web`
+> do not exist here** (verified: `404`); this fork develops on `release/v*` branches, not on `main`,
+> so the `:main` row below describes the channel's meaning, not something you can pull. `:latest`
+> only moves when the version being published is the highest stable SemVer —
+> `scripts/ci/should-promote-latest.sh` compares it against every `v*` tag first, and a pre-release
+> identifier never promotes it.
OmniRoute publishes separate Docker channels for stable releases, active release-branch testing, and development builds.