name: omniroute
services:
omniroute:
image: diegosouzapw/omniroute:3.8.52
container_name: omniroute
restart: unless-stopped
stop_grace_period: 40s
network_mode: bridge
entrypoint:
- /bin/sh
- -c
- |
f=/app/data/password.txt
if [ -z "$$INITIAL_PASSWORD" ]; then
if [ -s "$$f" ]; then
INITIAL_PASSWORD=$$(cat "$$f")
else
INITIAL_PASSWORD=$$(head -c 18 /dev/urandom | od -An -tx1 | tr -d ' \n')
if printf '%s' "$$INITIAL_PASSWORD" > "$$f" 2>/dev/null; then
chmod 600 "$$f"
else
echo "[icestore] cannot write $$f, so the password below is only shown here"
fi
echo "[icestore] first start: your first dashboard password is $$INITIAL_PASSWORD"
fi
export INITIAL_PASSWORD
echo "[icestore] first dashboard password: see /DATA/AppData/omniroute/password.txt"
fi
exec /app/check-permissions.sh node dev/run-standalone.mjs
environment:
- TZ=$TZ
- INITIAL_PASSWORD=
ports:
- target: 20128
published: "6114"
protocol: tcp
volumes:
- type: bind
source: /DATA/AppData/$AppID
target: /app/data
bind:
create_host_path: true
deploy:
resources:
limits:
cpus: "0.40"
memory: 1012M
reservations:
cpus: "0.00"
memory: 512M
labels:
icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/omniroute/icon.png
x-casaos:
id: com.icestore.omniroute
envs:
- container: TZ
description:
en_US: Your time zone. ZimaOS fills this in for you.
- container: INITIAL_PASSWORD
description:
en_US: >-
The first dashboard password. Leave it blank and the app makes a
random one on first start. Find it in
/DATA/AppData/omniroute/password.txt (open it with the Files app)
or in the app log. Or type your own here. It is only used for the
first sign-in; change it from the dashboard after that.
ports:
- container: "20128"
description:
en_US: Dashboard and OpenAI-compatible API, published on host as 6114.
volumes:
- container: /app/data
description:
en_US: OmniRoute data, provider keys and routing settings.
x-casaos:
id: com.icestore.omniroute
architectures:
- amd64
- arm64
main: omniroute
author: HSinghHira
category: AI
developer: diegosouzapw
icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/omniroute/icon.png
thumbnail: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/omniroute/screenshot-1.png
screenshot_link:
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/omniroute/screenshot-1.png
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/omniroute/screenshot-2.png
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/omniroute/screenshot-3.png
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/omniroute/screenshot-4.png
title:
en_US: OmniRoute
tagline:
en_US: Self-hosted AI gateway for 290+ providers.
description:
en_US: >-
Visit: [https://icestore.hsinghhira.me/app/omniroute/](https://icestore.hsinghhira.me/app/omniroute/) for full details
OmniRoute is a self-hosted AI gateway that puts one OpenAI-compatible
endpoint in front of 290+ providers and 500+ models, including Claude,
GPT, Gemini, DeepSeek and many free-tier options.
**Features**
- One OpenAI-compatible endpoint for 290+ providers and 500+ models
- Smart routing, load balancing and automatic fallback, so tools like
Claude Code, Cursor, Cline and Copilot keep working when a provider
is down or out of quota
- Dashboard for provider keys and routing rules
- Settings, keys and routing data kept in the app data folder
**How to use?**
1. Open OmniRoute from the Zima OS dashboard.
2. Sign in with the password in /DATA/AppData/omniroute/password.txt
(or the one you typed in INITIAL_PASSWORD), then change it from the
dashboard.
3. Add your provider API keys.
4. Point your tools at OmniRoute's OpenAI-compatible endpoint.
5. Set routing rules and fallback order from the dashboard.
tips:
before_install:
en_US: >-
Visit: [https://icestore.hsinghhira.me/app/omniroute/](https://icestore.hsinghhira.me/app/omniroute/) for full details
index: /
port_map: "6114"
scheme: http
is_uncontrolled: false
version: "3.8.52"
update_at: "2026-10-21"
release_notes:
en_US: |-
- Pinned to diegosouzapw/omniroute:3.8.52 instead of latest.
- INITIAL_PASSWORD is now blank by default, and each install makes its own random first password (saved in password.txt in the app folder and shown in the log) instead of CHANGEME.
- Moved to IceStore. Port changed from 8401 to 6114.
- Optional settings are listed in the Variables tab on the IceStore website.
repo: "https://github.com/diegosouzapw/OmniRoute"
support: "https://github.com/diegosouzapw/OmniRoute/issues"
docs: "https://github.com/diegosouzapw/OmniRoute/tree/main/docs"