How to Set Up OmniRoute as a Self-Hosted AI Gateway: The Complete Installation Guide

You can set up OmniRoute as a self-hosted AI gateway by installing the global npm package (npm i -g omniroute), running omniroute run to start the server on port 20128, and sending requests to the OpenAI-compatible endpoint at http://localhost:20128/v1.

OmniRoute by diegosouzapw/OmniRoute is a self-hosted gateway that unifies 357 LLM providers behind a single OpenAI-compatible API. When run locally, it serves traffic through an intelligent Auto-Combo routing engine and requires no external API keys to begin processing requests. This guide walks you through the complete setup process from installation to production-ready configuration, referencing the actual source files that power each component.

Installation and Quick Start

Getting OmniRoute running locally takes less than five minutes. The gateway embeds all required services—including Redis and SQLite—so you do not need to configure external databases to begin.

Install the Global CLI

Run the following command to install the OmniRoute CLI and server components globally:

npm i -g omniroute

During installation, the script automatically generates a local .env file (ignored by Git) containing secrets for JWT and API-key encryption. This file is created according to the patterns defined in docs/DEVELOPER-ENVIRONMENT.md.

Start the Server

Launch the gateway with a single command:

omniroute run

The server initializes multiple embedded services:

Once started, the gateway listens on http://localhost:20128 and is ready to accept traffic immediately.

Verify with a Test Request

Confirm your installation by sending a request to the chat completions endpoint:

curl http://localhost:20128/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"auto","messages":[{"role":"user","content":"Hello!"}]}'

Setting "model":"auto" invokes the Auto-Combo engine, which scores 19 routing strategies in real-time to select the best available provider. The response includes headers such as X-OmniRoute-Decision indicating which provider and strategy served the request, as referenced in docs/reference/API_REFERENCE.md.

Architecture Overview

Understanding the source code structure helps you customize and troubleshoot the gateway. OmniRoute uses a layered architecture where requests flow through distinct processing stages:

API Routing Layer

The Next.js App Router in src/app/api/v1/ serves as the entry point. Each route runs through a middleware stack handling CORS, Zod validation, optional authentication, and handler delegation.

Request Processing Layer

The open-sse/handlers/ directory contains the core processing logic. Specifically, open-sse/handlers/chatCore.ts orchestrates caching, rate limiting, and combo routing before dispatching to executors.

Provider Execution Layer

Provider-specific HTTP dispatchers live in open-sse/executors/. These executors handle the actual API calls to upstream services like OpenAI, Anthropic, or Google.

Protocol Translation Layer

The open-sse/translator/ directory manages format conversion between OpenAI, Claude, and Gemini wire protocols, ensuring compatibility regardless of the upstream provider.

Intelligence and Resilience

The Combo Service at open-sse/services/combo.ts implements the 19 routing strategies and the live 15-factor scoring engine. For fault tolerance, the src/lib/resilience/ directory contains the three resilience layers: provider circuit breakers, connection cooldowns, and model lockouts, all lazily refreshed to maintain traffic flow during upstream failures.

Configuring Providers and Authentication

While OmniRoute works immediately using free-tier providers, you can add proprietary API keys for higher quotas and premium models.

Using the Dashboard

Navigate to http://localhost:20128/dashboard and select Providers. Click Add Provider, choose from the catalog of 357 supported services, and paste your API key. The system encrypts and stores the key in the SQLite database via src/lib/db/providerKeys.ts.

Using the CLI

Configure providers programmatically through the interactive CLI:

omniroute configure openai

This command launches an interactive picker for setting keys and model preferences.

Database Storage

All configuration persists in a SQLite singleton accessed through src/lib/db/core.ts. The getDbInstance() function manages the connection, storing provider keys, usage statistics, and feature flags.

Key Source Files for Customization

When extending or debugging OmniRoute, these files contain the critical implementation details:

Advanced Configuration Options

Custom Routing Combos

Define specialized routing strategies by creating a combo JSON file and pointing the router to it via the OMNIROUTE_COMBO_PATH environment variable. The schema follows the definitions in open-sse/services/combo.ts, allowing you to customize the 15-factor scoring weights.

Remote Mode Deployment

Run OmniRoute on a VPS and connect via scoped tokens for team environments:

omniroute connect <host>

This mode uses token-based authentication as detailed in docs/guides/REMOTE-MODE.md.

Token Compression

Enable the Caveman or RTK compression engines to reduce token usage by up to 95%. Configuration details are available in docs/compression/COMPRESSION_ENGINES.md.

Summary

Setting up OmniRoute as a self-hosted AI gateway involves these key steps:

  • Install the global npm package to get the CLI and embedded services.
  • Run omniroute run to start the server on port 20128 with zero external configuration.
  • Test the endpoint using model: "auto" to leverage the free-tier Auto-Combo routing.
  • Configure additional providers via the dashboard or CLI, with keys encrypted in SQLite.
  • Extend functionality using the MCP server at open-sse/mcp-server/server.ts or custom combo configurations.
  • Scale using remote mode and compression engines for production deployments.

Frequently Asked Questions

Does OmniRoute require API keys to work immediately?

No. OmniRoute works out-of-the-box without any external API keys by routing requests through free-tier providers using the Auto-Combo engine. You only need to add paid provider keys if you require higher quotas or specific models not available on free tiers.

How does OmniRoute handle provider failures?

OmniRoute implements three independent resilience layers defined in docs/architecture/RESILIENCE_GUIDE.md: provider circuit breakers, connection cooldown periods, and model lockouts. These mechanisms automatically route around failing providers without manual intervention.

What is the Auto-Combo engine?

The Auto-Combo engine, implemented in open-sse/services/combo.ts, evaluates 19 routing strategies in real-time using a 15-factor scoring system. It dynamically selects the optimal provider based on latency, cost, availability, and request requirements, falling back to alternatives if quotas are exceeded.

Can I use OmniRoute with existing OpenAI SDKs?

Yes. OmniRoute exposes a fully OpenAI-compatible endpoint at /v1/chat/completions. You can point any standard OpenAI client to http://localhost:20128 and use it as a drop-in replacement, benefiting from unified access to 357 providers without code changes.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →