---
title: OmniRoute
description: Deploy OmniRoute, a self-hosted AI gateway with a web dashboard and OpenAI-compatible API. Route requests across providers from one endpoint on your …
product: Marketplace
url: https://docs.digitalocean.com/products/marketplace/catalog/omniroute/
last_updated: "2026-10-05"
---

> **For AI agents:** The documentation index is at [https://docs.digitalocean.com/llms.txt](https://docs.digitalocean.com/llms.txt). Markdown versions of pages use the same URL with `index.html.md` in place of the HTML page (for example, append `index.html.md` to the directory path instead of opening the HTML document).

# OmniRoute

Generated on 5 Oct 2026 from [the OmniRoute catalog page](https://marketplace.digitalocean.com/apps/omniroute)

## What is OmniRoute?

OmniRoute is an open-source AI gateway: connect providers once, then point Claude Code, Codex, Cursor, OpenCode, and other tools at a single local/HTTPS endpoint with smart routing, combos, and a live model catalog.

- **Self-hosted** – Gateway, dashboard, and data stay on your Droplet
- **Browser dashboard** – HTTPS on your droplet IP (Caddy reverse proxy)
- **OpenAI-compatible API** – `https://<droplet-ip>/v1`
- **DigitalOcean Serverless Inference** – Optional one-key setup with live model fetch
- **Intelligent Inference Router** – Optional `router:<name>` default via wizard or env

## Key Features

- Always-on gateway with Redis-backed rate limiting
- Generated admin password shown in SSH MOTD
- Optional DigitalOcean model access key configuration at first login
- Helper scripts for start/stop/restart/status/update and custom domain TLS
- Ubuntu 24.04 LTS with UFW and fail2ban

## System Requirements

Prefer at least 4 GB RAM for the dashboard and light chat.

| Use Case | RAM | CPU | Storage |
|---|---|---|---|
| Minimum (dashboard / light chat) | 4 GB | 2 vCPU | 50 GB |
| Recommended (coding agents) | 8–16 GB | 4 vCPU | 100 GB |

## Included System Components

- **Ubuntu 24.04 LTS**
- **OmniRoute** (`diegosouzapw/omniroute:latest` at image build time)
- **Redis** sidecar
- **Caddy** reverse proxy (ports 80/443 → OmniRoute on localhost:20128)
- **UFW** and **fail2ban**

## Software Included

*This Marketplace listing does not include a detailed software list.*

## Creating an App using the Control Panel

Click the **Deploy to DigitalOcean** button to create a Droplet based on this 1-Click App. If you aren’t logged in, this link will prompt you to log in with your DigitalOcean account.

[![Deploy to DO](https://www.deploytodo.com/do-btn-blue.svg)](https://cloud.digitalocean.com/droplets/new?onboarding_origin=marketplace&appId=248425085&image=omniroute&activation_redirect=%2Fdroplets%2Fnew%3FappId%3D248425085%26image%3Domniroute)

## Creating an App using the API

In addition to creating a Droplet from the OmniRoute 1-Click App using the control panel, you can also use the [DigitalOcean API](https://docs.digitalocean.com/reference/api). As an example, to create a 4GB OmniRoute Droplet in the SFO2 region, you can use the following `curl` command. You need to either save your [API access token](https://docs.digitalocean.com/reference/api/create-personal-access-token/index.html.md) to an environment variable or substitute it in the command below.

```shell
curl -X POST -H 'Content-Type: application/json' \
         -H 'Authorization: Bearer '$TOKEN'' -d \
        '{"name":"choose_a_name","region":"sfo2","size":"s-2vcpu-4gb","image":"omniroute"}' \
        "https://api.digitalocean.com/v2/droplets"
```

## Getting Started After Deploying OmniRoute

### 1. Deploy the Droplet

1. Select this 1-Click App from the DigitalOcean Marketplace
2. Choose a Droplet size (4 GB RAM minimum recommended)
3. Add your SSH key
4. Optionally set droplet environment variables `MODEL_ACCESS_KEY`, `INFERENCE_MODEL`, and `DO_INFERENCE_ROUTER`
5. Create the Droplet

### 2. Open the Dashboard

1. Visit `https://your-droplet-ip`
2. Sign in with the **password** shown in the SSH MOTD (also `/opt/omniroute/.env` as `INITIAL_PASSWORD`)

### 3. SSH (optional setup wizard)

```
ssh root@your-droplet-ip
```

If Serverless Inference was not passed at create time, the first-login wizard can configure a DigitalOcean Serverless Inference model access key. After the key, press Enter for the default/live model, enter a model id, or `R` for the Intelligent Inference Router. Create keys at [https://cloud.digitalocean.com/model-studio/manage-keys](https://cloud.digitalocean.com/model-studio/manage-keys) (Inference > Manage > Create Model Access Key).

### 4. Create an Endpoint API key and call the API

1. In the dashboard, open **Endpoints** and create an API key
2. Point clients at:

```
Base URL: https://your-droplet-ip/v1
API Key:  <endpoint key from dashboard>
Model:    digitalocean/<model-id>   # or auto / router:<name>
```

Example:

```
curl https://your-droplet-ip/v1/chat/completions \
  -H "Authorization: Bearer YOUR_ENDPOINT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"auto","messages":[{"role":"user","content":"Hello!"}]}'
```

## Managing OmniRoute

| Action | Command |
|---|---|
| Start | `/opt/start-omniroute.sh` |
| Stop | `/opt/stop-omniroute.sh` |
| Restart | `/opt/restart-omniroute.sh` |
| Status | `/opt/status-omniroute.sh` |
| Update | `/opt/update-omniroute.sh` |
| Domain TLS | `/opt/setup-omniroute-domain.sh` |
| Re-run setup | `/etc/setup_wizard.sh --force` |
| Logs | `/opt/omniroute/run.sh logs` |

systemd: `systemctl {start|stop|restart|status} omniroute`

Logs: `journalctl -u omniroute -f`

### Configuration paths

- Env / secrets: `/opt/omniroute/.env` (symlink `/opt/omniroute.env`)
- Compose stack: `/opt/omniroute/`
- Getting started: `/root/omniroute_info.txt`

### DigitalOcean Serverless Inference

When configured, OmniRoute connects the built-in `digitalocean` provider to:

- Base URL: `https://inference.do-ai.run/v1`
- Models: live fetch from `GET /v1/models` (passthrough catalog)
- Intelligent Inference Router: set `DO_INFERENCE_ROUTER=<name>` (or pick `R` in the setup wizard) to use `router:<name>` with the same model access key

### Custom domain (HTTPS)

Point a DNS A record at the droplet, then:

```
sudo /opt/setup-omniroute-domain.sh
```

## Security notes

- Port 20128 is bound to localhost; only HTTPS (80/443 via Caddy) is public
- Keep `INITIAL_PASSWORD`, `JWT_SECRET`, `API_KEY_SECRET`, and `REDIS_PASSWORD` private
- Prefer a DigitalOcean Cloud Firewall restricting SSH (and optionally HTTP/HTTPS) to your IP
- For production, use a custom domain with TLS via `/opt/setup-omniroute-domain.sh`

## Additional Resources

- GitHub: [https://github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
- Website: [https://omniroute.online](https://omniroute.online)
- Docker Hub: [https://hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
- Serverless Inference: [https://docs.digitalocean.com/products/inference/](https://docs.digitalocean.com/products/inference/index.html.md)
- Inference Router: [https://docs.digitalocean.com/products/inference/how-to/use-inference-router/](https://docs.digitalocean.com/products/inference/how-to/use-inference-router/index.html.md)