| Approach |
jQuery plugin; renders SVG via Raphael |
Branded vendor plugin; Raphael bundled internally |
Hand-rolled vanilla JS over an inlined SVG |
| Personal / non-commercial |
Free (BSD 2-Clause) |
Free (branded; mandatory link-back to simplemaps.com) |
Free (attribution appreciated, not required) |
| Commercial use |
Free — BSD permits commercial use; copyright + license must be retained |
Paid — Individual $99 (lifetime, 1 domain, 12-mo updates).
Higher tiers: Developer / Business — simplemaps.com/us.
|
Free — no paid tier exists |
| Branding requirement |
None (BSD copyright header in JS) |
Free tier must keep the simplemaps.com link visible; paid tier removes the requirement |
None |
| Runtime dependencies |
jQuery 1.12.4 + Raphael 2.x (both bundled in the project) |
None (Raphael bundled inside usmap.js) |
None |
| Vendor weight on disk |
jQuery ~85 KB + Raphael 198 KB + plugin 93 KB ≈ 376 KB JS |
usmap.js 257 KB + mapdata.js 15 KB ≈ 272 KB JS |
us.svg ≈ 75 KB (no JS dependency) |
| Estimated gzipped weight |
~110 KB |
~70 KB |
~10 KB |
| Built-in features |
Hover, click, labels, heat-map styling |
Hover, click, labels, popups, zoom, regions, locations |
Hand-rolled per-POC: hover, click, centroid labels, zoom (wheel + buttons + pinch + drag-to-pan) |
| State coverage |
50 + DC (territory variant ships in the same package) |
50 + DC + 5 territories (territories hidden by default) |
50 + DC |
| Responsive design (mobile-first) |
Plugin renders into a fixed-size box (Raphael internally does the SVG sizing).
We get responsiveness by wrapping #map in an aspect-ratio container and forcing
width:100% on the rendered child. Works on mobile, but font-sized labels
on tiny viewports get cramped. No touch-specific tap behavior — uses normal click events.
|
Built-in: main_settings.width = "responsive". The plugin re-renders SVG to fit its parent
and exposes touch-friendly tap-to-zoom out of the box. Best mobile story of the three —
popups and zoom degrade gracefully on small screens.
|
We control responsiveness completely. Inlining the SVG, removing fixed
width/height, and setting preserveAspectRatio gives clean fluid
scaling. Smallest mobile payload; touch & pointer events handled by native
click delegation.
|
| Hover affordance |
Yes — plugin's stateHoverStyles with animated transitions |
Yes — built-in state_hover_color + smooth fade |
Yes — pure CSS path:hover rule (after stripping the SVG's inline fill on load) |
| Programmatic highlight (from dropdown) |
$('#map').usmap('trigger', code, 'click') + Raphael .attr({fill}) |
Mutate state_specific[code].color + simplemaps_usmap.refresh() |
Toggle a CSS class on the matching <path> |
| Customizability |
High — Raphael path API is fully exposed |
Medium — config-driven; usmap.js is minified for the free tier |
Highest — full DOM control, every CSS & JS hook is yours |
| Maintenance status |
Repo archived 2020-03-24 — no further updates upstream |
Active commercial product (paid tier ships 12–24 months of updates) |
Static asset — no maintenance needed |
| Best for |
Existing jQuery codebases willing to live with an unmaintained dep |
Feature-rich demos / dashboards with budget for the commercial license |
Modern, framework-agnostic stacks & long-lived projects |