Free & open-source macOS menu bar app to track stocks, ETFs, crypto & portfolio P&L in real-time. Native SwiftUI, no account, no subscription, privacy-first.
28
stars
165
commits
Swift
primary language
Sep 10, 2026
updated
A free, open-source macOS menu bar app for tracking stocks, ETFs, indices, crypto, and your portfolio P&L in real time.
No account. No API keys. No subscription. No tracking. Just your watchlist and portfolio, always one click away in the menu bar.
brew install simonsruggi/tap/stockdock
⬇️ Download · ✨ Features · 📸 Screenshots · ❤️ Sponsor · ☕️ Coffee · 🐛 Report a bug · 📝 Changelog
⭐️ Using StockDock? It's free and there's no tracking, so a GitHub star is the only way I know anyone's out there. If the app is useful to you, please star the repo — it takes a second and genuinely helps. And if you'd like to fuel development, you can ❤️ sponsor me — every feature stays free for everyone.
StockDock lives in your menu bar, but now it also opens into a complete desktop window. Click Open in the popover for your watchlist, portfolios, live charts, and news in one spacious view — everything stays in sync with the menu bar.
Also new: separate Price and After-hours columns in the watchlist (each sortable), news search by headline or ticker, add-to-portfolio straight from a stock's detail, sharper forex / sub-dollar price precision, and adjustable decimal places for percentages and values.
Stocks, ETFs, indices (S&P 500, NASDAQ…), crypto, and forex — anything with a Yahoo Finance symbol. Search by symbol, company name, or ISIN (e.g. AAPL, Tesla, IE00B4L5Y983).


