简体中文 | GitHub Repository | Development Guide | Engineering Standards
FloatMarket is a macOS floating market board built for fast, glanceable monitoring.
It combines global indices, crypto spot pairs, and perpetual contracts in a compact always-on-top window, with a dedicated settings window for layout, theme, data source, and proxy control.
- Shows a floating window that stays visible for quick market checks.
- Supports a compact mini window and an expanded board view.
- Tracks global indices, crypto spot pairs, and perpetual contracts in one watchlist.
- Opens the related web page on double-click, with editable default quick links.
- Keeps settings, watchlist items, proxy settings, and window appearance in a local JSON file.
- Floating window and mini window with separate font sizing and background opacity.
- Chinese and English UI, with a follow-system language option.
- Light, dark, and follow-system theme modes for the floating window.
- Editable watchlist with built-in templates for common indices and major crypto pairs.
- Proxy support for both HTTP and SOCKS5, with a built-in connectivity test.
- Menu bar app workflow: open settings, show or hide the floating window, and quit quickly.
Baidu GushitongSina Finance
Built-in templates include common instruments such as:
IXICDJISPXFTSEDAXCACNK225HSIKOSPI000001399001DINIWUSDCNYUSDCNH
OKX- Spot templates:
BTC,ETH,SOL,XRP,DOGE - Perpetual templates:
BTC Perpetual,ETH Perpetual,SOL Perpetual,XRP Perpetual,DOGE Perpetual
- Spot templates:
Gate- Spot templates:
BTC,ETH,SOL,XRP,DOGE - Perpetual templates:
BTC Perpetual,ETH Perpetual,SOL Perpetual,XRP Perpetual,DOGE Perpetual
- Spot templates:
Binance- Spot templates:
BTC,ETH,SOL,XRP,DOGE - Perpetual templates:
BTC Perpetual,ETH Perpetual,SOL Perpetual,XRP Perpetual,DOGE Perpetual
- Spot templates:
Global indices and snapshot-only feeds use interval-based polling. WebSocket feeds do not use timer-based refreshes, and only trigger a one-off HTTP snapshot sync after disconnects or reconnects.
- The expanded floating board groups quotes by:
Global IndicesSpotPerpetuals
- The mini window can pin specific items or fall back to the first available quote.
- Global indices support a collapsed or expanded section inside the floating board.
- The settings window provides controls for:
- theme
- transparency
- width
- maximum floating height
- mini window display mode
- data source endpoints
- watchlist editing
- proxy testing
- The logs view focuses on:
- HTTP snapshot recovery after WebSocket disconnects
- HTTP resync after WebSocket reconnects
- request failures, fallbacks, and decode errors
FloatMarket/
├── FloatMarket/
│ ├── About/
│ ├── Commands/
│ ├── Data/
│ ├── MenuBar/
│ ├── Panes/
│ ├── Settings/
│ ├── Sidebar/
│ ├── Utilities/
│ ├── Windowing/
│ ├── MainScene.swift
│ └── MainView.swift
├── docs/
├── dmg-assets/
├── scripts/
├── FloatMarket.xcodeproj
├── Makefile
├── README.md
└── README.zh-Hans.md
Open the project in Xcode:
open FloatMarket.xcodeprojBuild a debug app from the command line:
make build-debugLaunch the debug build:
make debugCreate a release DMG:
make dmg- Settings are saved to:
~/Library/Application Support/FloatMarket/settings.json
- The app ships with built-in watchlist templates.
- Users can edit or remove any default item after it is added.
- Quick link URLs have defaults, but can be overridden per watch item.
You do not need to start from an empty form unless you want to.
- Open the settings window from the menu bar or floating window.
- Go to
Watchlist. - Click
Addand pick the closest built-in preset. - In the detail pane, adjust:
Display NameSourceSymbol / ContractRegionfor Baidu global indicesQuick Link URL
- Keep it enabled if it should appear in the floating window.
- Optionally pin it in
Mini Window. - Save the settings.
The Preset picker in the editor can also be used as a shortcut: choose a template first, then overwrite the fields you want to customize.
Custom languages are added at the app bundle level, not from the settings UI itself.
Add a new localization folder under:
FloatMarket/<language-code>.lproj/
Minimum recommended files:
FloatMarket/<language-code>.lproj/Localizable.stringsFloatMarket/<language-code>.lproj/InfoPlist.strings
Important requirements:
- Add a
Language Self Nameentry inLocalizable.strings. - Keep the language code consistent with Apple localization folder names, for example:
en.lprojzh-Hans.lprojja.lproj
- Rebuild the app after adding the new folder.
Once the new .lproj bundle is included, FloatMarket will automatically read it and show the language in the app menu and settings language picker.
Example:
FloatMarket/fr.lproj/
├── InfoPlist.strings
└── Localizable.strings
Example Localizable.strings header:
"Language Self Name" = "Français";
If you are working on the app rather than just using it:
This project is licensed under the MIT License.





