A simple list of countries for scala projects.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jens Grassel f360b68a70 Merge pull request 'Update wartremover to 2.4.18' (#35) from jan0sch/countries:updates/wartremover-2.4.18 into main 9 months ago
project Update wartremover to 2.4.18 9 months ago
shared/src Major updates 1 year ago
.gitignore Update sbt to 1.4.1 2 years ago
.jvmopts Adjust JVM options 1 year ago
.scalafix.conf #5 Publish for ScalaJS 2 years ago
.scalafmt.conf Major updates 1 year ago
AUTHORS.md Initial commit 3 years ago
CHANGELOG.md Prepare RELEASE 2 years ago
CONTRIBUTING.md Contribution guide 2 years ago
LICENSE Initial commit 3 years ago
NOTICE Initial commit 3 years ago
README.md Sonatype Badge 2 years ago
build.sbt Update scala to 2.13.8 9 months ago


A list of countries.

Sonatype Nexus (Releases)

This library simply provides a list of countries as data models.

In case you need a basic country model or simply a list which should contain most (if not all) countries then we got you covered.

The basic model looks like this:

sealed abstract class Country(
  val alpha2: Alpha2CountryCode,
  val alpha3: Alpha3CountryCode,
  val name: CountryName,
  val nameOfficial: StateName,
  val numeric: NumericCountryCode,
  val tld: List[TopLevelDomain]


The following libraries are used and expected to be provided by your project:

  • Cats
  • Circe
  • Enumeratum
  • Refined


scala> import com.wegtam.countries._, eu.timepit.refined.auto._
scala> Country.values.headOption
res0: Option[com.wegtam.countries.Country] = Some(Afghanistan)
scala> Country.fromAlpha2("DE")
res1: Either[String,com.wegtam.countries.Country] = Right(Germany)
scala> Country.fromAlpha2("XX")
res2: Either[String,com.wegtam.countries.Country] = Left(No such country!)
scala> Country.fromAlpha3("ESH")
res3: Either[String,com.wegtam.countries.Country] = Right(WesternSahara)
scala> Country.fromNumeric("858")
res4: Either[String,com.wegtam.countries.Country] = Right(Uruguay)
scala> import codecs.circe.alpha2._, io.circe.syntax._
scala> Country.fromNumeric("858").map(_.asJson)
res5: scala.util.Either[String,io.circe.Json] = Right("UY")

Circe Codecs

Because quite often you need JSON, we provide several codecs. Please import the ones that you prefer. Currently three codecs are provided:

  1. decode / encode from / to the alpha-2 country code (codecs.circe.alpha2)
  2. decode / encode from / to the alpha-3 country code (codecs.circe.alpha3)
  3. decode / encode from / to the numeric country code (codecs.circe.numeric)

Please note that the "numeric" encoder will still produce strings because there are codec with leading zeros!

Getting started

The artefacts should be available from maven central, so just add the dependency to your build configuration.

libraryDependencies += "com.wegtam" %% "countries" % VERSION

For development and testing you need to install sbt. Please see CONTRIBUTING.md for details how to to contribute to the project.