OME Web Console

July 28, 2026 · View on GitHub

A modern web interface for managing OME (Open Model Engine) resources including models, serving runtimes, and inference services.

The console talks to a cluster running OME's ome.io/v1beta1 CRDs; it is developed and released independently of the OME operator.

History: this code previously lived in the OME repository under web-console/. It moved here as a fresh start, so commits before the move are not in this repository — see ome-projects/ome for that history.

Table of Contents


Quick Start

Get up and running in under 2 minutes:

# 1. Install dependencies
make install

# 2. Copy environment file and configure
cp backend/.env.example backend/.env

# 3. Start development servers (frontend + backend)
make dev

The console will be available at:


Prerequisites

Before you begin, ensure you have the following installed:

ToolVersionCheck Command
Go1.24+go version
Node.js18+node --version
npm9+npm --version
kubectlLatestkubectl version --client

You also need:

  • Access to a Kubernetes cluster with OME CRDs installed
  • kubectl configured with cluster access (kubectl cluster-info should work)

Verify Prerequisites

# Quick check all prerequisites
go version && node --version && npm --version && kubectl cluster-info

Installation

1. Clone and Navigate

git clone https://github.com/ome-projects/ome-console.git
cd ome-console

2. Install Dependencies

# Install both frontend and backend dependencies
make install

# Or install separately:
make install-frontend  # npm install
make install-backend   # go mod download

3. Configure Environment

# Copy the example environment file
cp backend/.env.example backend/.env

# Edit if needed (defaults work for local development)

Backend .env file:

PORT=8080
GIN_MODE=debug
KUBECONFIG=~/.kube/config
CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:3001

Frontend .env.local file (optional):

NEXT_PUBLIC_API_URL=http://localhost:8080

Development

Starting Development Servers

# Start both frontend and backend concurrently
make dev

# Or run them in separate terminals:
make dev-backend   # Terminal 1: Backend on :8080
make dev-frontend  # Terminal 2: Frontend on :3000

Code Quality

# Run all linters
make lint

# Run linters separately
make lint-frontend  # ESLint
make lint-backend   # go vet

# Format code
make format

# Format separately
make format-frontend  # Prettier
make format-backend   # gofmt

# Check formatting without changes
make format-check

# TypeScript type checking
make typecheck

# Run tests
make test

Building for Production

# Build both frontend and backend
make build

# Build separately
make build-frontend  # Creates .next/ directory
make build-backend   # Creates backend/bin/api binary

# Run production builds
make start-frontend  # Runs Next.js production server
make run-backend     # Runs compiled Go binary

Useful Development Commands

# Check if services are running
make status

# Clean build artifacts
make clean

# Show all available commands
make help

Configuration

Backend Environment Variables

VariableDefaultDescription
PORT8080API server port
GIN_MODEdebugGin framework mode (debug, release)
KUBECONFIG~/.kube/configPath to kubeconfig file
KUBERNETES_IN_CLUSTERfalseSet to true when running in-cluster
CORS_ALLOWED_ORIGINShttp://localhost:3000,http://localhost:3001Comma-separated allowed origins

Frontend Environment Variables

VariableDefaultDescription
NEXT_PUBLIC_API_URLhttp://localhost:8080Backend API URL

Architecture

ome-console/
├── frontend/                # Next.js 14 React application
│   ├── src/
│   │   ├── app/            # App Router pages and layouts
│   │   │   └── (dashboard)/# Dashboard pages (models, runtimes, services)
│   │   ├── components/     # Reusable UI components
│   │   │   ├── ui/         # Base UI components (Button, Table, etc.)
│   │   │   ├── forms/      # Form components
│   │   │   └── layout/     # Layout components (Sidebar, etc.)
│   │   ├── lib/            # Utilities, hooks, and API clients
│   │   │   ├── api/        # API client functions
│   │   │   ├── hooks/      # React Query hooks
│   │   │   └── types/      # TypeScript type definitions
│   │   └── hooks/          # Custom React hooks
│   └── public/             # Static assets

├── backend/                 # Go API server
│   ├── cmd/api/            # Application entrypoint
│   └── internal/
│       ├── api/            # Server setup and routing
│       ├── handlers/       # HTTP request handlers
│       ├── k8s/            # Kubernetes client and operations
│       ├── middleware/     # HTTP middleware (logging)
│       └── services/       # Business logic services

└── Makefile                # Development automation

Tech Stack

Frontend:

  • Next.js 14 (App Router)
  • React 18 + TypeScript
  • TailwindCSS
  • TanStack Query (React Query)
  • React Hook Form + Zod

Backend:

  • Go 1.24+
  • Gin web framework
  • client-go (Kubernetes client)
  • Zap logger

API Reference

Health Check

GET /health

Models

GET    /api/v1/models                    # List ClusterBaseModels
GET    /api/v1/models/:name              # Get ClusterBaseModel
POST   /api/v1/models                    # Create ClusterBaseModel
PUT    /api/v1/models/:name              # Update ClusterBaseModel
DELETE /api/v1/models/:name              # Delete ClusterBaseModel

