OpenTerminal README

The project's README from github.com/ErTasselli/OpenTerminal. As one markdown file: README.md.

OpenTerminal

A Terminal‑style workspace for the rest of us — built entirely on free, public market data.

Dark. Dense. Keyboard‑driven. Zero paid API keys, zero subscriptions.

Stack License: MIT No API Key Required PRs Welcome

ErTasselli%2FOpenTerminal | Trendshift


OpenTerminal dashboard — live chart, quote panel, watchlist, news and macro indexes

⭐ If this is useful to you, consider starring the repo — it genuinely helps other people find it.


Why OpenTerminal?

Real trading terminals cost $2,000+ a month. Most retail dashboards either lock the good stuff behind a paywall or run on a single flaky data source that breaks the moment you actually need it.

OpenTerminal takes a different approach: it stitches together several free, publicly documented (or reverse‑engineered but widely used) market data endpoints — the same ones that power major finance sites' own front ends — into one fast, keyboard‑first, widget‑based dashboard that runs entirely on your machine. Every data endpoint has an automatic fallback chain, so a single provider hiccup never takes the whole app down.

No signup. No credit card. No rate‑limited demo tier. Clone it, npm install, and you have a live terminal in under a minute.


✨ Features


📸 A closer look

Charting

Candlesticks, bars, line, or area — 8 timeframes, six technical indicators, and a live legend under your cursor showing OHLC, volume, and every active indicator's value for the candle you're pointing at.

Candlestick chart with SMA/RSI/MACD indicators and hover legend

Live sector heatmap

The whole US equity market as a treemap — sized by market cap, colored by daily % change, refreshing every few seconds so nothing you're watching ever goes stale.

Live sector heatmap of the US equity market

Crypto

Top assets with 7‑day sparklines and BTC/ETH dominance — click through to full OHLCV candlestick charting for any listed coin, same charting engine as stocks.

Crypto board with sparklines and dominance

News

Headlines aggregated and de‑duplicated across multiple sources, filterable per‑symbol or global, so you're never digging through five tabs to catch up.

Per-symbol and global news feed, aggregated and de-duplicated

🗂️ Data sources

No paid API, no keys, and no single point of failure — every endpoint has a fallback chain, and results are cached with a stale‑while‑revalidate strategy so a temporary outage never blanks out the UI.

Data Primary source Fallback
Quotes (stocks/ETFs) Nasdaq public quote API Yahoo Finance → Stooq
Fundamentals (P/E, EPS, beta, div yield) TradingView scanner API —
Historical candles Nasdaq chart API Yahoo Finance → Stooq
Symbol search TradingView symbol search Yahoo Finance
Full‑market screener / heatmap TradingView scanner API (live, whole US market) —
Options chain Nasdaq option‑chain API Yahoo Finance
News Yahoo Finance RSS Google News RSS
Crypto quotes & board CoinGecko Binance public API
Crypto candles Binance public API (klines) —
Macro (Treasury yields, VIX) FRED (Federal Reserve) —
Economic calendar (schedule, forecast, previous) Forex Factory public feed —
Economic calendar (actual — Fed / ECB / CPI / NFP only) FRED (Federal Reserve) —
Earnings calendar (next/last date, EPS estimate) TradingView scanner API —
Earnings history (forecast vs. actual, surprise %) Nasdaq earnings‑surprise API —

⚠️ These are public endpoints, not officially licensed data feeds — treat prices as delayed/indicative, not execution‑grade. See server/src/providers/ — each provider is a small, isolated module, so swapping or adding a data source is a 30‑minute job.


🚀 Quick start

git clone https://github.com/ErTasselli/openterminal.git
cd openterminal
npm install
npm run dev

That's it — no .env file required to get a fully working terminal.

Optional: AI assistant

export ANTHROPIC_API_KEY=sk-ant-...
npm run dev

Without a key, everything else still works — the AI widget just shows a friendly "unavailable" message instead of failing.

Two optional knobs for the assistant, both standard for the Anthropic SDK:

Security defaults


🐳 Docker

docker compose up --build

Portfolio data persists in the terminal-data volume (SQLite, WAL mode). Ports are published on 127.0.0.1 only by default; see Security defaults to expose it deliberately.


🧱 Tech stack

