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…

这是什么?OpenTerminal 是一个可自行部署的终端风格交易看板,它把股票、加密货币和宏观经济指标的免费公开行情数据整合到一个纯键盘操作的工作区中,不需要任何付费 API 密钥或订阅。
这是桌面应用,还是要我在浏览器里运行的东西?它是一个可自行部署的 Web 应用:Next.js/React 前端搭配 Node.js/Express 后端,由你自己运行(本地或通过 Docker),然后在浏览器里打开。
我怎么把它跑起来?克隆仓库并运行 npm install,然后启动即可——不需要 .env 文件,网页界面和 API 就能起来;也支持 Docker,投资组合数据会持久化保存在 SQLite 卷里。
我需要 Anthropic API 密钥吗?不需要——整个看板没有任何密钥也能正常使用。Anthropic API 密钥只是用来解锁可选的 AI 助手小部件;没有密钥时,那个小部件只会显示不可用的提示,不会影响其他功能。
行情数据可靠吗?数据来自公开(有些是逆向工程得到的)接口,而不是授权数据源,所以价格应视为延迟或仅供参考,不能用于实际下单;不过每种数据都有自动切换的备用数据源,主数据源挂了也能顶上。
把它暴露到我自己的电脑之外安全吗?默认情况下,API 只绑定到 127.0.0.1,并且投资组合和 AI 相关接口需要一个自动生成的共享密钥,所以局域网里的其他设备无法访问;如果要进一步对外暴露,需要手动设置 APIHOST、APIKEY 和 WEBORIGIN,而且项目本身不提供 HTTPS。
全市场筛选器和热力图能做什么?筛选器可以按行业、市值、涨跌幅和成交量筛选整个美股市场,并支持按列排序;实时行业热力图则以矩形树图的形式展示同一市场,矩形大小代表市值、颜色代表当日涨跌幅,每隔几秒自动刷新。
图表支持哪些指标?图表支持蜡烛图、柱状图、折线图和面积图,覆盖 8 个时间周期,并提供 SMA、EMA、VWAP、布林带、RSI 和 MACD 指标,鼠标悬停时会实时显示这些指标以及 OHLC 和成交量。
我能在里面记录自己的交易吗?可以——内置的投资组合记录器让你录入买入和卖出交易,并自动跟踪平均成本以及已实现和未实现盈亏,数据保存在本地 SQLite 中。
为什么不直接用真正的交易终端,而要做这个?真正的交易终端每月要花 2000 美元以上,而大多数免费看板依赖单一且不稳定的数据源;OpenTerminal 把多个免费公开接口拼接在一起,并配有自动切换的备用链路,任何一家数据源出问题都不会导致整个应用瘫痪。
Creator
ErTasselli
Size
3.5 MB
Stars
1.8K
Age
2mo
Commits · 90 Days