Track stocks, crypto, and derivatives prices and positions in real time from your terminal
6,224
stars
473
commits
Go
primary language
Jun 28, 2026
updated
Terminal stock & crypto price watcher and position tracker
Download the pre-compiled binaries from the releases page and copy to a location in PATH or see quick installs below
homebrew
brew install achannarasappa/tap/ticker
linux
curl -Ls https://api.github.com/repos/achannarasappa/ticker/releases/latest \
| grep -wo "https.*linux-amd64*.tar.gz" \
| wget -qi - \
&& tar -xvf ticker*.tar.gz ticker \
&& chmod +x ./ticker \
&& sudo mv ticker /usr/local/bin/
windows
winget install -e --id achannarasappa.ticker
docker
docker run -it --rm achannarasappa/ticker
Note: config file can be mounted from the host machine by using a bind mount with -v ~/.ticker.yaml:/.ticker.yaml
snap
sudo snap install ticker
sudo snap connect ticker:ticker-config
Note: config file will need to be set with --config $HOME/ticker.yaml since Snap does not allow access to dotfiles
These repositories are maintained by a third-party and may not have the latest versions available
MacPorts
sudo port selfupdate
sudo port install ticker
ticker -w NET,AAPL,TSLA
| Option Name | Alias | Flag | Default | Description |
|---|---|---|---|---|
| --config | ~/.ticker.yaml | config file location with watchlist and positions | ||
interval | -i | --interval | 5 | Refresh interval in seconds |
watchlist | -w | --watchlist | comma separated list of symbols to watch | |
show-tags | --show-tags | display currency, exchange name, and quote delay for each quote | ||
show-fundamentals | --show-fundamentals | display open price, previous close, and day range | ||
show-separator | --show-separator | layout with separators between each quote | ||
show-summary | --show-summary | show total day change, total value, and total value change | ||
show-positions | --show-positions | show positions including weight, average cost, and quantity | ||
sort | --sort | sort quotes on the UI - options are change percent (default), alpha, value, and user | ||
version | --version | print the current version number | ||
cache | --no-cache | true | cache data retrieved at startup | |
debug | --debug | enable debug logging to ./ticker-log-<date>.log |
Configuration is not required to watch stock price but is helpful when always watching the same stocks. Configuration can also be used to set cost basis lots which will in turn be used to show total gain or loss on any position.
# ~/.ticker.yaml
show-summary: true
show-tags: true
show-fundamentals: true
show-separator: true
show-positions: true
interval: 5
currency: USD
currency-summary-only: false
watchlist:
- NET
- TEAM
- ESTC
- BTC-USD # Bitcoin price via Yahoo
- SOL.X # Solana price via Coinbase
- BIT-30MAY25-CDE.CB # Bitcoin futures contract price via Coinbase
lots:
- symbol: "ABNB"
quantity: 35.0
unit_cost: 146.00
- symbol: "ARKW"
quantity: 20.0
unit_cost: 152.25
- symbol: "ARKW"
quantity: 20.0
unit_cost: 145.35
fixed_cost: 7.00 # e.g. brokerage commission fee
groups:
- name: crypto
watchlist:
- SHIB-USD
- VGX-USD
lots:
- symbol: SOL1-USD
quantity: 17
unit_cost: 159.10
.ticker.yaml are optionallots are implicitly added to the watchlistquantity, unit_cost) for the same symbol, include two or more entries - see ARKW example above.ticker.yaml can be set in user home directory, the current directory, or XDG config homeWith --show-summary, --show-tags, --show-fundamentals, --show-positions, and --show-separator options set, the layout and information displayed expands:
It's possible to set a custom sort order with the --sort flag or sort: config option with these options:
alpha to sort alphabetically by symbolvalue to sort by position valueuser to sort by the order defined in configuration with positions on first then watched symbolsWatchlists and lots can be grouped in .ticker.yml under the groups property. While running ticker, press TAB to cycle forward through groups or SHIFT+TAB to cycle backward.
watchlist or lots properties are defined in the configuration file, the entries there will be added to a group named default which will always be shown firstticker pulls market data from a few different sources with Yahoo Finance as the default. Symbols for non default data sources follow the format <symbol>.<source> where <symbol> is the canonical symbol within that data source and <source> is the data source specifier. Below is a list of the supported data sources and their specifiers:
.X - symbols with this suffix are shorthand symbols that are specific to ticker and intended to provide more concise and familiar symbols for popular assets (e.g. using SOL.X rather than SOLANA.CG)
.CB - symbols with this suffix will use Coinbase as the data source. The symbol can be found by searching for the asset on Coinbase and finding the symbol for the asset. (e.g. for Starknet check the market page to find the symbol STRK and set the symbol to STRK.CB in ticker).Note: Coincap (.CC) and CoinGecko (.CG) are no longer supported after v5.0.0
ticker supports converting from the exchange's currency to a local currency. This can be set by setting the currency property in .ticker.yaml to a ISO 4217 3-digit currency code.
currency is defined, all values are converted including summary, quote, and positioncurrency is definedcurrency is not set (default behavior) and the show-summary option is enabled, the summary will be calculated in USD regardless of the exchange currency to avoid mixing currenciescurrency-summary-only is set to true and a value is set for currency, only the summary values will be convertedcurrency-disable-unit-cost-conversion flag to true, currency conversion will not be done when calculating the cost basis. This can be useful for users that purchase a non-US asset and want to use the currency exchange rate at the time of purchase by inputting the unit cost in their local currency (set in currency) rather than using the most recent currency exchange rate.ticker supports quotes returned in a currency's minor unit rather than its major unit (e.g. London Stock Exchange listings quoted in pence as GBp instead of pounds as GBP). Minor unit conversion to major unit behavior can be controlled similarly to the currency conversion feature.
These are the behaviors for a minor unit quote:
currency set (or currency-summary-only: true) - per-position values, quote price, and the cost basis are all displayed in the minor unit and cost basis should be set in the minor unitcurrency is set - all displayed values are converted to the major unit. Cost basis should still be entered in the minor unitcurrency is set with currency-disable-unit-cost-conversion - displayed values are converted to the major unit and cost basis should be set in the major unitticker caches reference data to single local file shared between sessions and instances of ticker to speed up startup. The cache can be disabled with --no-cache flag or cache: false in .ticker.yaml.
ticker supports setting custom color schemes from the config file. Colors are represented by a hex triplet. Below is an annotated example config block from .ticker.yaml where custom colors are set:
# ~/.ticker.yaml
watchlist:
- NET
- TEAM
- ESTC
- BTC-USD
colors:
text: "#005fff"
text-light: "#0087ff"
text-label: "#00d7ff"
text-line: "#00ffff"
text-tag: "#005fff"
background-tag: "#0087ff"
ticker supports printing positions to the terminal as text by using ticker print. Output defaults to JSON but CSV output can also be generated by passing the --format=csv flag.
$ ticker --config=./.ticker.yaml print
[{"name":"Airbnb, Inc.","symbol":"ABNB","price":164.71,"value":16965.13,"cost":15038,"quantity":103,"weight":53.66651978212161},{"name":"Tesla, Inc.","symbol":"TSLA","price":732.35,"value":14647,"cost":15660,"quantity":20,"weight":46.33348021787839}]
--config flag--show-tags flag to include timeliness of data alongside quotes in ticker. Yahoo Finance also relies on polling which introduces some delay (>=5s). interval determines the polling frequency.-CDE suffix) are polling based however Basis is updated in near real-time based on spot market data changestickerHORIZONTAL LINE SEPARATOR unicode character is required to properly render separators (--show-separator option).ticker.yaml from the command lineRunning tests:
go tool ginkgo -cover ./...
Linting:
go tool golangci-lint run
ticker usesGo
100.0%
Track stocks, crypto, and derivatives prices and positions in real time from your terminal
6,224
stars
473
commits
Go
primary language
Jun 28, 2026
updated
Terminal stock & crypto price watcher and position tracker
Download the pre-compiled binaries from the releases page and copy to a location in PATH or see quick installs below
homebrew
brew install achannarasappa/tap/ticker
linux
curl -Ls https://api.github.com/repos/achannarasappa/ticker/releases/latest \
| grep -wo "https.*linux-amd64*.tar.gz" \
| wget -qi - \
&& tar -xvf ticker*.tar.gz ticker \
&& chmod +x ./ticker \
&& sudo mv ticker /usr/local/bin/
windows
winget install -e --id achannarasappa.ticker
docker
docker run -it --rm achannarasappa/ticker
Note: config file can be mounted from the host machine by using a bind mount with -v ~/.ticker.yaml:/.ticker.yaml
snap
sudo snap install ticker
sudo snap connect ticker:ticker-config
Note: config file will need to be set with --config $HOME/ticker.yaml since Snap does not allow access to dotfiles
These repositories are maintained by a third-party and may not have the latest versions available
MacPorts
sudo port selfupdate
sudo port install ticker
ticker -w NET,AAPL,TSLA
| Option Name | Alias | Flag | Default | Description |
|---|---|---|---|---|
| --config | ~/.ticker.yaml | config file location with watchlist and positions | ||
interval | -i | --interval | 5 | Refresh interval in seconds |
watchlist | -w | --watchlist | comma separated list of symbols to watch | |
show-tags | --show-tags | display currency, exchange name, and quote delay for each quote | ||
show-fundamentals | --show-fundamentals | display open price, previous close, and day range | ||
show-separator | --show-separator | layout with separators between each quote | ||
show-summary | --show-summary | show total day change, total value, and total value change | ||
show-positions | --show-positions | show positions including weight, average cost, and quantity | ||
sort | --sort | sort quotes on the UI - options are change percent (default), alpha, value, and user | ||
version | --version | print the current version number | ||
cache | --no-cache | true | cache data retrieved at startup | |
debug | --debug | enable debug logging to ./ticker-log-<date>.log |
Configuration is not required to watch stock price but is helpful when always watching the same stocks. Configuration can also be used to set cost basis lots which will in turn be used to show total gain or loss on any position.
# ~/.ticker.yaml
show-summary: true
show-tags: true
show-fundamentals: true
show-separator: true
show-positions: true
interval: 5
currency: USD
currency-summary-only: false
watchlist:
- NET
- TEAM
- ESTC
- BTC-USD # Bitcoin price via Yahoo
- SOL.X # Solana price via Coinbase
- BIT-30MAY25-CDE.CB # Bitcoin futures contract price via Coinbase
lots:
- symbol: "ABNB"
quantity: 35.0
unit_cost: 146.00
- symbol: "ARKW"
quantity: 20.0
unit_cost: 152.25
- symbol: "ARKW"
quantity: 20.0
unit_cost: 145.35
fixed_cost: 7.00 # e.g. brokerage commission fee
groups:
- name: crypto
watchlist:
- SHIB-USD
- VGX-USD
lots:
- symbol: SOL1-USD
quantity: 17
unit_cost: 159.10
.ticker.yaml are optionallots are implicitly added to the watchlistquantity, unit_cost) for the same symbol, include two or more entries - see ARKW example above.ticker.yaml can be set in user home directory, the current directory, or XDG config homeWith --show-summary, --show-tags, --show-fundamentals, --show-positions, and --show-separator options set, the layout and information displayed expands:
It's possible to set a custom sort order with the --sort flag or sort: config option with these options:
alpha to sort alphabetically by symbolvalue to sort by position valueuser to sort by the order defined in configuration with positions on first then watched symbolsWatchlists and lots can be grouped in .ticker.yml under the groups property. While running ticker, press TAB to cycle forward through groups or SHIFT+TAB to cycle backward.
watchlist or lots properties are defined in the configuration file, the entries there will be added to a group named default which will always be shown firstticker pulls market data from a few different sources with Yahoo Finance as the default. Symbols for non default data sources follow the format <symbol>.<source> where <symbol> is the canonical symbol within that data source and <source> is the data source specifier. Below is a list of the supported data sources and their specifiers:
.X - symbols with this suffix are shorthand symbols that are specific to ticker and intended to provide more concise and familiar symbols for popular assets (e.g. using SOL.X rather than SOLANA.CG)
.CB - symbols with this suffix will use Coinbase as the data source. The symbol can be found by searching for the asset on Coinbase and finding the symbol for the asset. (e.g. for Starknet check the market page to find the symbol STRK and set the symbol to STRK.CB in ticker).Note: Coincap (.CC) and CoinGecko (.CG) are no longer supported after v5.0.0
ticker supports converting from the exchange's currency to a local currency. This can be set by setting the currency property in .ticker.yaml to a ISO 4217 3-digit currency code.
currency is defined, all values are converted including summary, quote, and positioncurrency is definedcurrency is not set (default behavior) and the show-summary option is enabled, the summary will be calculated in USD regardless of the exchange currency to avoid mixing currenciescurrency-summary-only is set to true and a value is set for currency, only the summary values will be convertedcurrency-disable-unit-cost-conversion flag to true, currency conversion will not be done when calculating the cost basis. This can be useful for users that purchase a non-US asset and want to use the currency exchange rate at the time of purchase by inputting the unit cost in their local currency (set in currency) rather than using the most recent currency exchange rate.ticker supports quotes returned in a currency's minor unit rather than its major unit (e.g. London Stock Exchange listings quoted in pence as GBp instead of pounds as GBP). Minor unit conversion to major unit behavior can be controlled similarly to the currency conversion feature.
These are the behaviors for a minor unit quote:
currency set (or currency-summary-only: true) - per-position values, quote price, and the cost basis are all displayed in the minor unit and cost basis should be set in the minor unitcurrency is set - all displayed values are converted to the major unit. Cost basis should still be entered in the minor unitcurrency is set with currency-disable-unit-cost-conversion - displayed values are converted to the major unit and cost basis should be set in the major unitticker caches reference data to single local file shared between sessions and instances of ticker to speed up startup. The cache can be disabled with --no-cache flag or cache: false in .ticker.yaml.
ticker supports setting custom color schemes from the config file. Colors are represented by a hex triplet. Below is an annotated example config block from .ticker.yaml where custom colors are set:
# ~/.ticker.yaml
watchlist:
- NET
- TEAM
- ESTC
- BTC-USD
colors:
text: "#005fff"
text-light: "#0087ff"
text-label: "#00d7ff"
text-line: "#00ffff"
text-tag: "#005fff"
background-tag: "#0087ff"
ticker supports printing positions to the terminal as text by using ticker print. Output defaults to JSON but CSV output can also be generated by passing the --format=csv flag.
$ ticker --config=./.ticker.yaml print
[{"name":"Airbnb, Inc.","symbol":"ABNB","price":164.71,"value":16965.13,"cost":15038,"quantity":103,"weight":53.66651978212161},{"name":"Tesla, Inc.","symbol":"TSLA","price":732.35,"value":14647,"cost":15660,"quantity":20,"weight":46.33348021787839}]
--config flag--show-tags flag to include timeliness of data alongside quotes in ticker. Yahoo Finance also relies on polling which introduces some delay (>=5s). interval determines the polling frequency.-CDE suffix) are polling based however Basis is updated in near real-time based on spot market data changestickerHORIZONTAL LINE SEPARATOR unicode character is required to properly render separators (--show-separator option).ticker.yaml from the command lineRunning tests:
go tool ginkgo -cover ./...
Linting:
go tool golangci-lint run
ticker usesGo
100.0%