Country data for TypeScript and React
@tw-labs/countries
Most apps need a country list sooner or later: a phone input, a shipping form, a currency picker. @tw-labs/countries gives you that data typed and ready, with lookups by ISO code, alpha-3 code, or dial code, and a useCountries hook for React. Import the whole dataset, or only the countries you use.
- MIT license
- TypeScript
- Zero dependencies
- Tree-shakeable
$ npm install @tw-labs/countriesGET /open-source/countries
Try it
This table is the published package running in your browser. Change a filter and the code beside it changes to match.
249 of 249 returned
| Country | ISO | Dial | Capital | Currency |
|---|---|---|---|---|
| AF · AFG | +93 | Kabul | AFN ؋ | |
| AX · ALA | +358 | Mariehamn | EUR € | |
| AL · ALB | +355 | Tirana | ALL L | |
| DZ · DZA | +213 | Algiers | DZD د.ج | |
| AS · ASM | +1-684 | Pago Pago | USD $ | |
| AD · AND | +376 | Andorra la Vella | EUR € | |
| AO · AGO | +244 | Luanda | AOA Kz | |
| AI · AIA | +1-264 | The Valley | XCD $ | |
| AQ · ATA | +672 | — | ||
| AG · ATG | +1-268 | Saint John's | XCD $ | |
| AR · ARG | +54 | Buenos Aires | ARS $ | |
| AM · ARM | +374 | Yerevan | AMD ֏ | |
| AW · ABW | +297 | Oranjestad | AWG ƒ | |
| AU · AUS | +61 | Canberra | AUD $ | |
| AT · AUT | +43 | Vienna | EUR € | |
| AZ · AZE | +994 | Baku | AZN ₼ | |
| BS · BHS | +1-242 | Nassau | BSD $ | |
| BH · BHR | +973 | Manama | BHD .د.ب | |
| BD · BGD | +880 | Dhaka | BDT ৳ | |
| BB · BRB | +1-246 | Bridgetown | BBD $ | |
| BY · BLR | +375 | Minsk | BYN Br | |
| BE · BEL | +32 | Brussels | EUR € | |
| BZ · BLZ | +501 | Belmopan | BZD $ | |
| BJ · BEN | +229 | Porto-Novo | XOF Fr | |
| BM · BMU | +1-441 | Hamilton | BMD $ | |
| BT · BTN | +975 | Thimphu | BTN Nu | |
| BO · BOL | +591 | Sucre | BOB Bs. | |
| BA · BIH | +387 | Sarajevo | BAM KM | |
| BW · BWA | +267 | Gaborone | BWP P | |
| BV · BVT | +47 | — | NOK kr | |
| BR · BRA | +55 | Brasilia | BRL R$ | |
| IO · IOT | +246 | Diego Garcia | USD $ | |
| VG · VGB | +1-284 | Road Town | USD $ | |
| BN · BRN | +673 | Bandar Seri Begawan | BND $ | |
| BG · BGR | +359 | Sofia | BGN лв | |
| BF · BFA | +226 | Ouagadougou | XOF Fr | |
| BI · BDI | +257 | Gitega | BIF Fr | |
| KH · KHM | +855 | Phnom Penh | KHR ៛ | |
| CM · CMR | +237 | Yaounde | XAF Fr | |
| CA · CAN | +1 | Ottawa | CAD $ | |
| CV · CPV | +238 | Praia | CVE $ | |
| KY · CYM | +1-345 | George Town | KYD $ | |
| CF · CAF | +236 | Bangui | XAF Fr | |
| TD · TCD | +235 | N'Djamena | XAF Fr | |
| CL · CHL | +56 | Santiago | CLP $ | |
| CN · CHN | +86 | Beijing | CNY ¥ | |
| CX · CXR | +61 | Flying Fish Cove | AUD $ | |
| CC · CCK | +61 | West Island | AUD $ | |
| CO · COL | +57 | Bogota | COP $ | |
| KM · COM | +269 | Moroni | KMF Fr | |
| CD · COD | +243 | Kinshasa | CDF Fr | |
| CG · COG | +242 | Brazzaville | XAF Fr | |
| CK · COK | +682 | Avarua | NZD $ | |
| CR · CRI | +506 | San Jose | CRC ₡ | |
| CI · CIV | +225 | Yamoussoukro | XOF Fr | |
| HR · HRV | +385 | Zagreb | EUR € | |
| CU · CUB | +53 | Havana | CUP $ | |
| CW · CUW | +599 | Willemstad | ANG ƒ | |
| CY · CYP | +357 | Nicosia | EUR € | |
| CZ · CZE | +420 | Prague | CZK Kč | |
| DK · DNK | +45 | Copenhagen | DKK kr | |
| DJ · DJI | +253 | Djibouti | DJF Fr | |
| DM · DMA | +1-767 | Roseau | XCD $ | |
| DO · DOM | +1-809 | Santo Domingo | DOP $ | |
| EC · ECU | +593 | Quito | USD $ | |
| EG · EGY | +20 | Cairo | EGP £ | |
| SV · SLV | +503 | San Salvador | USD $ | |
| GQ · GNQ | +240 | Malabo | XAF Fr | |
| ER · ERI | +291 | Asmara | ERN Nfk | |
| EE · EST | +372 | Tallinn | EUR € | |
| SZ · SWZ | +268 | Mbabane | SZL L | |
| ET · ETH | +251 | Addis Ababa | ETB Br | |
| FK · FLK | +500 | Stanley | FKP £ | |
| FO · FRO | +298 | Torshavn | DKK kr | |
| FJ · FJI | +679 | Suva | FJD $ | |
| FI · FIN | +358 | Helsinki | EUR € | |
| FR · FRA | +33 | Paris | EUR € | |
| GF · GUF | +594 | Cayenne | EUR € | |
| PF · PYF | +689 | Papeete | XPF Fr | |
| TF · ATF | +262 | Port-aux-Francais | EUR € | |
| GA · GAB | +241 | Libreville | XAF Fr | |
| GM · GMB | +220 | Banjul | GMD D | |
| GE · GEO | +995 | Tbilisi | GEL ₾ | |
| DE · DEU | +49 | Berlin | EUR € | |
| GH · GHA | +233 | Accra | GHS ₵ | |
| GI · GIB | +350 | Gibraltar | GIP £ | |
| GR · GRC | +30 | Athens | EUR € | |
| GL · GRL | +299 | Nuuk | DKK kr | |
| GD · GRD | +1-473 | Saint George's | XCD $ | |
| GP · GLP | +590 | Basse-Terre | EUR € | |
| GU · GUM | +1-671 | Hagatna | USD $ | |
| GT · GTM | +502 | Guatemala City | GTQ Q | |
| GG · GGY | +44 | Saint Peter Port | GBP £ | |
| GN · GIN | +224 | Conakry | GNF Fr | |
| GW · GNB | +245 | Bissau | XOF Fr | |
| GY · GUY | +592 | Georgetown | GYD $ | |
| HT · HTI | +509 | Port-au-Prince | HTG G | |
| HM · HMD | +672 | — | AUD $ | |
| VA · VAT | +379 | Vatican City | EUR € | |
| HN · HND | +504 | Tegucigalpa | HNL L | |
| HK · HKG | +852 | Hong Kong | HKD $ | |
| HU · HUN | +36 | Budapest | HUF Ft | |
| IS · ISL | +354 | Reykjavik | ISK kr | |
| IN · IND | +91 | New Delhi | INR ₹ | |
| ID · IDN | +62 | Jakarta | IDR Rp | |
| IR · IRN | +98 | Tehran | IRR ﷼ | |
| IQ · IRQ | +964 | Baghdad | IQD ع.د | |
| IE · IRL | +353 | Dublin | EUR € | |
| IM · IMN | +44 | Douglas | GBP £ | |
| IL · ISR | +972 | Jerusalem | ILS ₪ | |
| IT · ITA | +39 | Rome | EUR € | |
| JM · JAM | +1-876 | Kingston | JMD $ | |
| JP · JPN | +81 | Tokyo | JPY ¥ | |
| JE · JEY | +44 | Saint Helier | GBP £ | |
| JO · JOR | +962 | Amman | JOD د.ا | |
| KZ · KAZ | +7 | Nur-Sultan | KZT ₸ | |
| KE · KEN | +254 | Nairobi | KES Ksh | |
| KI · KIR | +686 | South Tarawa | AUD $ | |
| KP · PRK | +850 | Pyongyang | KPW ₩ | |
| KR · KOR | +82 | Seoul | KRW ₩ | |
| XK · XKX | +383 | Pristina | EUR € | |
| KW · KWT | +965 | Kuwait City | KWD د.ك | |
| KG · KGZ | +996 | Bishkek | KGS с | |
| LA · LAO | +856 | Vientiane | LAK ₭ | |
| LV · LVA | +371 | Riga | EUR € | |
| LB · LBN | +961 | Beirut | LBP ل.ل | |
| LS · LSO | +266 | Maseru | LSL L | |
| LR · LBR | +231 | Monrovia | LRD $ | |
| LY · LBY | +218 | Tripoli | LYD ل.د | |
| LI · LIE | +423 | Vaduz | CHF Fr | |
| LT · LTU | +370 | Vilnius | EUR € | |
| LU · LUX | +352 | Luxembourg | EUR € | |
| MO · MAC | +853 | Macao | MOP P | |
| MG · MDG | +261 | Antananarivo | MGA Ar | |
| MW · MWI | +265 | Lilongwe | MWK MK | |
| MY · MYS | +60 | Kuala Lumpur | MYR RM | |
| MV · MDV | +960 | Male | MVR Rf | |
| ML · MLI | +223 | Bamako | XOF Fr | |
| MT · MLT | +356 | Valletta | EUR € | |
| MH · MHL | +692 | Majuro | USD $ | |
| MQ · MTQ | +596 | Fort-de-France | EUR € | |
| MR · MRT | +222 | Nouakchott | MRU UM | |
| MU · MUS | +230 | Port Louis | MUR Rs | |
| YT · MYT | +262 | Mamoudzou | EUR € | |
| MX · MEX | +52 | Mexico City | MXN $ | |
| FM · FSM | +691 | Palikir | USD $ | |
| MD · MDA | +373 | Chisinau | MDL L | |
| MC · MCO | +377 | Monaco | EUR € | |
| MN · MNG | +976 | Ulaanbaatar | MNT ₮ | |
| ME · MNE | +382 | Podgorica | EUR € | |
| MS · MSR | +1-664 | Plymouth | XCD $ | |
| MA · MAR | +212 | Rabat | MAD د.م. | |
| MZ · MOZ | +258 | Maputo | MZN MT | |
| MM · MMR | +95 | Naypyidaw | MMK K | |
| NA · NAM | +264 | Windhoek | NAD $ | |
| NR · NRU | +674 | Yaren | AUD $ | |
| NP · NPL | +977 | Kathmandu | NPR Rs | |
| NL · NLD | +31 | Amsterdam | EUR € | |
| NC · NCL | +687 | Noumea | XPF Fr | |
| NZ · NZL | +64 | Wellington | NZD $ | |
| NI · NIC | +505 | Managua | NIO C$ | |
| NE · NER | +227 | Niamey | XOF Fr | |
| NG · NGA | +234 | Abuja | NGN ₦ | |
| NU · NIU | +683 | Alofi | NZD $ | |
| NF · NFK | +672 | Kingston | AUD $ | |
| MK · MKD | +389 | Skopje | MKD ден | |
| MP · MNP | +1-670 | Saipan | USD $ | |
| NO · NOR | +47 | Oslo | NOK kr | |
| OM · OMN | +968 | Muscat | OMR ﷼ | |
| PK · PAK | +92 | Islamabad | PKR Rs | |
| PW · PLW | +680 | Ngerulmud | USD $ | |
| PS · PSE | +970 | Ramallah | ILS ₪ | |
| PA · PAN | +507 | Panama City | PAB B/. | |
| PG · PNG | +675 | Port Moresby | PGK K | |
| PY · PRY | +595 | Asuncion | PYG ₲ | |
| PE · PER | +51 | Lima | PEN S/. | |
| PH · PHL | +63 | Manila | PHP ₱ | |
| PN · PCN | +870 | Adamstown | NZD $ | |
| PL · POL | +48 | Warsaw | PLN zł | |
| PT · PRT | +351 | Lisbon | EUR € | |
| PR · PRI | +1 | San Juan | USD $ | |
| QA · QAT | +974 | Doha | QAR ﷼ | |
| RE · REU | +262 | Saint-Denis | EUR € | |
| RO · ROU | +40 | Bucharest | RON lei | |
| RU · RUS | +7 | Moscow | RUB ₽ | |
| RW · RWA | +250 | Kigali | RWF Fr | |
| BL · BLM | +590 | Gustavia | EUR € | |
| SH · SHN | +290 | Jamestown | SHP £ | |
| KN · KNA | +1-869 | Basseterre | XCD $ | |
| LC · LCA | +1-758 | Castries | XCD $ | |
| MF · MAF | +590 | Marigot | EUR € | |
| PM · SPM | +508 | Saint-Pierre | EUR € | |
| VC · VCT | +1-784 | Kingstown | XCD $ | |
| WS · WSM | +685 | Apia | WST T | |
| SM · SMR | +378 | San Marino | EUR € | |
| ST · STP | +239 | Sao Tome | STN Db | |
| SA · SAU | +966 | Riyadh | SAR ﷼ | |
| SN · SEN | +221 | Dakar | XOF Fr | |
| RS · SRB | +381 | Belgrade | RSD din | |
| SC · SYC | +248 | Victoria | SCR Rs | |
| SL · SLE | +232 | Freetown | SLL Le | |
| SG · SGP | +65 | Singapore | SGD $ | |
| SX · SXM | +1-721 | Philipsburg | ANG ƒ | |
| SK · SVK | +421 | Bratislava | EUR € | |
| SI · SVN | +386 | Ljubljana | EUR € | |
| SB · SLB | +677 | Honiara | SBD $ | |
| SO · SOM | +252 | Mogadishu | SOS Sh | |
| ZA · ZAF | +27 | Pretoria | ZAR R | |
| GS · SGS | +500 | King Edward Point | GBP £ | |
| SS · SSD | +211 | Juba | SSP £ | |
| ES · ESP | +34 | Madrid | EUR € | |
| LK · LKA | +94 | Sri Jayawardenepura Kotte | LKR Rs | |
| SD · SDN | +249 | Khartoum | SDG £ | |
| SR · SUR | +597 | Paramaribo | SRD $ | |
| SJ · SJM | +47 | Longyearbyen | NOK kr | |
| SE · SWE | +46 | Stockholm | SEK kr | |
| CH · CHE | +41 | Bern | CHF Fr | |
| SY · SYR | +963 | Damascus | SYP £ | |
| TW · TWN | +886 | Taipei | TWD $ | |
| TJ · TJK | +992 | Dushanbe | TJS SM | |
| TH · THA | +66 | Bangkok | THB ฿ | |
| TL · TLS | +670 | Dili | USD $ | |
| TG · TGO | +228 | Lome | XOF Fr | |
| TK · TKL | +690 | — | NZD $ | |
| TO · TON | +676 | Nuku'alofa | TOP T$ | |
| TT · TTO | +1-868 | Port of Spain | TTD $ | |
| TN · TUN | +216 | Tunis | TND د.ت | |
| TR · TUR | +90 | Ankara | TRY ₺ | |
| TM · TKM | +993 | Ashgabat | TMT T | |
| TC · TCA | +1-649 | Cockburn Town | USD $ | |
| TV · TUV | +688 | Funafuti | AUD $ | |
| UG · UGA | +256 | Kampala | UGX Sh | |
| UA · UKR | +380 | Kyiv | UAH ₴ | |
| AE · ARE | +971 | Abu Dhabi | AED د.إ | |
| GB · GBR | +44 | London | GBP £ | |
| TZ · TZA | +255 | Dodoma | TZS Sh | |
| US · USA | +1 | Washington, D.C. | USD $ | |
| UM · UMI | +1 | — | USD $ | |
| UY · URY | +598 | Montevideo | UYU $ | |
| VI · VIR | +1-340 | Charlotte Amalie | USD $ | |
| UZ · UZB | +998 | Tashkent | UZS so'm | |
| VU · VUT | +678 | Port Vila | VUV Vt | |
| VE · VEN | +58 | Caracas | VES Bs.S | |
| VN · VNM | +84 | Hanoi | VND ₫ | |
| WF · WLF | +681 | Mata-Utu | XPF Fr | |
| EH · ESH | +212 | El Aaiun | MAD د.م. | |
| YE · YEM | +967 | Sanaa | YER ﷼ | |
| ZM · ZMB | +260 | Lusaka | ZMW ZK | |
| ZW · ZWE | +263 | Harare | ZWL $ |
The call behind this table
import { useCountries } from "@tw-labs/countries/react";
const countries = useCountries({
includeFlags: true,
sort: { by: "label", order: "asc" },
});Usage
Look up a country
The core entry has no React dependency, so it runs in Node.js, Vue, Svelte, and Next.js Server Components.
import { getCountryByCode, getCountryByPhone } from "@tw-labs/countries";
getCountryByCode("IN");
// { code: "IN", alpha3: "IND", label: "India", phone: "91",
// capital: "New Delhi", continent: "Asia",
// currency: { code: "INR", symbol: "₹", name: "Indian Rupee" },
// timezones: ["Asia/Kolkata"] }
getCountryByPhone("971").map((c) => c.label);
// ["United Arab Emirates"]Build a picker in React
useCountries filters, sorts, and adds flags. The /react entry has "use client" built in.
import { useCountries } from "@tw-labs/countries/react";
export function CountrySelect() {
const countries = useCountries({
includeFlags: true,
sort: { by: "label", order: "asc" },
});
return (
<select>
{countries.map((c) => (
<option key={c.code} value={c.code}>
{c.flagEmoji} {c.label} (+{c.phone})
</option>
))}
</select>
);
}Ship only what you use
When the countries are known at build time, import them by code and the rest of the dataset is tree-shaken away.
import { US, GB, DE } from "@tw-labs/countries/data";
const shippingCountries = [US, GB, DE];What You Get
- 249 countries and territories with ISO alpha-2 and alpha-3 codes
- Dial code, capital, continent, currency, and IANA timezones for each
- Flags as emoji, 20px and 40px PNG, and SVG
- Lookups by ISO code, alpha-3 code, or dial code
- useCountries hook with filtering, sorting, and optional flags
- Tree-shakeable /data subpath and zero runtime dependencies
Common Uses
- Country and dial-code pickers on phone number inputs
- Shipping and billing address forms
- Showing prices in a visitor's local currency symbol
- Timezone selection when scheduling calls or events
@tw-labs/countries FAQ
What data does @tw-labs/countries include?
For each of 249 countries and territories: the ISO 3166-1 alpha-2 and alpha-3 codes, English name, international dial code, capital, continent, currency code, symbol, and name, and the IANA timezones. Flag emoji and flag image URLs are added on request.
Does it work with Next.js Server Components?
Yes. The core entry has no React dependency, so getCountryByCode and getAllCountries run in Server Components. The /react entry ships with "use client" built in for the useCountries hook.
Does it work without React?
Yes. React is an optional peer dependency. The core utilities work in Node.js, Vue, Svelte, or any JavaScript runtime.
How do I keep the bundle small?
If you know the countries at build time, import them by code from @tw-labs/countries/data, for example import { US, GB } from "@tw-labs/countries/data". Only those objects are bundled. Runtime lookups such as getCountryByCode include the full dataset.
Where do the flag images come from?
Flag PNG and SVG URLs point to flagcdn.com. Emoji flags need no network request.
Is it free to use commercially?
Yes. It is MIT licensed, so you can use it in commercial and closed-source projects.
Built by TechWebster
The team behind the package builds apps too
TechWebster builds React, Next.js, and mobile apps for clients. If you want the people who wrote this package on your project, talk to us.