Layer Stack
Frontend Next.js 15 · React 19 · TypeScript · Tailwind CSS 4 · Zustand · TanStack Query
Charts lightweight-charts (candles/indicators) · D3 (heatmap treemap) · Recharts (yield curve)
Backend Node.js · Express · TypeScript
Database SQLite (better-sqlite3, WAL mode)
AI Anthropic Claude (optional)

📁 Project structure

├── server/                  # Express + TypeScript API
│   └── src/
│       ├── providers/       # nasdaq, tradingview, yahoo, stooq, fred, econcalendar, coingecko, binance, news
│       ├── routes/          # market, portfolio, ai
│       ├── cache.ts         # TTL cache with stale-while-revalidate fallback
│       └── db.ts            # SQLite (better-sqlite3, WAL)
└── web/                      # Next.js 15 + React 19 + Tailwind 4
    ├── components/           # TopBar, Sidebar, Workspace, CommandPalette
    ├── components/widgets/   # Chart, Quote, Watchlist, News, Screener, Heatmap, Crypto, Options, Macro, Portfolio, Calendar, AI
    ├── lib/                  # API client, technical indicators
    └── store/                # Zustand store (workspace layout, persisted)

Run tests with npm test (Vitest, no network calls). CI runs on every push — see .github/workflows/ci.yml.


🗺️ Roadmap

Have an idea? Open an issue — contributions are very welcome.


🤝 Contributing

Pull requests are welcome, especially:

Please open an issue first for anything non‑trivial so we can align on approach before you invest the time.


Known limitations


⚖️ Disclaimer

For personal and educational use only. Market data comes from public endpoints and may be delayed, incomplete, or occasionally wrong — do not use this for real investment decisions.

This project is not affiliated with, endorsed by, or sponsored by any of the data providers it connects to. It does not host or redistribute data to third parties — it's source code you run yourself, fetching data directly from the provider. Respect the terms of service of the underlying data providers; most free sources are licensed for personal/research use only and prohibit commercial redistribution.

License

MIT


star the repo ⭐ — it's the best way to support the project.

OpenTerminal (ErTasselli/OpenTerminal)

Searching Database…

What is this?OpenTerminal is a self-hosted, terminal-style trading dashboard that aggregates free public market data for stocks, crypto, and macro indicators into one keyboard-driven workspace, with no paid API keys or subscriptions required.
Is this a desktop app or something I run in the browser?It is a self-hosted web app: a Next.js/React frontend paired with a Node.js/Express backend that you run yourself (locally or via Docker) and then open in your browser.
How do I get it running?Clone the repo and run npm install, then start it — the web UI and API come up with no .env file required; Docker is also supported with portfolio data persisted in a SQLite volume.
Do I need an Anthropic API key for anything?No — the whole dashboard works without any keys. An Anthropic API key only unlocks the optional AI assistant widget; without one that widget just shows an unavailable message instead of breaking anything else.
How reliable is the market data?The data comes from public (and sometimes reverse-engineered) endpoints rather than licensed feeds, so prices should be treated as delayed or indicative, not execution-grade; each data type still has an automatic fallback provider if the primary source goes down.
Is it safe to expose this beyond my own machine?By default the API only binds to 127.0.0.1 and requires an auto-generated shared secret for the portfolio and AI endpoints, so nothing else on your network can reach it; exposing it further means manually setting APIHOST, APIKEY, and WEBORIGIN, and the project doesn't terminate HTTPS itself.
What can the full-market screener and heatmap do?The screener filters the entire US equity market by sector, market cap, % change, and volume with sortable columns, while the live sector heatmap shows the same market as a treemap sized by market cap and colored by daily % change, refreshing every few seconds.
What indicators does the charting support?Charts support candlesticks, bars, line, and area views across 8 timeframes with SMA, EMA, VWAP, Bollinger Bands, RSI, and MACD indicators, shown live under your cursor alongside OHLC and volume.
Can I track my own trades in it?Yes — the built-in portfolio tracker lets you log buy/sell transactions and tracks average cost plus realized and unrealized P&L, persisted locally in SQLite.
Why build this instead of using a real trading terminal?Real trading terminals cost $2,000+ a month and most free dashboards rely on one flaky data source; OpenTerminal stitches together several free public endpoints with automatic fallback chains so a single provider outage never takes the app down.
Creator
ErTasselli
Size
3.5 MB
Stars
1.8K
Age
2mo
Commits · 90 Days