| Watchlist | Portfolios | Settings |
|---|---|---|
![]() | ![]() | ![]() |
brew install simonsruggi/tap/stockdock
The app updates itself automatically via Sparkle — no need to run brew upgrade.
StockDock.zip from ReleasesStockDock.app to /ApplicationsRequires Xcode 15+ and macOS 14 Sonoma or later.
git clone https://github.com/simonsruggi/StockDock.git
cd StockDock
xcodebuild -scheme StockDock -configuration Release -destination 'platform=macOS' -derivedDataPath .build/xcode build
The app bundle will be at .build/xcode/Build/Products/Release/.
Add stocks by clicking Add stock at the bottom of the Watchlist tab. Search by symbol, company name, or ISIN (e.g. AAPL, Tesla, IE00B4L5Y983). A local filter box lets you quickly narrow the list by name, symbol, or ISIN. Stocks show:
Each of these rows can be toggled on/off in Settings → Watchlist Display.
Right-click a stock to remove it, add it to a portfolio, or create a price alert.
The purchase date is used to apply the historical exchange rate to your cost basis, so P&L stays accurate across currencies.
Each portfolio shows:
Right-click a holding to edit or delete it. Right-click a portfolio header to configure its notifications.
You can Export a single portfolio (or Export All) to a JSON file, and Import portfolios back — imports regenerate IDs and de-duplicate names so nothing is overwritten.
By default every holding is a plain long position. Turn on Settings → Advanced → "Enable short positions & leverage" to unlock a Long / Short picker and a per-holding leverage field when adding or editing a holding. P&L, market value, and portfolio percentages are computed with the correct sign and exposure so long and short baskets don't cancel each other out. Existing portfolios are unaffected — the feature is opt-in.
Create a one-shot alert from a watchlist stock's right-click menu. Six conditions are supported:
Alerts are evaluated on every price update (WebSocket tick, REST refresh, launch, and wake). When triggered they fire a local macOS notification once, then disarm. Manage them in Settings → Notifications: re-arm, delete, or see the "triggered" badge.
Right-click a portfolio header → Notifications… to configure per-portfolio alerts. Four modes:
Step-based anti-spam with hysteresis prevents repeat firing within the same step (re-fires only on the next step, resets daily). Rules and state persist per portfolio in data.json.
In Settings → Notifications, enable the webhook toggle and paste a Discord or Slack webhook URL. Every notification (price alerts and portfolio notifications) is mirrored to the webhook in addition to the macOS notification. The app auto-detects Discord (colored green/red embeds) vs Slack (text), and only posts to https URLs on known hosts (SSRF-safe). Use Send test to verify it works.
Click the gear icon tab to configure:
| Setting | Description |
|---|---|
| Stock Price Currency | Convert all displayed prices to a single currency, or keep original |
| Portfolio Currency | Base currency for portfolio totals and P&L (EUR, USD, GBP, CHF, JPY, CAD, AUD) |
| Show Extended Hours | Toggle pre-market and after-hours prices on/off — affects prices, P&L, and menu bar |
| Watchlist Display | Toggle company name, day range, 52-week range bar, and absolute change value per row |
| Menu Bar Display | What appears in your menu bar (see below) |
| Language | English, German, French, Spanish, Italian, Portuguese |
| Notifications | Discord/Slack webhook, plus management of price alerts and portfolio notifications |
| Option | Example |
|---|---|
| P&L | P&L +321.09€ |
| Daily P&L | Daily P&L +42.10€ |
| P&L % | P&L +2.3% |
| P&L + % | +321.09€ (+2.3%) |
| Total Value | 14396.67€ |
| Best Stock | AAPL +1.2% |
| Worst Stock | TSLA -0.8% |
| Best & Worst | ▲AAPL +1.2% ▼TSLA -0.8% |
| Icon Only | Chart icon |
Best/Worst are based on daily change % from your watchlist.
StockDock checks for updates automatically on launch via Sparkle. You can also check manually from Settings → Check for Updates. No action needed — updates install seamlessly in the background.
~/Library/Application Support/StockDock/data.json (watchlist, portfolios, alerts, portfolio notifications, webhook, and preferences)Is StockDock really free? Yes — free and open source under the MIT license, with no paid tier or subscription. If you want to support development, you can optionally sponsor me.
Does it work on Intel Macs? Yes. StockDock ships as a universal binary for both Apple Silicon and Intel, on macOS 14 (Sonoma) and later.
Where does the data come from? Public Yahoo Finance endpoints (WebSocket for live prices, REST for exchange rates). No API key needed.
Can I track crypto, ETFs, or indices? Yes — anything with a Yahoo Finance symbol, including crypto, ETFs, and market indices.
Do you collect any data about me? No. There's no analytics, no telemetry, no account. Everything stays local on your Mac.
How do I uninstall it?
brew uninstall stockdock (or drag the app to the Trash), then optionally delete ~/Library/Application Support/StockDock.
StockDock is free and open source, and it will always stay that way — no paid tiers, no premium lock, no subscription, ever. It's also completely private: there's no analytics, no telemetry, no way for me to know how many people use it.
If you find it useful, the best (and free) thing you can do is ⭐️ star the repo — it's quick and it's the only signal I get that the app is worth maintaining.
And if you'd like to go a step further, you can 💛 sponsor me on GitHub or ☕️ buy me a coffee. It's completely optional and changes nothing about the app — every feature stays free for everyone — but it helps me keep building and maintaining StockDock and my other open-source projects. Thank you! 🙏
Swift
99.6%
Free & open-source macOS menu bar app to track stocks, ETFs, crypto & portfolio P&L in real-time. Native SwiftUI, no account, no subscription, privacy-first.
28
stars
165
commits
Swift
primary language
Sep 10, 2026
updated
A free, open-source macOS menu bar app for tracking stocks, ETFs, indices, crypto, and your portfolio P&L in real time.
No account. No API keys. No subscription. No tracking. Just your watchlist and portfolio, always one click away in the menu bar.
brew install simonsruggi/tap/stockdock
⬇️ Download · ✨ Features · 📸 Screenshots · ❤️ Sponsor · ☕️ Coffee · 🐛 Report a bug · 📝 Changelog
⭐️ Using StockDock? It's free and there's no tracking, so a GitHub star is the only way I know anyone's out there. If the app is useful to you, please star the repo — it takes a second and genuinely helps. And if you'd like to fuel development, you can ❤️ sponsor me — every feature stays free for everyone.
StockDock lives in your menu bar, but now it also opens into a complete desktop window. Click Open in the popover for your watchlist, portfolios, live charts, and news in one spacious view — everything stays in sync with the menu bar.
Also new: separate Price and After-hours columns in the watchlist (each sortable), news search by headline or ticker, add-to-portfolio straight from a stock's detail, sharper forex / sub-dollar price precision, and adjustable decimal places for percentages and values.
Stocks, ETFs, indices (S&P 500, NASDAQ…), crypto, and forex — anything with a Yahoo Finance symbol. Search by symbol, company name, or ISIN (e.g. AAPL, Tesla, IE00B4L5Y983).


| Watchlist | Portfolios | Settings |
|---|---|---|
![]() | ![]() | ![]() |
brew install simonsruggi/tap/stockdock
The app updates itself automatically via Sparkle — no need to run brew upgrade.
StockDock.zip from ReleasesStockDock.app to /ApplicationsRequires Xcode 15+ and macOS 14 Sonoma or later.
git clone https://github.com/simonsruggi/StockDock.git
cd StockDock
xcodebuild -scheme StockDock -configuration Release -destination 'platform=macOS' -derivedDataPath .build/xcode build
The app bundle will be at .build/xcode/Build/Products/Release/.
Add stocks by clicking Add stock at the bottom of the Watchlist tab. Search by symbol, company name, or ISIN (e.g. AAPL, Tesla, IE00B4L5Y983). A local filter box lets you quickly narrow the list by name, symbol, or ISIN. Stocks show:
Each of these rows can be toggled on/off in Settings → Watchlist Display.
Right-click a stock to remove it, add it to a portfolio, or create a price alert.
The purchase date is used to apply the historical exchange rate to your cost basis, so P&L stays accurate across currencies.
Each portfolio shows:
Right-click a holding to edit or delete it. Right-click a portfolio header to configure its notifications.
You can Export a single portfolio (or Export All) to a JSON file, and Import portfolios back — imports regenerate IDs and de-duplicate names so nothing is overwritten.
By default every holding is a plain long position. Turn on Settings → Advanced → "Enable short positions & leverage" to unlock a Long / Short picker and a per-holding leverage field when adding or editing a holding. P&L, market value, and portfolio percentages are computed with the correct sign and exposure so long and short baskets don't cancel each other out. Existing portfolios are unaffected — the feature is opt-in.
Create a one-shot alert from a watchlist stock's right-click menu. Six conditions are supported:
Alerts are evaluated on every price update (WebSocket tick, REST refresh, launch, and wake). When triggered they fire a local macOS notification once, then disarm. Manage them in Settings → Notifications: re-arm, delete, or see the "triggered" badge.
Right-click a portfolio header → Notifications… to configure per-portfolio alerts. Four modes:
Step-based anti-spam with hysteresis prevents repeat firing within the same step (re-fires only on the next step, resets daily). Rules and state persist per portfolio in data.json.
In Settings → Notifications, enable the webhook toggle and paste a Discord or Slack webhook URL. Every notification (price alerts and portfolio notifications) is mirrored to the webhook in addition to the macOS notification. The app auto-detects Discord (colored green/red embeds) vs Slack (text), and only posts to https URLs on known hosts (SSRF-safe). Use Send test to verify it works.
Click the gear icon tab to configure:
| Setting | Description |
|---|---|
| Stock Price Currency | Convert all displayed prices to a single currency, or keep original |
| Portfolio Currency | Base currency for portfolio totals and P&L (EUR, USD, GBP, CHF, JPY, CAD, AUD) |
| Show Extended Hours | Toggle pre-market and after-hours prices on/off — affects prices, P&L, and menu bar |
| Watchlist Display | Toggle company name, day range, 52-week range bar, and absolute change value per row |
| Menu Bar Display | What appears in your menu bar (see below) |
| Language | English, German, French, Spanish, Italian, Portuguese |
| Notifications | Discord/Slack webhook, plus management of price alerts and portfolio notifications |
| Option | Example |
|---|---|
| P&L | P&L +321.09€ |
| Daily P&L | Daily P&L +42.10€ |
| P&L % | P&L +2.3% |
| P&L + % | +321.09€ (+2.3%) |
| Total Value | 14396.67€ |
| Best Stock | AAPL +1.2% |
| Worst Stock | TSLA -0.8% |
| Best & Worst | ▲AAPL +1.2% ▼TSLA -0.8% |
| Icon Only | Chart icon |
Best/Worst are based on daily change % from your watchlist.
StockDock checks for updates automatically on launch via Sparkle. You can also check manually from Settings → Check for Updates. No action needed — updates install seamlessly in the background.
~/Library/Application Support/StockDock/data.json (watchlist, portfolios, alerts, portfolio notifications, webhook, and preferences)Is StockDock really free? Yes — free and open source under the MIT license, with no paid tier or subscription. If you want to support development, you can optionally sponsor me.
Does it work on Intel Macs? Yes. StockDock ships as a universal binary for both Apple Silicon and Intel, on macOS 14 (Sonoma) and later.
Where does the data come from? Public Yahoo Finance endpoints (WebSocket for live prices, REST for exchange rates). No API key needed.
Can I track crypto, ETFs, or indices? Yes — anything with a Yahoo Finance symbol, including crypto, ETFs, and market indices.
Do you collect any data about me? No. There's no analytics, no telemetry, no account. Everything stays local on your Mac.
How do I uninstall it?
brew uninstall stockdock (or drag the app to the Trash), then optionally delete ~/Library/Application Support/StockDock.
StockDock is free and open source, and it will always stay that way — no paid tiers, no premium lock, no subscription, ever. It's also completely private: there's no analytics, no telemetry, no way for me to know how many people use it.
If you find it useful, the best (and free) thing you can do is ⭐️ star the repo — it's quick and it's the only signal I get that the app is worth maintaining.
And if you'd like to go a step further, you can 💛 sponsor me on GitHub or ☕️ buy me a coffee. It's completely optional and changes nothing about the app — every feature stays free for everyone — but it helps me keep building and maintaining StockDock and my other open-source projects. Thank you! 🙏
Swift
99.6%