Documentation

Up and running,
fast.

Install, configure, and learn how data flows through OpenTerminalUI. Everything you need to self-host the terminal.

Quick start

One command. The installer detects your OS, generates secrets, seeds an admin account, and launches the full stack at localhost:8000.

bash
$ git clone https://github.com/Hitheshkaranth/OpenTerminalUI.git
$ cd OpenTerminalUI
$ ./install.sh # Windows: ./install.ps1
✓ ready → http://localhost:8000 (credentials printed)

Prerequisites

Either Docker, or — for the local path — Python and Node. Nothing else to configure.

Docker DesktopRecommended — full stack in containers
Python 3.11+Backend (local development only)
Node.js 22+Frontend (local development only)

Run with Docker

bash
$ cp .env.example .env # add API keys if you have them
$ docker compose up --build
$ docker compose --profile postgres up --build # with PostgreSQL

UI and API are served from the backend container at http://127.0.0.1:8000. Use docker compose down -v to wipe the database for a fresh start.

Run locally

Backend
$ python3.11 -m venv .venv
$ source .venv/bin/activate
$ pip install -r backend/requirements.txt
$ uvicorn backend.main:app --reload
Frontend
$ cd frontend
$ npm ci
$ npm run dev
→ localhost:5173

Environment

All keys are optional — the platform runs on built-in fallback data. Add keys to unlock live feeds.

Variable
Purpose
FMP_API_KEY
US equities, fundamentals, earnings
FINNHUB_API_KEY
US real-time WebSocket ticks
KITE_API_KEY
Zerodha Kite — India NSE/BSE live + historical
LM_STUDIO_BASE_URL
Local Gemma endpoint for AI sentiment
OPENROUTER_API_KEY
Powers the AI research agent (free models work)

Data providers

A multi-provider waterfall tries the highest-quality source first and falls back automatically on failure.

India
Provider
Role
Data
Zerodha Kite
Primary
Real-time ticks, OHLCV all intervals
yfinance
Fallback
OHLCV historical (.NS format)
NSEPython
Tertiary
F&O, OI, PCR, corporate actions
US
Provider
Role
Data
FMP
Primary
OHLCV, fundamentals, earnings, news
Finnhub
Real-time WS
WebSocket ticks, OHLCV, news
yfinance
Last resort
OHLCV historical

Caching & failover

request → L1 SQLite hit · L2 Redis hit · primary · fallback 503
Primary cache: SQLite, per-symbol/interval, default TTL 900s
Optional L2: Redis via REDIS_URL, falls back to SQLite
Live WebSocket candles update in-memory without touching cache
Cache warming via OPENTERMINALUI_PREFETCH_ENABLED=1

Keyboard shortcuts

Ctrl+GGO bar — symbol lookup
Ctrl+KCommand palette
Ctrl+JAI research agent
F1–F9Workspace switching
1–7Timeframe hotkeys
EscClose panel or dialog