How to Set Up a Development Environment for OmniRoute: A Complete Guide
Setting up an OmniRoute development environment requires Node.js ≥22, cloning the repository, installing dependencies with npm ci, initializing the SQLite database with npm run db:setup, and launching the dev server with npm run dev on port 20128.
OmniRoute is a full-stack AI routing gateway built with Next.js 16, TypeScript 6, and a SQLite persistence layer. Its architecture combines an API & routing layer, an SSE + translation core, and a persistence layer wired together by services for auto-combo routing, guardrails, and MCP/A2A agents. This guide walks through setting up a local development environment using the actual source files and commands implemented in the diegosouzapw/OmniRoute repository.
Prerequisites and System Requirements
OmniRoute enforces strict engine requirements defined in package.json to ensure compatibility with its Next.js server and TypeScript compiler.
Required Software
- Node.js ≥22 <23 or ≥24 <27 — The runtime specified in
package.jsonengines field. - Git — For cloning the repository and keeping sub-modules in sync.
- Python 3 — Optional but recommended for compiling native SQLite bindings.
Optional Tools for Extended Development
- Docker — Enables containerized deployment mode using the included
Dockerfile. - Electron build tools — Required only when building the desktop client (
npm run electron:build).
Clone and Install Dependencies
Clone the repository and navigate to the project root, which contains the Next.js application (src/), the SSE workspace (open-sse/), and the database layer (src/lib/db/).
git clone https://github.com/diegosouzapw/OmniRoute.git
cd OmniRoute
Install dependencies using a clean install to honor the exact dependency graph in package-lock.json.
npm ci
npm run lint
npm run typecheck:core
The npm run lint command verifies code style with Prettier and ESLint, while npm run typecheck:core performs fast type-checking of core files.
Initialize the SQLite Database
OmniRoute stores provider connections, combos, and usage logs in a local SQLite file. By default, this file is created at ~/.omniroute/storage.sqlite, though you can override this path with the OMNIROUTE_DATA_DIR environment variable.
npm run db:setup
This command executes src/lib/db/migrationRunner.ts, which applies 110 schema migrations located under db/migrations/. If you need to reset the database during development, run npm run db:reset to drop and recreate the file.
Configure Environment Variables
Environment validation is handled by a Zod schema defined in src/lib/env/runtimeEnv.ts. Create a .env.local file at the repository root to override any defaults.
| Variable | Description | Default |
|---|---|---|
PORT |
HTTP port for the Next.js server and dashboard. | 20128 |
OMNIROUTE_DATA_DIR |
Custom path for SQLite storage. | ~/.omniroute/ |
REQUIRE_API_KEY |
Toggle API-key enforcement for public routes. | false |
OMNIROUTE_BASE_PATH |
Serve OmniRoute under a sub-path (e.g., /omniroute/). |
none |
Launch the Development Server
Start the development server with a single command.
npm run dev
This launches three integrated components:
- API routes (
src/app/api/v1/*) — Exposes the OpenAI-compatible endpoint at/v1/*. - Dashboard pages (
src/app/(dashboard)/dashboard/*) — Renders the web UI athttp://localhost:20128/dashboard. - SSE core (
open-sse/handlers/chatCore.ts) — Processes streaming requests, performs provider translation viaopen-sse/translator/*, and applies auto-combo routing viaopen-sse/services/autoCombo/*.
Verify the setup by listing registered models:
curl -X POST http://localhost:20128/v1/models -H "Content-Type: application/json" -d '{}'
A 200 OK response with a JSON model list confirms your development environment is ready.
Run the Test Suite
OmniRoute ships with 21,000+ automated tests covering unit, integration, and end-to-end scenarios.
npm run test:all # Full suite (unit + vitest + e2e)
npm run test:vitest # MCP server and auto-combo tests
npm run test:e2e # Playwright UI tests
Run npm run check before committing to execute both linting and the full test suite.
Optional Development Modes
Beyond the standard Next.js dev server, OmniRoute supports several alternative deployment targets.
Docker Deployment
Run the multi-arch container that encapsulates the same server environment:
docker compose up
# Or
docker run diegosouzapw/omniroute
Refer to docs/guides/DOCKER_GUIDE.md for detailed container configuration.
Electron Desktop Client
Build a native desktop application with system tray integration:
npm run electron:dev # Development mode
npm run electron:build # Production build
Configuration details are available in electron/README.md.
Termux Mobile Development
Run OmniRoute on Android devices without root access:
pkg install nodejs
npx -y omniroute
See docs/guides/TERMUX_GUIDE.md for mobile-specific instructions.
Remote Mode
Control a remote OmniRoute instance via scoped tokens:
omniroute connect <host>
Documentation for remote authentication is in docs/guides/REMOTE-MODE.md.
Summary
- Node.js ≥22 is strictly required; verify version compatibility before installing dependencies.
- Run
npm run db:setupto execute 110 migrations viasrc/lib/db/migrationRunner.tsand initialize the SQLite database at~/.omniroute/storage.sqlite. - The development server starts on port 20128 and simultaneously serves the API, dashboard, and SSE core.
- Execute 21,000+ tests using
npm run test:allto validate changes before committing. - Alternative modes (Docker, Electron, Termux, Remote) are available for specialized deployment scenarios.
Frequently Asked Questions
What Node.js version does OmniRoute require?
OmniRoute requires Node.js ≥22 <23 or ≥24 <27, as specified in the engines field of package.json. Using versions outside these ranges may cause compatibility issues with the Next.js 16 runtime or TypeScript 6 compiler.
How do I reset the OmniRoute database during development?
Run npm run db:reset to drop and recreate the SQLite file. This command removes all existing data and re-applies the 110 schema migrations stored in db/migrations/, giving you a clean state for testing.
Can I run OmniRoute without installing Node.js locally?
Yes. You can use the Docker mode by running docker run diegosouzapw/omniroute, or deploy to Termux on Android using npx -y omniroute. Both methods bypass the need for a local Node.js installation while providing full gateway functionality.
Where are the database migrations stored?
All 110 schema migrations reside in the db/migrations/ directory and are applied by src/lib/db/migrationRunner.ts. This script runs automatically during npm run db:setup, creating the necessary tables for providers, combos, and usage logs in the SQLite file defined by OMNIROUTE_DATA_DIR.
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:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →