Build tools

We use Gradle with Kotlin Script build configuration. As such, you will find build.gradle.kts files, defining how Gradle shall build the project/module.

In the core repository waltid-identity, you will find a Gradle multi-module project: → a Gradle project that is made up of multiple Gradle modules.

This repository is split into three sections:

  • waltid-applications
    • Standalone applications (e.g. web frontends, walt.id CLI)
  • waltid-libraries
    • Base libraries that our products are built out of
  • waltid-services
    • REST Services that our customers can run

Each of these sections consists of multiple Gradle modules.

JVM versions

See Java version table.

When configuring the build of a Gradle module, you can select a JVM version to compile your code with, and a JVM version to target. As we have foojay-resolver setup, this means that you can select any JVM version, and if you (or someone else building your module) does not have this JVM version on their machine, it will be automatically downloaded and made available for your Gradle module to use.

Current (February 2025) Java version overview

See Java version table.

The latest Java version is Java 23, with Java 24 being released in March 2025. Because Java 23 is not an LTS version (the next LTS version will be Java 25 in September 2025), Java 23 will no longer receive updates by Oracle when Java 24 is released (which will be in March 2025). Java 24 will receive public updates by Oracle until Java 25 (LTS) is released, which will be in September 2025.

LTS versions receive update for 5 years, so Java 25 LTS (estimated for September 2025) will receive updates until September 2030.

What version to target

  • For (Kotlin-) multiplatform modules, make sure that Android is able to use your library - if you select a JVM that is too new, there might be old (but still popular) Android versions that cannot process your build outputs.
  • In general, our multiplatform base libraries are mostly not on the latest maintained Java version (Java 23 in February 2025), but on the latest (or second-latest → if it still has major market share) LTS version. However, it depends:
    • There are cases when certain features are only available starting with certain Java versions. In these cases, the newer Java version has to be used. Recent examples:
      • Curve25519/Curve448 key agreement & ChaCha20 + Poly1305 & TLS 1.3, is only available starting with Java 11
      • Ed25519/Ed448 is only available starting with Java 15
      • macOS/AArch64 is only available starting with Java 17
      • Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm (ML-DSA) is only available starting with Java 24
      • etc. → Analyze how far back you can go, and how far back it makes sense to go. See Java version table.
  • For our REST services (that are not utilized by multiple platforms, but just run server-side on the JVM) we always go for the latest LTS Java version or Java version (in certain cases) for performance reasons.

LTS versions overview

See Java version table.

  • Java 11 LTS stopped receiving public updates by Oracle in April 2019
  • Java 17 LTS received public updates by Oracle until September 2024
    • → at this point we will switch to Java 21 LTS
  • Java 21 LTS will receive public updates for another while
  • Java 25 LTS will be released September 2025