GeoIcons
July 13, 2026 · View on GitHub
GeoIcons
Premium geographic map icons - 422 countries, territories & world areas - as tree-shakable components for React, Vue, Angular, and vanilla JS.
⚖️ Dual-licensed: GPLv3 or Commercial
GeoIcons is free and open-source under the GNU GPLv3 - or available under a Commercial license for closed-source use. You pick the one that fits.
| GPLv3 (free) | Commercial (paid) | |
|---|---|---|
| Cost | Free | One-time or annual - see pricing |
| Your project must be… | Open-source under a GPL-compatible license (copyleft) | Anything - closed-source, proprietary, SaaS |
| Best for | OSS projects, learning, prototypes | Commercial products, client work, internal apps |
| Terms | LICENSE | COMMERCIAL-LICENSE.md |
In plain terms: using GeoIcons under the free tier means the GPLv3 applies to your project too - it must be open-source. If your app is closed-source, proprietary, or commercial, you need a commercial license. Using the icons in a proprietary app without one violates the GPLv3.
Enforcement is legal, not technical. Icons always render the same - no watermark, no lock, no network call. The only nudge is a single client-side
console.warnper session when no license is declared. See License & compliance below.
Packages
Each framework is a separate, independently versioned package. Install only what you use.
| Package | Framework | Peer requirement |
|---|---|---|
@geoicons/react | React | react >= 18 |
@geoicons/vue | Vue | vue >= 3.0 |
@geoicons/angular | Angular | @angular/core >= 15.1 |
@geoicons/vanilla | Framework-free (DOM) | none |
@geoicons/core | Shared offline license verifier (dependency of the above) | none |
Quick start (React)
npm install @geoicons/react
import { Us, Jp } from '@geoicons/react/countries';
export function Example() {
return (
<>
<Us size={48} />
<Jp size={48} strokeWidth={0.5} className="text-blue-600" />
</>
);
}
No config, no CSS import - icons inherit currentColor. Full per-framework usage lives in each package README and at geoicons.io/docs.
Why GeoIcons
- 422 icons - every country & territory (ISO 3166-1) plus continents, sub-regions, blocs, peninsulas, deserts, basins, and seas. The catalog keeps growing.
- Tree-shakable - every icon is its own named export.
import { Us, Jp }ships only those two, never the whole set. All packages are"sideEffects": false. - Styleable - one consistent 24×24 outline system. Set
sizeandstrokeWidth; color via nativestroke/fill(themes throughcurrentColor). - Accessible by default - decorative (
aria-hidden) unless you pass anaria-label, which switches torole="img"+<title>. - Zero runtime deps - offline ES256 license verification via native Web Crypto.
License & compliance
Icons render identically no matter your license state. If a project uses them without a declared license, one console.warn fires per session (client-side only) nudging toward GPLv3 compliance or a commercial key. The optional provider verifies your license fully offline and silences the notice:
// Commercial - wrap once with your purchased key
<IconProvider licenseKey={process.env.NEXT_PUBLIC_GEOICONS_KEY}>…</IconProvider>
// Open-source - declare GPL compliance
<IconProvider licenseKey="GPL-MY-PROJECT-IS-OPEN-SOURCE">…</IconProvider>
Vue exposes the GeoiconsLicense plugin, Angular provideGeoiconsLicense(), and vanilla initGeoiconsLicense() - same offline check. See each package README.
Contributing
Code PRs are not accepted (this is a published mirror of a dual-licensed project). Issues are open - report a bug or request an icon/country. See CONTRIBUTING.md.
Security
Found a vulnerability? Please don't open a public issue - see SECURITY.md.
GeoIcons · geoicons.io · Dual-licensed GPLv3 or Commercial