OmniRoute

Self-hosted AI gateway for 290+ providers.

  • diegosouzapw/omniroute:3.8.52
  • port 6114
  • AI
OmniRoute screenshot 1OmniRoute screenshot 2OmniRoute screenshot 3OmniRoute screenshot 4

Dashboard

/
http://localhost:6114/

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 your dashboard.
  2. Sign in with the password in /DATA/AppData/omniroute/password.txt (open it with the Files app; it is also in the app log), 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.

Before you install

Leave INITIAL_PASSWORD blank and the app makes its own random first password, saved in password.txt in the app's folder and shown in the app log; or type your own. It is only used for the first sign-in, so change it from the dashboard afterwards. If other people can reach the server, add REQUIRE_API_KEY=true from the Variables tab. Back up the app data folder to keep your keys and routing setup.

The settings in the first table are already in the app settings. To use any other one, open the app settings, add the variable with your value, save, and the app restarts with it. A setting you leave out uses its default.

In the app settings

VariableDefault valueDescription
TZ$TZYour time zone. ZimaOS fills this in for you.
INITIAL_PASSWORD—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.

Security

VariableDefault valueDescription
REQUIRE_API_KEYfalseSet to true so every call to the /v1 API needs an OmniRoute API key. Do this if anyone else can reach the server.
AUTH_COOKIE_SECUREfalseSet to true when OmniRoute is behind HTTPS.
STORAGE_ENCRYPTION_KEY—Encrypts the whole database with this key. Keep a copy; without it the data can't be read.
JWT_SECRET—Signs dashboard logins. Set a long random value to keep logins the same across reinstalls.
API_KEY_SECRET—Encrypts the provider API keys you save. Set a long random value and keep a copy.

Server

VariableDefault valueDescription
NEXT_PUBLIC_BASE_URLhttp://localhost:20128The address people use to reach OmniRoute, like http://192.168.1.10:6114. Used for OAuth sign-in links.
CORS_ALLOWED_ORIGINS—Web pages allowed to call the API from a browser, separated by commas.
REDIS_URL—An optional Redis server for rate limits, like redis://192.168.1.10:6379.

Storage

VariableDefault valueDescription
DISABLE_SQLITE_AUTO_BACKUPfalseSet to true to stop the automatic database backups.

Privacy

VariableDefault valueDescription
PII_REDACTION_ENABLEDfalseSet to true to hide personal details in requests before they reach a provider.
docker-compose.yml
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"