Home

Awesome

GitHub Build Kotlin libGDX Maven Central

KTX

Kotlin extensions for libGDX.

Table of contents

Introduction

KTX is a Kotlin game framework extending libGDX. It aims to make libGDX as Kotlin-friendly as possible without completely rewriting the API. It provides modular utilities and extensions for selected parts of libGDX with poor Kotlin support.

Examples of Kotlin language features used to improve usability, performance, and readability of libGDX include:

See the Choosing KTX article for pros and cons of this framework.

Modules

KTX was designed to be modular from day one. In fact, some of its libraries consist of just a single Kotlin file. You can include the selected KTX modules based on the needs of your application.

ModuleDescription
ktx-actorsScene2D GUI extensions for stages, actors, actions, and event listeners.
ktx-aiType-safe Kotlin builders and utilities for gdxAI.
ktx-appApplicationListener implementations and general application utilities.
ktx-artemisArtemis-odb entity-component-system utilities.
ktx-ashleyAshley entity-component-system utilities.
ktx-assetsResources management utilities.
ktx-assets-asyncNon-blocking asset loading using coroutines.
ktx-asyncCoroutines context based on libGDX threading model.
ktx-box2dBox2D physics engine utilities.
ktx-collectionsExtensions for libGDX custom collections.
ktx-freetypeFreeType fonts loading utilities.
ktx-freetype-asyncNon-blocking FreeType fonts loading using coroutines.
ktx-graphicsUtilities related to rendering tools and graphics.
ktx-i18nInternationalization API utilities.
ktx-injectA dependency injection system with low overhead and no reflection usage.
ktx-jsonUtilities for libGDX JSON serialization API.
ktx-logMinimal runtime overhead cross-platform logging using inlined functions.
ktx-mathOperator functions for libGDX math API and general math utilities.
ktx-preferencesImproved API for accessing and saving preferences.
ktx-reflectUtilities for libGDX reflection API.
ktx-scene2dType-safe Kotlin builders for Scene2D GUI.
ktx-scriptKotlin scripting engine for desktop applications.
ktx-styleType-safe Kotlin builders for Scene2D widget styles extending Skin API.
ktx-tiledUtilities for Tiled maps.
ktx-visType-safe Kotlin builders for VisUI.
ktx-vis-styleType-safe Kotlin builders for VisUI widget styles.

Installation

New projects

New projects with support for KTX can be generated with the gdx-liftoff tool. In contrary to the official gdx-setup tool, gdx-liftoff provides greater support for libGDX extensions and a wider set of platforms, as well as custom project templates. You can download the latest release of the tool here.

Click on the sections below for instructions on how to set up a new KTX project with gdx-liftoff.

<details><summary><b>General</b></summary><dl><dd>

Fill the basic information about your project such as its name, root package or main class name. Provide an empty folder to generate the project into. If you want to target the Android platform, define the path to the Android SDK.

The following sections describe each tab of the setup tool available below the basic project info.


</dd></dl></details> <details><summary><b>Platforms</b></summary><dl><dd>

KTX supports the following platforms:

The following platforms are unsupported or untested:


</dd></dl></details> <details><summary><b>Languages</b></summary><dl><dd>

You can select the Kotlin language support to ensure it is correctly set up in the generated project. If a Kotlin project template is selected, it will automatically add the necessary Kotlin libraries and plugins.


</dd></dl></details> <details><summary><b>Extensions</b></summary><dl><dd>

This section includes the official libGDX extensions. Each of these should be compatible with Kotlin projects. However, some extensions might be unavailable on specific platforms. In particular, the TeaVM backend might be unable to compile libraries relying on native code or reflection.


</dd></dl></details> <details><summary><b>Third-party extensions</b></summary><dl><dd>

This section contains all verified third-party extensions for libGDX. All KTX modules are listed in this tab.

To include a KTX module, scroll down to the KTX libraries list and click on the corresponding checkbox. This will ensure that the module is properly installed and includes all of its dependencies in the latest available versions.

The gdx-liftoff tool will also set up a Gradle property named ktxVersion that will be shared across all KTX libraries. To upgrade your project after a KTX release, update to the latest version in the gradle.properties file.


</dd></dl></details> <details><summary><b>Templates</b></summary><dl><dd>

Choosing a template for the project determines the initial implementation of the libGDX ApplicationListener, as well as the application launchers on each platform. Some templates also showcase specific parts of the framework, such as the Scene2D GUI or event handling. You can generate several projects and check out various templates, but for working with Kotlin and KTX these are the best starting points:


</dd></dl></details> <details><summary><b>Advanced</b></summary><dl><dd>

This section can be used to specify versions of core dependencies. If you are just starting with libGDX, these settings can be mostly left untouched. However, if you wish to have a basic Scene2D GUI Skin that you can use to test the available widgets, mark the Add GUI assets checkbox.


</dd></dl></details>

Example KTX projects:

When using the official gdx-setup tool instead of the recommended gdx-liftoff, generate a project with Kotlin support and refer to the next section.

Existing projects

