Track the markets you care about from the macOS menu bar. Ticker Bar combines stocks, crypto, exchange pairs, perpetual futures, on-chain tokens, and prediction markets in one fast, keyboard-first watchlist.
| Browse markets | Manage your watchlist |
|---|---|
![]() | ![]() |
| Advanced editor | Menu bar |
|---|---|
![]() | ![]() |
| Command | Purpose |
|---|---|
| Ticker Bar | Show the live menu bar item and watchlist dropdown. |
| Browse Markets | Search every supported market type and add results. |
| Manage Watchlist | Inspect, reorder, refresh, remove, or choose the primary asset. |
| Advanced Watchlist Editor | Bulk edit exact asset IDs, with validation and a 50-asset limit. |
| Update Market Data | Fetch fresh quotes and update the current watchlist cache. |
↩ runs the primary action.⌘ D opens market details.⌘ ↑ / ⌘ ↓ reorders an asset.⌃ X removes an asset.Menu Bar Style — choose a style from the Menu Bar submenu in Ticker Bar:
Primary TickerPrimary Ticker and ChangeMenu Bar Logo — toggle Logo: On / Off inside the Menu Bar style submenu. When enabled, real provider artwork appears beside the macOS menu-bar title. Dropdown rows retain their colored direction chevrons; logos also appear in Browse Markets, Manage Watchlist, and market details.
USD, CAD, EUR, or GBP for CoinGecko crypto quotes. Stocks, exchange pairs, futures, DEX tokens, and prediction markets remain in their provider-native USD or quote-currency representation.
Enter one asset per line. Blank lines and comments beginning with # are ignored.
stock:AAPL
crypto:bitcoin
binance:BTCUSDT
binanceperp:BTCUSDT
token:base:0x4200000000000000000000000000000000000006
polymarket:540817:yes
Bare stock symbols such as SPY and bare EVM contract addresses are normalized automatically. Invalid entries are reported instead of being silently discarded.
Ticker Bar stores the watchlist and quote cache locally through Raycast. It sends only the identifiers needed for quote and search requests to the selected public data providers; no account or API key is required. Those providers may rate-limit heavy watchlists. A failed refresh never replaces the last valid quote; instead, the cached quote is marked stale with the provider error and last successful update time.
Provider-specific cache windows range from one to five minutes. Manual refresh bypasses those windows, while rate-limit cooldowns are still respected to avoid repeatedly hammering a throttled service.
Availability and fields vary by provider and market. Ticker Bar labels the provider on every quote.
npm install
npm test
npm run lint
npm run build
The tests cover asset-ID normalization, display formatting, freshness filtering, failure states, request batching, and Polymarket outcome math.
Command views import from src/market.ts, a stable public façade. The
implementation is split by responsibility:
market-storage.ts owns watchlist, primary-asset, quote, and status
persistence.market-refresh.ts owns freshness windows, concurrency, cooldowns, and the
cross-command refresh lock.providers/ contains one adapter per external data source plus the quote and
search dispatcher.market-ids.ts, market-format.ts, and market-types.ts contain pure
domain logic shared by commands and providers.Keep provider-specific response types and normalization inside their adapter.
New commands should use the market.ts façade rather than importing provider
modules directly.
assets/ Public extension icon
media/ Images linked from the public README
metadata/ Raycast Store screenshots
src/ Commands, domain modules, and provider adapters
tests/ Pure logic and resilience tests
Before opening a contribution, run:
npm test
npm run lint
npm run build
token:base:0x….