Your COROS watch companion — music, maps, watch faces, and training analytics on desktop.
Download · Website · Docs · Sponsor · Buy me a coffee
Unofficial desktop app for COROS watch owners. Not affiliated with or endorsed by COROS.
The desktop interface supports English, Spanish, French, Portuguese and Simplified Chinese. Choose a language in Settings → App language to switch immediately. Dates and numbers follow the selected language. See the localization guide to contribute another language.
Sign in with your COROS account to see recovery, training load, HRV, sleep, EvoLab scores, race predictions, and full activity detail — then ask the Coach about it.
- Coach runs on ChatGPT, Claude Code, OpenRouter, or any OpenAI-compatible API (Ollama, LM Studio, or a hosted provider)
- Draws charts on request and pins them to the Training Hub, where they refresh with live data
- Deep analysis from a local FIT-file index: splits, power curve, best efforts, route comparisons
- Drafts workouts and multi-week plans — nothing is written to COROS until you confirm
- Bulk-export your activities (FIT, GPX, TCX, KML, CSV) or import from intervals.icu
Keep your data off COROS. CorosLink syncs activities, sleep, heart rate, HRV and stress from a PACE 4, PACE 4 Pro, PACE Pro, PACE 3 or APEX 4 over Bluetooth to this computer and uploads nothing to COROS. Turn it on in Settings → Privacy & local data. Tested on PACE 4 with macOS; other models are in beta. You sign in to COROS once so CorosLink can save the watch key it needs to connect.
Build, schedule, and reuse training — from one structured workout to a full multi-week plan.
- Workout library with a sport-aware builder, tags, collections, and step previews
- Local training plans with drag-and-drop weeks, phases, templates, and plan comparison
- Planned-vs-completed adherence with automatic activity matching
- Month/week calendar with drag-to-reschedule, synced to Google or Apple Calendar (Google, Apple)
A rotatable 3D muscle map that shades each muscle by how hard you've worked it, plus weekly volume trends, push/pull/legs balance, per-exercise PRs and estimated 1RM. Optional Hevy sync merges your Hevy workouts with COROS strength history.
Design custom COROS watch faces in a layer-based editor — fonts, colors, artwork, live metrics, and an always-on variant — then hand it off to the COROS app via QR. Browse and remix community faces, or let the built-in AI make edits for you. See the Watch Face Studio guide for everything the editor offers.
- Download official COROS Landscape/Topo map regions and install them over USB
- Pick map areas on a grid and copy just those over USB (the watch never goes online), or have the watch download them over its Wi-Fi
- Generate loop or point-to-point routes (OpenRouteService), or import GPX from Strava, Komoot, etc.
- Elevation profile, pace estimates, GPX export, and QR share to the COROS phone app
Get MP3s onto your watch over USB from YouTube, Spotify, YouTube Music, Apple Music, YouTube playlists, or public Apple Podcasts episodes. Streaming-service tracks are matched on YouTube and downloaded with yt-dlp + ffmpeg. See music integrations setup.
With Bluetooth connected, Media → Library → Send audio over Wi-Fi can send local MP3s to the watch's Podcasts library. The NetEase playlist destination puts your own MP3s into a named playlist in the watch's NetEase player, so they play there like any other playlist. Its playlists open from NetEase Music in the watch's Toolbox; if NetEase isn't there, Show NetEase on watch turns on the watch's NetEase feature switch (the COROS app may turn it off again when it syncs). Send all and Send selected automatically split larger selections into batches of up to 20, keeping all NetEase batches in one playlist and showing overall progress. A queue accepts up to 500 tracks and 1 GB total; cancelling or a failure stops the remaining batches. Both devices must share a Wi-Fi network. Import a download-settings backup once; CorosLink reuses it for that watch and account without a daily expiry. Update it after changing your COROS account, region or watch download settings, because each batch restores the saved settings packet. NetEase transfer and playback were verified on a PACE Pro (W332, 3.2008.0).
CorosLink only moves audio files you already have from your computer to your watch. It doesn't connect to NetEase, download anything from its catalogue, or unlock NetEase membership features. Only send audio you have the right to use.
For NetEase, the watch uses the CorosLink HTTPS relay to look up each local download address. The relay receives the computer's private network address and temporary transfer identifiers; the watch also sends its device identifier in the lookup request. The original COROS access token is replaced temporarily and is not sent to the relay. The relay does not receive audio, and the watch downloads the MP3 directly from the computer over local Wi-Fi. Lookup records expire after 35 minutes and are removed when the transfer ends when possible.
The Bluetooth reader queries both local MP3s and the watch's separate podcast inventory, so downloaded podcasts count even when the Music folder is empty. Older uploads may display watch file IDs when titles are unavailable; CorosLink saves original filenames locally for new transfers. Presence and counts always come from a fresh watch query. Local MP3s and podcasts can be deleted individually or with Delete all after confirmation; bulk deletion stops on the first failure and reports the number removed. Podcast deletion checks the inventory afterward and has not yet been verified on physical hardware. CorosLink waits up to 30 seconds for a busy-screen flag to clear before starting an audio download; keep the watch awake during the transfer.
Audiobooks — import a DRM-free .m4b, .m4a, .mp3, or similar file (or several files to join them) and CorosLink splits it into mono MP3 parts named in play order: every N minutes (10 by default), or at the book's chapter marks, using each file as a chapter when joining files that have no chapter marks. COROS watches play MP3 only and don't remember your place inside a track, so short parts limit how much you lose and turn the skip button into a jump to the next part. Parts are copied one at a time, first to last, because the watch plays files in the order they were transferred. No audiobook handy? Free classics browses and downloads public-domain LibriVox recordings from the Internet Archive, each file checked against its published SHA-1 before conversion.
Grab the latest installer from GitHub Releases. After that, updates arrive in-app.
| Platform | File |
|---|---|
| macOS (Apple Silicon) | CorosLink-*-arm64.dmg |
| macOS (Intel) | CorosLink-*-x64.dmg |
| Windows | CorosLink Setup *.exe |
| Linux (x64) | CorosLink-*.AppImage |
| Debian / Ubuntu (x64) | CorosLink-*.deb |
- macOS builds are signed and notarized. If an older or self-built copy says it's damaged, run
xattr -cr "/Applications/CorosLink.app". - Windows may show SmartScreen — click More info → Run anyway.
- Linux:
chmod +x CorosLink-*.AppImage, then run it. On Debian or Ubuntu you can install the deb instead:sudo apt install ./CorosLink-*.deb. Both update in-app; the deb asks for your password to install an update.
Everything beyond USB music/map sync is optional and needs only what you use: a COROS account (Training Hub, Coach), an OpenRouteService key (routes), an OpenRouter key or local LLM (Coach), Spotify/Google OAuth apps, or Python 3.10+ with ytmusicapi (YouTube Music).
CorosLink is local-first and runs no backend of its own.
- Music, maps, activity caches, and settings live on your machine (SQLite + files on disk).
- Tokens and passwords are stored locally; sensitive ones are encrypted with the OS keychain.
- Data only leaves your machine for the service you're using: COROS (training data), Spotify/Google/Apple (your library or calendar), OpenRouteService (routes), or the AI provider you pick for Coach.
- Watch recordings come from your COROS account, or straight from the watch in Local-Only Mode.
Only download media you have the rights or permission to download.
git clone https://github.com/JunAkerBuilds/CorosLink.git
cd CorosLink
npm install
npm run rebuild # native SQLite bindings for Electron
npm run dev # Vite on :5173 + Electron; fetches yt-dlp/ffmpeg on first run- Test watch detection without hardware:
COROS_WATCH_PATH=/path/to/mock-watch(with aMusicfolder) ornpm run smoke:watch. - Icon source is
build/icon.svg; regenerate withnpm run icons:generate. - Build installers with
npm run dist:mac/dist:win/dist:linux(on the matching OS). Packaging and release steps are in docs/releasing.md.
Built with Electron, React, and Vite · CorosLink Contributors