The short answer
Why the browser cannot read your watch over USB
No. And it is not your watch, your cable or your browser.
It is not a missing permission and it is not a browser doing badly: the browser is never offered your watch at all.
The same watch, two ways in
Over USB, directly
- You plug the watch in
- The operating system claims the interface
- The browser is never offered the device
Nothing to pick
As the mounted folder
- You plug the watch in
- The system mounts it as a drive
- You point the browser at that folder, once
It reads the FIT files
WebUSB only reaches a device whose interface no operating-system driver has already claimed. A Garmin, a Wahoo or a Coros enumerates as USB mass storage or as MTP, and Windows, macOS and Linux all bind that interface the moment it is plugged in. By the time a page asks, the watch already has an owner - which is why it does not even appear in the picker the browser shows.
What does work is reading it as the thing your system has already mounted: a folder. With the File System Access API you point at that folder once, and the page reads the FIT files straight out of it. Before anything is uploaded it hashes each file locally and asks which hashes are unknown, so a watch holding 800 activities costs 800 local hashes and one small request - and only genuinely new sessions travel.
That API is Chromium-only today: Chrome, Edge and Brave. In Firefox and Safari the import screen offers the ordinary file picker instead of a button that would do nothing.
Polar is the exception. Its sync is proprietary and most of its models never expose the files over USB at all. There the route that works is exporting from Polar Flow and importing the file.
So, what do I do
Point at the folder
Chrome, Edge or Brave: the import screen asks for the watch folder and takes only what is new.
Go to importingIf it is a Polar
Export the session from Polar Flow and drop the file in. It carries everything a Polar can give.
Import a file