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.
What the set covers
| Category | Icons | Examples |
|---|---|---|
| Countries and territories | 255 | Kenya, Japan, Brazil, New Zealand |
| Areas and regions | 167 | Continents, unions like the European Union, GCC, and ECOWAS, physical regions like the Sahara and the Andes, US regions like New England |
| States, provinces, and parishes | 377 | All 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:
@geoicons/reactfor React and Next.js@geoicons/vuefor Vue and Nuxt@geoicons/angularfor Angular@geoicons/vanillafor plain JavaScript
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.