Skip to main content

A local, keyboard-driven Bloomberg-style market terminal for your shell.

Project description

bbterm

A local, keyboard-driven market terminal — a Bloomberg-style TUI you run in your own terminal. Price charts, a watchlist, statistics, and SEC EDGAR fundamentals and filings, all backed by a local cache so it's fast, works offline once data is fetched, and costs almost nothing to run.

Built with Textual (TUI), plotext (terminal charts), DuckDB (local cache), and Databento for market data.

Features

  • Hybrid command bar — press : to type a command. A bare ticker loads a symbol (AAPL); verbs run actions (ADD, DEL, GP, DES, FA, FIL, ?).
  • Candlestick + volume chart (GP), with c to toggle a line view and 16 for time ranges (1D / 5D / 1M / 6M / 1Y / 5Y).
  • Statistics panel (DES) — last, 52-week high/low, 1M and YTD returns, average volume, and day range, all computed from cached price bars.
  • Fundamentals (FA) — revenue, net income, EPS, assets, cash flow and more from SEC EDGAR, each with its fiscal year and year-over-year change.
  • Recent filings (FIL) — the company's latest 10-K / 10-Q / 8-K filings with dates and links, from SEC EDGAR.
  • Persisted watchlistADD/DEL edit it and the change is saved.
  • Local cache — market bars and EDGAR data are cached in DuckDB; each paid record is bought once, and EDGAR data is reused for 24 hours.

Architecture

UI widgets never fetch data — they render what the DataService returns. The service is an async, cache-through layer over a DuckDB store, fetching only the date ranges it's missing. Data providers sit behind small Protocols:

  • Databento — primary historical bars (when DATABENTO_API_KEY is set).
  • yfinance — free fallback for bars/quotes when no Databento key is present.
  • SEC EDGAR — fundamentals and filings (free, official, no API key), accessed with the standard library only.

All parsing and number-crunching lives in pure, unit-tested modules (commands.py, data/stats.py, data/fundamentals.py); widgets stay dumb.

Requirements

  • Python ≥ 3.11
  • A Databento API key is optional — without it, bbterm runs on the free yfinance fallback. EDGAR needs no key.

Install

From PyPI (recommended):

pipx install bbterm-tui     # or: pip install bbterm-tui

The installed command and import name are bbterm (only the PyPI package is named bbterm-tui). To enable the Databento provider: pipx install "bbterm-tui[databento]".

To install the latest unreleased main instead, via pipx:

pipx install git+https://github.com/sgjlee0520/bbterm.git

The core install runs on the free yfinance + SEC EDGAR path. To enable the Databento provider (requires a DATABENTO_API_KEY):

pipx install "git+https://github.com/sgjlee0520/bbterm.git#egg=bbterm[databento]"

Contributors (editable, from a clone):

python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"          # add ,databento to work on the Databento provider

Configure

Settings come from environment variables or a .env file in the project root:

Variable Default Purpose
DATABENTO_API_KEY (unset) Enables Databento as the bar provider
BBTERM_DB_PATH data/market.duckdb Local cache database path
BBTERM_COST_CAP_USD 1.0 Per-request Databento cost ceiling
BBTERM_DATASET EQUS.MINI Databento dataset

Run

bbterm-sync     # optional: pre-cache recent daily bars for your watchlist
bbterm          # launch the terminal

Keys & commands

Input Action
: Focus the command bar (Esc / Enter to leave)
<ticker> Load a symbol
ADD <sym> / DEL <sym> Edit the watchlist (saved)
GP / DES Chart / statistics
FA / FIL Fundamentals / recent SEC filings
c Toggle candlestick / line chart
16 Time range (1D / 5D / 1M / 6M / 1Y / 5Y)
r Refresh · q Quit · ? Help

A beginner-friendly guide is in docs/manual/bbterm-guide.tex (build the PDF with pdflatex bbterm-guide.tex).

Tests

python -m pytest

Tests make no network calls and spend no Databento credits; live API access is exercised only by the manual scripts under scripts/.

Notes

  • yfinance is an unofficial data source intended here as a free development fallback only.
  • SEC EDGAR requests send a declared User-Agent with a contact address, as the SEC requires.

License

bbterm is licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). See LICENSE. Copyright © 2026 sgjlee0520.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bbterm_tui-0.1.2.tar.gz (45.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bbterm_tui-0.1.2-py3-none-any.whl (40.3 kB view details)

Uploaded Python 3

File details

Details for the file bbterm_tui-0.1.2.tar.gz.

File metadata

  • Download URL: bbterm_tui-0.1.2.tar.gz
  • Upload date:
  • Size: 45.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for bbterm_tui-0.1.2.tar.gz
Algorithm Hash digest
SHA256 6f49722011b36b6a0f0bcc2b26bf6daea8e0f5519bbdcf7ba1985d86015b6cfc
MD5 a6c6b756c66f02fabd8d71ef7d2ded5b
BLAKE2b-256 4050cd898494e10ac76fc9becfdf90e23a3f88240ca8c0b4267d53246900f49d

See more details on using hashes here.

Provenance

The following attestation bundles were made for bbterm_tui-0.1.2.tar.gz:

Publisher: release.yml on sgjlee0520/bbterm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bbterm_tui-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: bbterm_tui-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 40.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for bbterm_tui-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1cf07f2f5ace3582065b6b3a646c7334a8d1b7f0e3508025242f5a064ce243e3
MD5 695569ed6973e61f2acd48cb7c740709
BLAKE2b-256 25a55d1d821c242ec44ffdcf21c7622d00deb37e30ff3c4fb3ba9ce55a3ba142

See more details on using hashes here.

Provenance

The following attestation bundles were made for bbterm_tui-0.1.2-py3-none-any.whl:

Publisher: release.yml on sgjlee0520/bbterm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page