A multi-market price ticker for Waybar: crypto, stocks & indices, commodities, forex, Treasury yields, and fiat currencies in one module — with no API key.
A compact line in your bar — hover for the full, color-coded table:
- Many markets, one widget, no API key. Crypto (CoinGecko), US stocks & indices, commodities and Treasury yields (CNBC), forex (ECB / Frankfurter) and fiat — each from the best free, key-less source. Track BTC, NVDA, the S&P 500, gold, the US 10Y and EUR/USD side by side.
- Never breaks your bar. Any failure — a dead API, a rate limit, a malformed response, even a corrupt config — still prints valid Waybar JSON and exits 0. A down provider never blanks the others.
- A tooltip worth opening. A column-aligned table grouped by asset class, color-coded up/down, that wraps long watchlists into stacked columns (great for narrow/vertical monitors) and picks up your Omarchy theme colors.
- Market-hours aware. Closed markets aren't polled and show
⏸ closed— only crypto runs 24/7. - Argentine market, too. As a bonus, full BYMA support via data912: the blue/MEP dollar plus local stocks, bonds, CEDEARs and ONs in pesos.
The tooltip groups your watchlist by asset class and wraps into columns as it grows:
- Crypto prices with 24h change (CoinGecko) — pick the quote currency per asset (
usd,ars, …) - Argentine dollar: oficial, blue, MEP/bolsa, CCL, etc. (DolarAPI), buy/sell/mid side
- Forex pairs (Frankfurter v2)
- Stocks/indices with no key via CNBC (
AAPL,.SPX); optional Finnhub with a free key - Commodities, indices & Treasury yields with no key via friendly aliases (
gold,wti,vix,us10y) — yields render as a percent - Argentine market (BYMA) with no key via data912 — acciones, bonos, CEDEARs, ONs (in ARS)
- Multi-column tooltip (
tooltip_rows_per_column) so large watchlists wrap instead of growing tall, with a column cap (tooltip_max_columns) that stacks extra columns into bands below — fits narrow/vertical monitors - Optional intraday low–high range per row (
tooltip_range) for CNBC-backed assets (stocks, indices, commodities, rates) - Market-hours aware: closed markets aren't polled (built-in calendars) and show
⏸ closed - Compact bar with a configurable format, or opt-in rotating "ticker-tape" mode
- Per-provider caching with TTLs and rate-limit (HTTP 429) backoff
- CSS classes for bar styling: lifecycle (
ok/partial/stale/error) + direction (up/down/flat/mixed) - Nerd Font, emoji, or ASCII icon sets
- Written in Rust — single binary, no runtime dependencies
yay -S tickerbargit clone https://github.com/mryll/tickerbar.git
cd tickerbar
make install PREFIX=~/.localOr system-wide: sudo make install.
tickerbar reads ~/.config/tickerbar/config.toml. Copy the example to get started:
mkdir -p ~/.config/tickerbar
cp config.example.toml ~/.config/tickerbar/config.toml[display]
mode = "fixed" # "fixed" | "rotate"
rotate_interval = 5 # seconds per asset (rotate mode only)
max_on_bar = 3 # assets shown on the bar (fixed mode)
icons = "nerd" # "nerd" | "emoji" | "ascii"
# Bar placeholders: {label} {price} {change_pct} {arrow} {glyph}
bar_format = "{glyph} {label} {price} {arrow}{change_pct}"
[[asset]]
label = "BTC"
provider = "coingecko"
id = "bitcoin" # CoinGecko coin id
quote = "usd" # any CoinGecko vs_currency (usd, ars, eur, …)
[[asset]]
label = "Blue"
provider = "dolarapi"
casa = "blue" # oficial | blue | bolsa | contadoconliqui | tarjeta | mayorista | cripto
side = "sell" # buy | sell | mid
[[asset]]
label = "EUR/USD"
provider = "frankfurter"
base = "eur"
quote = "usd"| Provider | Asset class | API key | Notes |
|---|---|---|---|
coingecko |
Crypto | No | id + quote (vs_currency). 24h change included. |
dolarapi |
Argentine peso | No | casa + side. Uses the provider's own update timestamp. |
frankfurter |
Forex | No | base + quote. Reference rates (daily). |
cnbc |
Stocks/indices | No | symbol — plain ticker (AAPL) or index with a leading dot (.SPX, .IXIC, .DJI). |
commodity |
Commodities | No | symbol — friendly alias (gold, silver, wti, brent, natgas, copper, platinum, palladium) or any raw CNBC symbol (@GC.1). Via CNBC. |
index |
Indices | No | symbol — friendly alias (vix, sp500, nasdaq, dow, dax, ftse, nikkei, hangseng) or raw (.VIX). Via CNBC. |
rate |
Treasury yields | No | symbol — us10y, us2y, us30y, us5y. Rendered as a percent (e.g. 4.53%). Via CNBC. |
data912 |
Argentine market (BYMA) | No | panel (acciones/bonos/cedears/corp) + symbol (e.g. ALUA, GD35, MELI). ARS, ~2h delay. |
finnhub |
Stocks/indices | Yes (free) | symbol. Token via FINNHUB_TOKEN env var. |
stooq |
Stocks/indices | No | symbol (e.g. aapl.us). Best-effort; often anti-bot-walled → n/d. |
Note
Stocks/indices work with no key via cnbc (CNBC's public quote endpoint, batched). It's an unofficial endpoint, so treat it as delayed/best-effort — tickerbar is not a live trading feed. If you want a documented/keyed source instead, use finnhub with a free key:
export FINNHUB_TOKEN=your_free_token # from https://finnhub.io; sent as a header, never in a URLNote
BTC/ARS via CoinGecko uses CoinGecko's market ARS (≈ official), not the blue dollar. Pricing crypto at the blue rate (cross-conversion) is intentionally not done in this version.
Don't want to hand-pick symbols? Print a curated, ready-to-paste watchlist and append it to your config:
tickerbar --list-presets # starter, crypto-top, megacap, indices-global, fx-majors, commodities, rates
tickerbar --preset crypto-top >> ~/.config/tickerbar/config.tomlstarter is a balanced cross-market set (crypto, a megacap, an index, gold, a Treasury yield, and a forex pair) — a good first config.
By default tickerbar does not poll a market while it's closed — it serves the last close
from cache and marks the panel ⏸ closed in the tooltip. Built-in calendars (timezone- and
DST-aware via chrono-tz): crypto 24/7; BYMA (data912) Mon–Fri 10:30–17:00 ART; US stocks
(cnbc/finnhub/stooq) Mon–Fri 09:30–16:00 ET; ECB forex (frankfurter) weekdays. Commodities,
indices and rates (commodity/index/rate) are always polled in this version (commodities
trade nearly 24/5) — they have no ⏸ closed badge.
[market_hours]
enabled = true # master switch (default)
[market_hours.providers.cnbc]
enabled = false # disable gating for one provider (e.g. a non-US stock via cnbc)Note
Stock providers (cnbc/finnhub/stooq) assume US hours; disable their gating if you
track a non-US instrument through them. Exchange holidays are not accounted for — only
weekly session hours.
Tooltip and bar colors are read from the active Omarchy theme at ~/.config/omarchy/current/theme/colors.toml on every run — the accent, the up/down green/red, and the foreground/background all follow your theme (light themes included). On non-Omarchy systems a built-in dark palette is used as a fallback.
| Gruvbox | Catppuccin Latte | Everforest |
|---|---|---|
![]() |
![]() |
![]() |
Add a custom module to ~/.config/waybar/config:
Then place "custom/tickerbar" in one of your modules-* arrays. Force a refresh anytime with:
pkill -RTMIN+8 waybarStyle it in ~/.config/waybar/style.css using the emitted classes:
#custom-tickerbar.up { color: #98c379; }
#custom-tickerbar.down { color: #e06c75; }
#custom-tickerbar.stale { opacity: 0.6; }
#custom-tickerbar.error { color: #e06c75; }cargo test # unit + never-crash tests (offline)
cargo test --features integration # real-API smoke tests (network; set FINNHUB_TOKEN for the finnhub one)
cargo clippy --all-targets -- -D warnings
cargo fmt



