Skip to main content

crypto-terminal

A free, Bloomberg-style crypto terminal that runs in your shell. Live spot prices stream straight from the Coinbase Exchange public websocket: no API key, no account, no polling. Candlestick charts with a live last bar, indicators, price alerts, and search across every Coinbase pair.

Crypto terminal demo: live candles, indicators, coin search and a price alert

PyPI Textual Coinbase

Install

Requires Python 3.10+.

pipx install crypto-terminal
crypto-terminal

Or pip install crypto-terminal into any virtualenv.

Features

  • Live watchlist: last price, 24h change, and a sparkline of recent ticks. Prices flash green/red on every up/down tick.
  • Candlestick chart for the highlighted pair, with volume underneath. Six timeframes (1m to 1d candles) in a strip above the chart, three zoom levels and a full-width mode. The last candle follows the live price and a new one opens at each candle boundary. Prices are drawn to half a character row, the highest high and lowest low fill the panel exactly, and each axis label is the exact price of its grid line. Missing candles leave a gap rather than squashing time. A dashed line and tag mark the last price.
  • Indicators: SMA 20, EMA 50 and VWAP (resets at the UTC day) over the candles, RSI 14 in its own panel.
  • Coin search: add solana lists every online Solana pair (USD, USDC, USDT, EUR, GBP and BTC quotes first). Exact pairs like add SOL-BTC add directly. Sub-cent and BTC-quoted prices keep 5 significant figures.
  • Price alerts: on a level (> / <) or a percentage move. A firing alert rings the terminal bell, shows a toast, and sends a desktop notification (macOS, or Linux with notify-send). Pairs with an alert carry a 🔔.
  • Status line: connection state, time since the last tick, UTC clock. Shows STALE after 10s without data and reconnects automatically with exponential backoff.

Default pairs: BTC-USD, ETH-USD, XRP-USD, SOL-USD, ADA-USD.

How live is it?

Measured on the five default pairs over 60s:

Quiet (Sunday) Busy
Price updates ~5.5 / s ~12 / s
Bandwidth ~0.02 Mbps ~0.04 Mbps

Coinbase pushes an update on every trade (bursts are batched); nothing is polled. A heartbeat arrives every second, so a dead connection is spotted and replaced within seconds. The chart redraws at most four times a second.

Keys

Key Action
↑ ↓ Select pair (chart follows)
1 – 6 Candles: 1m, 5m, 15m, 1h, 6h, 1d
[ ] Shorter / longer candles
+ - Zoom: 4, 2 or 1 columns per candle
f Full-width chart (hides the watchlist)
/ or : Open command bar (esc closes it)
ctrl+q Quit

Commands

Command Effect
add SOL-USD Add a pair
add sol / add solana Search by symbol or name: pick with ↑ ↓, enter adds, esc cancels
rm ADA-USD Remove a pair
ind sma20 ema50 vwap rsi Toggle indicators (any subset)
ind off Clear all indicators
alert BTC-USD > 90000 Alert when the price reaches 90,000 or more (< for at or below)
alert BTC-USD move 5% Alert on a ±5% move from the current price
alerts List alerts with their numbers
unalert 2 Remove alert 2
quit Exit

Alerts fire once and are then removed. The watchlist, indicators and alerts are saved in ~/.config/crypto-terminal/ (or $XDG_CONFIG_HOME/crypto-terminal/).

From source

git clone https://github.com/owen-alderson/crypto-terminal.git
cd crypto-terminal
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python -m crypto_terminal

Architecture

crypto_terminal/
  feed.py        websocket client: subscribes to ticker + heartbeat, validates each message,
                 reconnects with exponential backoff (1s → 30s); 30s of silence = dead socket
  history.py     REST: candles, the product list for search, the live-candle update
  indicators.py  SMA, EMA, RSI, VWAP as pure functions
  alerts.py      alert rules, trigger check, desktop notification
  chart.py       the chart as a pure function: candles in, text lines out; wick tips exact to half a row, solid whole-row bodies
  theme.py       the colour palette
  widgets.py     PriceTable (watchlist), ChartPane (draws chart.py's lines), PairPicker (search results)
  app.py         Textual app: layout, command parsing, saved config, status line
tests/           pytest: parsing, indicators against reference values, search, alerts, reconnect
                 against a local websocket server, headless UI tests with Textual's Pilot (no internet)

The feed, the chart fetch and the product list run as Textual async workers. Changing the watchlist restarts the feed worker, and a new chart request cancels the previous one so a slow response can't draw the wrong pair.

Tests

pytest

History

This repo started as a Streamlit + CoinGecko portfolio dashboard that polled every 60s. That version is preserved at the v1-streamlit tag (git checkout v1-streamlit).

License

MIT, see LICENSE. Provided as is, with no warranty: this is a market-data viewer, not financial advice.

Metadata

Release files for crypto-terminal 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for crypto-terminal 2.1.0
File Size Uploaded
crypto_terminal-2.1.0.tar.gz 1.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for crypto-terminal 2.1.0
File Interpreter ABI Platform
crypto_terminal-2.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.5 MB

Release files / crypto_terminal-2.1.0.tar.gz

Download URL crypto_terminal-2.1.0.tar.gz
Size 1.5 MB
Tags Source
SHA-256 checksum
How to use checksums
7fc24e5918e237ae0501b78f251a1418d1c265bf45fe8da303a2fca72f1ea09f
BLAKE2b-256 checksum
How to use checksums
2c699a6cb6ee99498ebf5d4dc08e4411b7e360bd1c42681ee5ad26204e88be33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / crypto_terminal-2.1.0-py3-none-any.whl

Download URL crypto_terminal-2.1.0-py3-none-any.whl
Size 23.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e96377e30fdef930252162fea2db077dc478b0b3d87eb2d1a9eb630ab2cd06ad
BLAKE2b-256 checksum
How to use checksums
9c84cdd9ac9834e148683baecd049b92155a8b45266041d51ea2471d7fadc66d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.1.0 This release

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page