ErTasselli/OpenTerminal

Finance

Run a local, keyboard-driven market terminal for US stocks, crypto, macro data and a small portfolio tracker.

2,144
380
TypeScript
MIT
3 months old

OpenTerminal is a self-hosted, terminal-style trading dashboard that pulls quotes, charts, news, options and macro series from free public endpoints without paid API keys or signups. It suits individuals who want a dense, customizable market workstation on their own machine for research and learning, not order execution.

What it does

A widget-based workspace (drag, resize, add, remove) holds panels for a quote panel, chart with 8 timeframes and six technical indicators, per-symbol and global news, a full US-market screener, a sector heatmap, options chain, a crypto board, a Treasury/VIX macro view, an economic and earnings calendar, and a portfolio tracker that records buy/sell transactions with average cost and realized/unrealized P&L. Layouts persist locally, and quotes and indexes refresh roughly every second.

A ⌘K palette searches stocks, ETFs and crypto; ⌥1–⌥9 add widgets.

How the data works

Each data type maps to a primary free source with an automatic fallback chain — for example quotes try Nasdaq, then Yahoo Finance, then Stooq; crypto quotes try CoinGecko then Binance. A TTL cache with stale-while-revalidate keeps a provider hiccup from blanking the UI, and providers are isolated modules under server/src/providers/, which the author describes as a roughly 30-minute job to swap or add (data sources).

The README is explicit that these are public, sometimes reverse-engineered endpoints, so prices are delayed or indicative and not execution-grade (disclaimer).

Requirements and constraints

  • Runtime: Node.js with npm for the quick start (npm install, npm run dev); Docker is also supported via docker compose up --build, with portfolio SQLite data persisted in a named volume (quick start).
  • Optional AI assistant: the AI widget needs an ANTHROPIC_API_KEY; without one, everything else works and the widget shows as unavailable. ANTHROPIC_BASE_URL and ANTHROPIC_MODEL can point it at another compatible endpoint (setup).
  • Exposure defaults: the API binds to 127.0.0.1 and only accepts the local web origin. Opening it to a network requires setting API_HOST, API_KEY and WEB_ORIGIN deliberately, and the project does not handle HTTPS itself (security defaults).
  • Known advisories: npm audit reports a moderate fast-xml-parser advisory (the vulnerable builder path is not used) and a high-severity postcss issue bundled in Next.js that needs a major-version upgrade; both are acknowledged rather than force-fixed (known limitations).
  • Licence and use: MIT, but the README limits the project to personal and educational use and warns against real investment decisions; free data sources are generally licensed for personal/research only and prohibit commercial redistribution (disclaimer).

It is source code you run yourself — it does not host or redistribute data for you.

Written by AI from the project's README, updated October 30, 2026. The project's own docs are the source of truth.