KTX libraries can be added to existing Kotlin libGDX projects. Please refer to the libGDX wiki for more information on how to add Kotlin support to a libGDX application.

All KTX modules are uploaded to Maven Central and are fully compatible with the Gradle build tool, which is used in libGDX projects by default.

The libraries are published under the io.github.libktx group and are named with the ktx- prefix. You can find a complete list of KTX modules in the previous section. As an example, including the app module with the ktx-app identifier would require the following changes in your build.gradle or build.gradle.kts file:

<details><summary><code>build.gradle</code> <sub><b>Gradle Groovy DSL</b></sub></summary>
// Groovy DSL:
ext {
  // Update this version to match the latest KTX release:
  ktxVersion = '1.12.1-rc2'
}

dependencies {
  api group: 'io.github.libktx', name: 'ktx-app', version: ktxVersion
}
</details> <details><summary><code>build.gradle.kts</code> <sub><b>Gradle Kotlin DSL</b></sub></summary>
// Update this version to match the latest KTX release:
val ktxVersion = "1.12.1-rc2"

dependencies {
  api(group = "io.github.libktx", name = "ktx-app", version = ktxVersion)
}
</details>

KTX modules should generally be added to the dependencies of the shared core module of your libGDX application.

You can find the latest KTX version on Maven Central:

Maven Central

Platforms

KTX currently supports the following platforms:

PlatformStatusDescription
DesktopCompleteAll major desktop platforms are supported by the official libGDX LWJGL3 backend.
AndroidCompleteSupported natively by the official libGDX Android backend.
iOSCompleteSupported by the official libGDX iOS backend using RoboVM.
WebExperimentalPartially supported by the unofficial web backend using TeaVM.

Note that platforms other than desktop might provide limited support for features such as reflection, coroutines or Java standard library emulation. In particular, mobile platforms might not support the entire Java standard library including the newer additions, while the web platform currently does not support Kotlin coroutines or more advanced reflection features. Please refer to the documentation of the respective libGDX backends, as well as the tools that they are based on.

Versioning

Each KTX version is based on the matching libGDX release. KTX uses suffixes to differentiate multiple releases made against a single libGDX version. The -rc suffix is reserved for stable releases.

Unfortunately, libGDX does not follow the semantic versioning guidelines. Both minor and patch versions can introduce breaking changes. Please read the libGDX and KTX change logs before updating. When choosing the appropriate KTX version, always pick the latest release matching your current libGDX version.

You can browse through our official releases on Maven and on GitHub.

Although KTX technically uses beta release tags, the official releases are considered suitable for production use. All modules are thoroughly tested with comprehensive test suites.

Latest changes

The master branch is the default branch of the repository. It represents the latest stable release of KTX. It ensures that the documentation in the repository is in sync with the latest released version.

The newest changes can be found on the develop branch instead.

The preview snapshot releases with the latest changes are uploaded automatically to the https://oss.sonatype.org/content/repositories/snapshots/ repository. To use them in your application, add the following Maven repository, and change the suffix of the KTX version to -SNAPSHOT:

<details><summary><code>build.gradle</code> <sub><b>Gradle Groovy DSL</b></sub></summary>
repositories {
  // Include your other repositories here.
  maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}

ext {
  // Update this version to match the latest libGDX release:
  ktxVersion = '1.12.1-SNAPSHOT'
}
</details> <details><summary><code>build.gradle.kts</code> <sub><b>Gradle Kotlin DSL</b></sub></summary>
repositories {
  // Include your other repositories here.
  maven("https://oss.sonatype.org/content/repositories/snapshots/")
}

// Update this version to match the latest libGDX release:
val ktxVersion = "1.12.1-SNAPSHOT"
</details>

The full version of the latest snapshot release can be found on the develop branch, and usually matches the latest stable libGDX release. Snapshot releases for the nightly libGDX builds are not available.

Note that even the snapshots are rather stable, as the libraries are not pushed to Maven Central unless they pass their extensive test suites. However, the public APIs in snapshot libraries might be changed prior to a stable release.

Documentation

Official guides

Each module contains a README.md file with a list of all its features and a guide with useful code snippets. Browse through the directories in the root folder to find out more about each library.

Source documentation

All functionalities are documented with Kotlin KDocs. You can access the source documentation by:

Links

KTX wiki lists some useful resources that can help you get started.

Most official guides and code examples in this repository assume that the reader is at least a bit familiar with the libGDX API. If you are just getting to know the framework, it might be helpful to go through the official libGDX wiki, and convert some Java examples to Kotlin.

Contribution

Suggestions, questions, typo fixes, documentation improvements and code contributions are always welcome.

Do not hesitate to start a discussion with questions about the framework. Feel free to advertise your KTX project, propose new features, discuss game jams, or even create a personal devlog.

If you would like to contribute, please read the contribution guideline, and browse through the active issues. The develop is the active development branch. When creating pull requests, make sure to choose develop as the target branch.

You can check the list of the contributors via GitHub insights or the contributors list.

Licensing

This project is dedicated to public domain.

Working from sources

See this section of the contribution guideline to get started.