# Namespace-scoped BaseModels
GET    /api/v1/namespaces/:ns/models           # List BaseModels
GET    /api/v1/namespaces/:ns/models/:name     # Get BaseModel
POST   /api/v1/namespaces/:ns/models           # Create BaseModel
PUT    /api/v1/namespaces/:ns/models/:name     # Update BaseModel
DELETE /api/v1/namespaces/:ns/models/:name     # Delete BaseModel

Runtimes

GET    /api/v1/runtimes                  # List ClusterServingRuntimes
GET    /api/v1/runtimes/:name            # Get ClusterServingRuntime
POST   /api/v1/runtimes                  # Create ClusterServingRuntime
PUT    /api/v1/runtimes/:name            # Update ClusterServingRuntime
DELETE /api/v1/runtimes/:name            # Delete ClusterServingRuntime
POST   /api/v1/runtimes/:name/clone      # Clone a runtime
GET    /api/v1/runtimes/compatible       # Find compatible runtimes
GET    /api/v1/runtimes/recommend        # Get runtime recommendation
POST   /api/v1/runtimes/validate         # Validate runtime config
GET    /api/v1/runtimes/fetch-yaml       # Fetch YAML from URL

Services

GET    /api/v1/services                  # List InferenceServices
GET    /api/v1/services/:name            # Get InferenceService
POST   /api/v1/services                  # Create InferenceService
PUT    /api/v1/services/:name            # Update InferenceService
DELETE /api/v1/services/:name            # Delete InferenceService
GET    /api/v1/services/:name/status     # Get service status

HuggingFace Integration

GET /api/v1/huggingface/models/search         # Search HuggingFace models
GET /api/v1/huggingface/models/:id/info       # Get model info
GET /api/v1/huggingface/models/:id/config     # Get model config

Other

GET /api/v1/namespaces                   # List namespaces
GET /api/v1/accelerators                 # List accelerators
GET /api/v1/events                       # SSE stream for real-time updates
POST /api/v1/validate/yaml               # Validate YAML
POST /api/v1/validate/model              # Validate model resource
POST /api/v1/validate/runtime            # Validate runtime resource

Make Commands

Development

CommandDescription
make devStart both frontend and backend
make dev-frontendStart frontend dev server (port 3000)
make dev-backendStart backend dev server (port 8080)

Building

CommandDescription
make buildBuild both frontend and backend
make build-frontendBuild frontend for production
make build-backendBuild backend binary

Running

CommandDescription
make run-backendRun backend binary
make start-frontendRun frontend production server

Dependencies

CommandDescription
make installInstall all dependencies
make install-frontendInstall frontend dependencies (npm)
make install-backendDownload Go modules

Quality

CommandDescription
make lintRun all linters
make lint-frontendRun ESLint
make lint-backendRun go vet
make formatFormat all code
make format-checkCheck formatting
make typecheckRun TypeScript type checking
make testRun all tests
make test-backendRun backend tests
make test-frontendRun frontend tests

Utilities

CommandDescription
make statusCheck if services are running
make cleanClean build artifacts
make helpShow all available commands

Troubleshooting

Backend won't connect to Kubernetes cluster

# 1. Verify kubectl access
kubectl cluster-info
kubectl get nodes

# 2. Check kubeconfig path
echo $KUBECONFIG
cat ~/.kube/config | head -20

# 3. Verify OME CRDs are installed
kubectl get crd | grep ome.io

Frontend can't reach backend

# 1. Verify backend is running
curl http://localhost:8080/health

# 2. Check for CORS issues (look at browser console)
# Backend allows localhost:3000 and localhost:3001 by default

# 3. Verify API URL in frontend
cat frontend/.env.local

Port already in use

# Find process using port
lsof -i :8080  # Backend
lsof -i :3000  # Frontend

# Kill process
kill -9 <PID>

# Or use a different port
PORT=9090 make run-backend

TypeScript errors

# Run type checking
make typecheck

# Clear Next.js cache and rebuild
rm -rf frontend/.next
make build-frontend

Go module issues

# Clear module cache
go clean -modcache

# Re-download dependencies
cd backend && go mod download

Real-time updates not working

The backend uses Server-Sent Events (SSE) for real-time updates. Check:

# Test SSE endpoint
curl -N http://localhost:8080/api/v1/events

# Verify informers are running (check backend logs)
make dev-backend

Contributing

Code Style

  • Go: Follow standard Go conventions, use gofmt
  • TypeScript: Follow ESLint rules, use Prettier for formatting
  • Commits: Use conventional commit messages

Before Submitting

# Run all checks
make lint
make typecheck
make test
make format-check

Project Structure Conventions

  • UI components go in frontend/src/components/ui/
  • Form components go in frontend/src/components/forms/
  • API hooks go in frontend/src/lib/hooks/
  • Backend handlers go in backend/internal/handlers/
  • Add new API routes in backend/internal/api/server.go

License

See the main OME repository for license information.