Most newer GPSs support USB Mass Storage, which means that when plugged into your computer, they show up as a drive with all your routes, tracks and waypoints saved as GPX files. Older models, such as the Garmin 60csx still widely used in SAR, require a special protocol to transfer your data.
For websites like CalTopo, the only option for getting data off older Garmin GPSs, and the most convenient option for newer ones, was the Garmin Communicator Plugin (GCP). Browsers have slowly been dropping support for the NPAPI plugin architecture on which GCP was based, but the final nail in its coffin was Garmin not only discontinuing support, but deciding to no longer issue new API keys. Since I only had an API key for http://caltopo.com/, when a Google Chrome security change forced me to move most traffic over to https several months ago, GCP became largely useless.
That was motivation enough to wrap up a long-simmering project: the GPSIO browser extension. Compatible with both Chrome and Firefox, GPSIO acts as a conduit between your browser and the open-source GPSBabel program, which does the actual hard work of talking to your GPS.
GPSIO is still a little rough around the edges, but you are cordially invited to take it for a spin, report any problems, or - since it's open source - fix them yourself. Although GPSIO only supports Garmin GPSs at the moment, I would welcome code contributions to expand it to work with the wide range of GPS types that GPSBabel supports.
For more information, see http://gpsio.caltopo.com/.
Once installed, using GPSIO with CalTopo is pretty simple: under the Import or Export menu, click the "Connect via GPSIO" link.