Skip to content

Repository files navigation

GeoIcons

Premium geographic map icons - 422 countries, territories & world areas - as tree-shakable components for React, Vue, Angular, and vanilla JS.

geoicons.io · Browse the catalog · Docs · Pricing

License: GPL v3 Commercial license available


⚖️ 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.warn per 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 size and strokeWidth; color via native stroke/fill (themes through currentColor).
  • Accessible by default - decorative (aria-hidden) unless you pass an aria-label, which switches to role="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

About

Tree-shakeable geographic map icons for React, Vue, Angular & vanilla JS. Dual-licensed: GPLv3 or Commercial.

Topics

Resources

Contributing

Security policy

Stars

12 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages