Open source map icons for countries and regions

General open source icon sets like Lucide, Heroicons, and Font Awesome cover geography with a handful of symbols: a globe, a map pin, a folded map. When your interface needs the outline of Kenya, the European Union, or Ontario, they don't have it.

GeoIcons fills that gap. It is an open source icon set of 799 places, from countries to deserts to US states, published under GPLv3 with the source on GitHub.

Demo

What the set covers

CategoryIconsExamples
Countries and territories255Kenya, Japan, Brazil, New Zealand
Areas and regions167Continents, unions like the European Union, GCC, and ECOWAS, physical regions like the Sahara and the Andes, US regions like New England
States, provinces, and parishes377All 50 US states plus Washington, D.C., Canada's provinces and territories, Mexico's 32 states, and the parishes, departments, and provinces of 20 Central American and Caribbean countries

Every country icon is keyed to its ISO 3166-1 alpha-2 code, so the code you already store in your database maps straight to an icon.

Use it next to Lucide or Heroicons

GeoIcons follows the same conventions as the popular outline sets: a 24×24 grid, strokes instead of fills, and currentColor for color. The one difference is the default stroke weight. GeoIcons draws at 1, Lucide at 2, and Heroicons outline icons at 1.5. If your country icons look lighter than the rest of your UI, raise strokeWidth to match:

import { Settings } from 'lucide-react';
import { Kenya } from '@geoicons/react/countries';

export function RegionSettingsLink() {
  return (
    <a href="/settings/region" className="flex items-center gap-2">
      <Settings size={20} aria-hidden="true" />
      <Kenya size={20} strokeWidth={1.5} aria-hidden="true" />
      Region settings
    </a>
  );
}

Try 1.5 before 2. Country outlines have more corners than a gear or an arrow, and small island shapes start to close up at heavier weights.

Packages for every stack

The icon set ships as separate packages with matching icon names:

Designers can skip the packages and download any icon as an SVG or PNG.

How the license works

GeoIcons is dual-licensed. The icons, the packages, and the SVG files are the same under both licenses. Only the terms differ.

If your project is open source and released under a GPL-compatible license, you can use GeoIcons for free. When your app renders icons without a license, a single notice appears in the browser console. To hide it, wrap your app in IconProvider and pass the GPL declaration instead of a key:

import { IconProvider } from '@geoicons/react';

export function Providers({ children }: { children: React.ReactNode }) {
  return <IconProvider licenseKey="GPL-MY-PROJECT-IS-OPEN-SOURCE">{children}</IconProvider>;
}

The provider will recognize your project as GPL-licensed and stop showing the notice. It runs fully offline and never changes how the icons look.

If you ship GeoIcons in a closed-source or proprietary product, you need a commercial license. You get a key by email, pass it to the same IconProvider, and you no longer have to follow the GPLv3 copyleft terms. The license docs cover the details.

FAQ

Is GeoIcons free for commercial projects?
It is free when your project, commercial or not, is released as open source under a GPL-compatible license. If you keep your source code closed, you need a commercial license from the GeoIcons pricing page.
Does Lucide or Font Awesome have country map icons?
General icon sets like Lucide, Heroicons, and Font Awesome include globes, map pins, and folded maps, but they do not draw individual countries, states, or regions. GeoIcons covers those shapes and uses the same 24px outline style, so you can use both sets side by side.
Can I request a country or region that is missing?
Yes. Open an issue on the GeoIcons GitHub repository and name the country, region, or subdivision you need.