{"id":13428565,"url":"https://github.com/libktx/ktx","last_synced_at":"2026-01-14T01:51:59.494Z","repository":{"id":38864353,"uuid":"62418645","full_name":"libktx/ktx","owner":"libktx","description":"Kotlin extensions for the libGDX game framework","archived":false,"fork":false,"pushed_at":"2025-06-28T20:52:55.000Z","size":3384,"stargazers_count":1440,"open_issues_count":13,"forks_count":73,"subscribers_count":30,"default_branch":"master","last_synced_at":"2026-01-11T18:37:03.812Z","etag":null,"topics":["android","async","box2d","coroutines","game-development","game-engine","gamedev","graphics","hacktoberfest","kotlin","kotlin-coroutines","kotlin-dsl","kotlin-extensions","kotlin-library","kotlin-utilities","ktx","libgdx","libgdx-api","libktx","scene2d"],"latest_commit_sha":null,"homepage":"https://libktx.github.io/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/libktx.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["czyzby"],"open_collective":"ktx"}},"created_at":"2016-07-01T20:40:59.000Z","updated_at":"2026-01-10T23:22:25.000Z","dependencies_parsed_at":"2023-02-14T17:45:40.498Z","dependency_job_id":"e22c250a-ac83-44df-a38d-5a7424cba7ec","html_url":"https://github.com/libktx/ktx","commit_stats":{"total_commits":984,"total_committers":40,"mean_commits":24.6,"dds":"0.25406504065040647","last_synced_commit":"671f7e5f54a1ef6091c03330ff32c0841900d41e"},"previous_names":["czyzby/ktx"],"tags_count":47,"template":false,"template_full_name":null,"purl":"pkg:github/libktx/ktx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libktx%2Fktx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libktx%2Fktx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libktx%2Fktx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libktx%2Fktx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/libktx","download_url":"https://codeload.github.com/libktx/ktx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libktx%2Fktx/sbom","scorecard":{"id":315143,"data":{"date":"2025-08-11","repo":{"name":"github.com/libktx/ktx","commit":"0f28adef8191a15a3c4f453a97fe15524fb3c8fd"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Code-Review","score":3,"reason":"Found 2/6 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":1,"reason":"0 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Warn: no topLevel permission defined: .github/workflows/publish-documentation.yml:1","Warn: no topLevel permission defined: .github/workflows/publish-project-samples.yml:1","Warn: no topLevel permission defined: .github/workflows/upload-snapshot.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-documentation.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/publish-documentation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-documentation.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/publish-documentation.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-documentation.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/publish-documentation.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-documentation.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/publish-documentation.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-project-samples.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/publish-project-samples.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-project-samples.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/publish-project-samples.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-project-samples.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/publish-project-samples.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-project-samples.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/publish-project-samples.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish-project-samples.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/publish-project-samples.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-snapshot.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/upload-snapshot.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-snapshot.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/upload-snapshot.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-snapshot.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/libktx/ktx/upload-snapshot.yml/master?enable=pin","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   8 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: Creative Commons Zero v1.0 Universal: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 1.13.1-rc1 not signed: https://api.github.com/repos/libktx/ktx/releases/198130766","Warn: release artifact 1.12.1-rc2 not signed: https://api.github.com/repos/libktx/ktx/releases/171822163","Warn: release artifact 1.12.1-rc1 not signed: https://api.github.com/repos/libktx/ktx/releases/127983756","Warn: release artifact 1.12.0-rc1 not signed: https://api.github.com/repos/libktx/ktx/releases/113237282","Warn: release artifact 1.11.0-rc6 not signed: https://api.github.com/repos/libktx/ktx/releases/107012676","Warn: release artifact 1.13.1-rc1 does not have provenance: https://api.github.com/repos/libktx/ktx/releases/198130766","Warn: release artifact 1.12.1-rc2 does not have provenance: https://api.github.com/repos/libktx/ktx/releases/171822163","Warn: release artifact 1.12.1-rc1 does not have provenance: https://api.github.com/repos/libktx/ktx/releases/127983756","Warn: release artifact 1.12.0-rc1 does not have provenance: https://api.github.com/repos/libktx/ktx/releases/113237282","Warn: release artifact 1.11.0-rc6 does not have provenance: https://api.github.com/repos/libktx/ktx/releases/107012676"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T00:02:05.515Z","repository_id":38864353,"created_at":"2025-08-18T00:02:05.516Z","updated_at":"2025-08-18T00:02:05.516Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408692,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T00:40:43.272Z","status":"ssl_error","status_checked_at":"2026-01-14T00:40:42.636Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","async","box2d","coroutines","game-development","game-engine","gamedev","graphics","hacktoberfest","kotlin","kotlin-coroutines","kotlin-dsl","kotlin-extensions","kotlin-library","kotlin-utilities","ktx","libgdx","libgdx-api","libktx","scene2d"],"created_at":"2024-07-31T01:01:00.625Z","updated_at":"2026-01-14T01:51:59.469Z","avatar_url":"https://github.com/libktx.png","language":"Kotlin","readme":"[![GitHub Build](https://github.com/libktx/ktx/workflows/build/badge.svg)](https://github.com/libktx/ktx/actions?query=workflow%3Abuild)\n[![Kotlin](https://img.shields.io/badge/kotlin-2.1.10-orange.svg)](http://kotlinlang.org/)\n[![libGDX](https://img.shields.io/badge/libgdx-1.13.1-red.svg)](https://libgdx.com/)\n[![Maven Central](https://img.shields.io/maven-central/v/io.github.libktx/ktx-async.svg)](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22io.github.libktx%22)\n\n[![KTX](.github/ktx-logo.png \"KTX\")](http://libktx.github.io)\n\n_**K**o**t**lin extensions for libGD**X**._\n\n# Table of contents\n\n* [Introduction](#introduction)\n* [Modules](#modules)\n* [Installation](#installation)\n* [Documentation](#documentation)\n* [Contribution](#contribution)\n\n## Introduction\n\n**KTX** is a Kotlin game framework extending [libGDX](http://libgdx.badlogicgames.com/). It aims to make libGDX as\n[Kotlin](http://kotlinlang.org/)-friendly as possible without completely rewriting the API. It provides modular\nutilities and extensions for selected parts of libGDX with poor Kotlin support.\n\nExamples of Kotlin language features used to improve usability, performance, and readability of libGDX include:\n\n- *Operator overloads* for collections and mathematical operations.\n- *Extension methods* expanding and improving the original libGDX APIs without the use of inheritance.\n- *Inline methods* with reduced runtime overhead for various listeners, builders, and loggers.\n- *Nullable types* which improve typing information of selected interfaces and functions.\n- *Default parameters* reducing boilerplate code and providing sensible defaults for various operations.\n- *Type-safe builders* for GUI, interface styling, ECS, and physics engine setup.\n- *Default interface methods* simplifying their implementation.\n- *Coroutines context* providing concurrency utilities and non-blocking asset loading.\n- *Reified types* simplifying usage of methods normally consuming `Class` parameters.\n\nSee the [_Choosing **KTX**_](https://github.com/libktx/ktx/wiki/Choosing-KTX) article for pros and cons of this framework.\n\n## Modules\n\n**KTX** was designed to be modular from day one. In fact, some of its libraries consist of just a single Kotlin file.\nYou can include the selected **KTX** modules based on the needs of your application.\n\n|                 Module                 | Description                                                                                                                       |\n|:--------------------------------------:|-----------------------------------------------------------------------------------------------------------------------------------|\n|         [`ktx-actors`](actors)         | [`Scene2D`](https://libgdx.com/wiki/graphics/2d/scene2d/scene2d) GUI extensions for stages, actors, actions, and event listeners. |\n|             [`ktx-ai`](ai)             | Type-safe Kotlin builders and utilities for [`gdxAI`](https://github.com/libgdx/gdx-ai).                                          |\n|            [`ktx-app`](app)            | `ApplicationListener` implementations and general application utilities.                                                          |\n|        [`ktx-artemis`](artemis)        | [`Artemis-odb`](https://github.com/junkdog/artemis-odb) entity-component-system utilities.                                        |\n|         [`ktx-ashley`](ashley)         | [`Ashley`](https://github.com/libgdx/ashley) entity-component-system utilities.                                                   |\n|         [`ktx-assets`](assets)         | Resources management utilities.                                                                                                   |\n|   [`ktx-assets-async`](assets-async)   | Non-blocking asset loading using coroutines.                                                                                      |\n|          [`ktx-async`](async)          | [Coroutines](https://kotlinlang.org/docs/reference/coroutines.html) context based on libGDX threading model.                      |\n|          [`ktx-box2d`](box2d)          | [`Box2D`](https://libgdx.com/wiki/extensions/physics/box2d) physics engine utilities.                                             |\n|    [`ktx-collections`](collections)    | Extensions for libGDX custom collections.                                                                                         |\n|       [`ktx-freetype`](freetype)       | `FreeType` fonts loading utilities.                                                                                               |\n| [`ktx-freetype-async`](freetype-async) | Non-blocking `FreeType` fonts loading using coroutines.                                                                           |\n|       [`ktx-graphics`](graphics)       | Utilities related to rendering tools and graphics.                                                                                |\n|           [`ktx-i18n`](i18n)           | Internationalization API utilities.                                                                                               |\n|         [`ktx-inject`](inject)         | A dependency injection system with low overhead and no reflection usage.                                                          |\n|           [`ktx-json`](json)           | Utilities for libGDX [JSON](https://libgdx.com/wiki/utils/reading-and-writing-json) serialization API.                            |\n|            [`ktx-log`](log)            | Minimal runtime overhead cross-platform logging using inlined functions.                                                          |\n|           [`ktx-math`](math)           | Operator functions for libGDX math API and general math utilities.                                                                |\n|    [`ktx-preferences`](preferences)    | Improved API for accessing and saving [preferences](https://libgdx.com/wiki/preferences).                                         |\n|        [`ktx-reflect`](reflect)        | Utilities for libGDX [reflection API](https://libgdx.com/wiki/utils/reflection).                                                  |\n|        [`ktx-scene2d`](scene2d)        | Type-safe Kotlin builders for [`Scene2D`](https://libgdx.com/wiki/graphics/2d/scene2d/scene2d) GUI.                               |\n|         [`ktx-script`](script)         | Kotlin scripting engine for desktop applications.                                                                                 |\n|          [`ktx-style`](style)          | Type-safe Kotlin builders for `Scene2D` widget styles extending `Skin` API.                                                       |\n|          [`ktx-tiled`](tiled)          | Utilities for [Tiled](https://www.mapeditor.org/) maps.                                                                           |\n|            [`ktx-vis`](vis)            | Type-safe Kotlin builders for [`VisUI`](https://github.com/kotcrab/vis-ui/).                                                      |\n|      [`ktx-vis-style`](vis-style)      | Type-safe Kotlin builders for `VisUI` widget styles.                                                                              |\n\n### Installation\n\n#### New projects\n\nNew projects with support for KTX can be generated with the [`gdx-liftoff` tool](https://github.com/tommyettinger/gdx-liftoff).\nIn contrary to the official `gdx-setup` tool, `gdx-liftoff` provides greater support for libGDX extensions and\na wider set of platforms, as well as custom project templates. You can download the latest release of the tool\n[here](https://github.com/tommyettinger/gdx-liftoff/releases).\n\nClick on the sections below for instructions on how to set up a new KTX project with `gdx-liftoff`.\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eGeneral\u003c/b\u003e\u003c/summary\u003e\u003cdl\u003e\u003cdd\u003e\n\n---\n\nFill the basic information about your project such as its name, root package or main class name.\nProvide an empty folder to generate the project into. If you want to target the Android platform,\ndefine the path to the Android SDK.\n\nThe following sections describe each tab of the setup tool available below the basic project info.\n\n---\n\n\u003c/dd\u003e\u003c/dl\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003ePlatforms\u003c/b\u003e\u003c/summary\u003e\u003cdl\u003e\u003cdd\u003e\n\n---\n\n**KTX** supports the following platforms:\n\n* **Core:** mandatory shared module.\n* **Desktop:** the default desktop platform based on LWJGL3.\n* **Android:** native Android mobile platform.\n* **iOS:** mobile platform using RoboVM to support iOS.\n* **HTML (TeaVM):** unofficial experimental web platform using TeaVM.\n* Headless: a desktop platform without a graphical interface.\n* Server: a separate server application without libGDX APIs.\n* Shared: a module for sharing code between the Server and Core.\n\nThe following platforms are unsupported or untested:\n* HTML: the default web platform. Supports only Java projects.\n* Desktop (Legacy): legacy desktop platform built upon LWJGL2. Might not work with modern JVMs.\n* iOS Multi-OS Engine: an alternative iOS platform. Untested.\n\n---\n\n\u003c/dd\u003e\u003c/dl\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eLanguages\u003c/b\u003e\u003c/summary\u003e\u003cdl\u003e\u003cdd\u003e\n\n---\n\nYou can select the **Kotlin** language support to ensure it is correctly set up in the generated project.\nIf a Kotlin project template is selected, it will automatically add the necessary Kotlin libraries and plugins.\n\n---\n\n\u003c/dd\u003e\u003c/dl\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eExtensions\u003c/b\u003e\u003c/summary\u003e\u003cdl\u003e\u003cdd\u003e\n\n---\n\nThis section includes the official libGDX extensions. Each of these should be compatible with Kotlin\nprojects. However, some extensions might be unavailable on specific platforms. In particular, the TeaVM\nbackend might be unable to compile libraries relying on native code or reflection.\n\n---\n\n\u003c/dd\u003e\u003c/dl\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eThird-party extensions\u003c/b\u003e\u003c/summary\u003e\u003cdl\u003e\u003cdd\u003e\n\n---\n\nThis section contains all verified third-party extensions for libGDX. All **KTX** modules are listed\nin this tab.\n\nTo include a **KTX** module, scroll down to the **KTX** libraries list and click on the corresponding\ncheckbox. This will ensure that the module is properly installed and includes all of its dependencies\nin the latest available versions.\n\nThe `gdx-liftoff` tool will also set up a Gradle property named `ktxVersion` that will be shared across\nall **KTX** libraries. To upgrade your project after a **KTX** release, update to the latest version\nin the `gradle.properties` file.\n\n---\n\n\u003c/dd\u003e\u003c/dl\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eTemplates\u003c/b\u003e\u003c/summary\u003e\u003cdl\u003e\u003cdd\u003e\n\n---\n\nChoosing a template for the project determines the initial implementation of the libGDX `ApplicationListener`,\nas well as the application launchers on each platform. Some templates also showcase specific parts of the framework,\nsuch as the Scene2D GUI or event handling. You can generate several projects and check out various templates,\nbut for working with Kotlin and KTX these are the best starting points:\n  \n* **Kotlin**: a basic project template that generates Kotlin application launchers.\n* **Kotlin Logo**: a simple project that generates Kotlin application launchers and draws the libGDX logo on the screen.\n* **Kotlin + KTX** *(recommended)*: a project template that generates the `ApplicationListener` using **KTX**\n  utilities. When launched, the application draws the **KTX** logo on the screen. Some modules that require additional\n  setup, such as `ktx-async`, are properly initiated by the template if selected.\n\n---\n\n\u003c/dd\u003e\u003c/dl\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eAdvanced\u003c/b\u003e\u003c/summary\u003e\u003cdl\u003e\u003cdd\u003e\n\n---\n\nThis section can be used to specify versions of core dependencies. If you are just starting with libGDX,\nthese settings can be mostly left untouched. However, if you wish to have a basic Scene2D GUI Skin that you\ncan use to test the available widgets, mark the *Add GUI assets* checkbox.\n\n---\n\n\u003c/dd\u003e\u003c/dl\u003e\u003c/details\u003e\n\nExample **KTX** projects:\n\n* [`ktx-sample-project`](https://github.com/libktx/ktx-sample-project): includes all **KTX** modules and the official\n  libGDX extensions. Targets the desktop and mobile platforms.\n* [`ktx-sample-web-project`](https://github.com/libktx/ktx-sample-web-project): includes most **KTX** modules that are\n  at least partially supported by the web platform, as well as the official libGDX extensions. Targets the desktop,\n  mobile and web platforms.\n\nWhen using the official `gdx-setup` tool instead of the recommended `gdx-liftoff`, generate a project with Kotlin\nsupport and refer to the next section.\n\n#### Existing projects\n\n**KTX** libraries can be added to existing Kotlin libGDX projects. Please refer to the\n[libGDX wiki](https://libgdx.com/wiki/jvm-langs/using-libgdx-with-kotlin) for more information on how to add Kotlin\nsupport to a libGDX application.\n\nAll **KTX** modules are uploaded to _Maven Central_ and are fully compatible with the Gradle build tool, which is used\nin libGDX projects by default.\n\nThe libraries are published under the `io.github.libktx` group and are named with the `ktx-` prefix. You can find\na complete list of KTX modules in the [previous section](#modules). As an example, including the [app](app) module\nwith the `ktx-app` identifier would require the following changes in your `build.gradle` or `build.gradle.kts` file:\n\n\u003cdetails\u003e\u003csummary\u003e\u003ccode\u003ebuild.gradle\u003c/code\u003e \u003csub\u003e\u003cb\u003eGradle Groovy DSL\u003c/b\u003e\u003c/sub\u003e\u003c/summary\u003e\n\n```groovy\n// Groovy DSL:\next {\n  // Update this version to match the latest KTX release:\n  ktxVersion = '1.13.1-rc1'\n}\n\ndependencies {\n  api group: 'io.github.libktx', name: 'ktx-app', version: ktxVersion\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003ccode\u003ebuild.gradle.kts\u003c/code\u003e \u003csub\u003e\u003cb\u003eGradle Kotlin DSL\u003c/b\u003e\u003c/sub\u003e\u003c/summary\u003e\n\n```kotlin\n// Update this version to match the latest KTX release:\nval ktxVersion = \"1.13.1-rc1\"\n\ndependencies {\n  api(group = \"io.github.libktx\", name = \"ktx-app\", version = ktxVersion)\n}\n```\n\n\u003c/details\u003e\n\n**KTX** modules should generally be added to the dependencies of the shared `core` module of your libGDX application.\n\nYou can find the latest **KTX** version on Maven Central:\n\n[![Maven Central](https://img.shields.io/maven-central/v/io.github.libktx/ktx-app.svg)](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22io.github.libktx%22)\n\n#### Platforms\n\n**KTX** currently supports the following platforms:\n\n| Platform |    Status    | Description                                                                                                                    |\n|:--------:|:------------:|--------------------------------------------------------------------------------------------------------------------------------|\n| Desktop  |   Complete   | All major desktop platforms are supported by the official libGDX LWJGL3 backend.                                               |\n| Android  |   Complete   | Supported natively by the official libGDX Android backend.                                                                     |\n|   iOS    |   Complete   | Supported by the official libGDX iOS backend using [RoboVM](http://robovm.mobidevelop.com/).                                   |\n|   Web    | Experimental | Partially supported by the unofficial [web backend](https://github.com/xpenatan/gdx-teavm/) using [TeaVM](https://teavm.org/). |\n\n\u003e Note that platforms other than desktop might provide limited support for features such as reflection, coroutines\n\u003e or Java standard library emulation. In particular, mobile platforms might not support the entire Java standard\n\u003e library including the newer additions, while the web platform currently does not support Kotlin coroutines or more\n\u003e advanced reflection features. Please refer to the documentation of the respective libGDX backends, as well as\n\u003e the tools that they are based on.\n\n#### Versioning\n\nEach **KTX** version is based on the matching libGDX release. **KTX** uses suffixes to differentiate multiple releases\nmade against a single libGDX version. The `-rc` suffix is reserved for stable releases.\n\nUnfortunately, libGDX does not follow the [semantic versioning](https://semver.org/) guidelines. Both minor and patch\nversions can introduce breaking changes. Please read the [libGDX](https://github.com/libgdx/libgdx/blob/master/CHANGES)\nand [**KTX** change logs](CHANGELOG.md) before updating. When choosing the appropriate **KTX** version, always pick\nthe latest release matching your current libGDX version.\n\nYou can browse through our official releases [on Maven](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22io.github.libktx%22)\nand [on GitHub](https://github.com/libktx/ktx/releases).\n\nAlthough **KTX** technically uses beta release tags, the official releases are considered suitable for production use.\nAll modules are thoroughly tested with comprehensive test suites.\n\n#### Latest changes\n\nThe [`master`](https://github.com/libktx/ktx/tree/master/) branch is the default branch of the repository. It represents\nthe latest stable release of **KTX**. It ensures that the documentation in the repository is in sync with the latest\nreleased version.\n\nThe newest changes can be found on the [`develop`](https://github.com/libktx/ktx/tree/develop/) branch instead.\n\nThe preview snapshot releases with the latest changes are uploaded automatically to the\n`https://oss.sonatype.org/content/repositories/snapshots/` repository. To use them in your application, add\nthe following Maven repository, and change the suffix of the **KTX** version to `-SNAPSHOT`:\n\n\u003cdetails\u003e\u003csummary\u003e\u003ccode\u003ebuild.gradle\u003c/code\u003e \u003csub\u003e\u003cb\u003eGradle Groovy DSL\u003c/b\u003e\u003c/sub\u003e\u003c/summary\u003e\n  \n```groovy\nrepositories {\n  // Include your other repositories here.\n  maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }\n}\n\next {\n  // Update this version to match the latest libGDX release:\n  ktxVersion = '1.13.1-SNAPSHOT'\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\u003ccode\u003ebuild.gradle.kts\u003c/code\u003e \u003csub\u003e\u003cb\u003eGradle Kotlin DSL\u003c/b\u003e\u003c/sub\u003e\u003c/summary\u003e\n\n```kotlin\nrepositories {\n  // Include your other repositories here.\n  maven(\"https://oss.sonatype.org/content/repositories/snapshots/\")\n}\n\n// Update this version to match the latest libGDX release:\nval ktxVersion = \"1.13.1-SNAPSHOT\"\n```\n\n\u003c/details\u003e\n\nThe full version of the latest snapshot release can be found on the\n[`develop`](https://github.com/libktx/ktx/blob/develop/version.txt) branch, and usually matches the latest\nstable libGDX release. Snapshot releases for the nightly libGDX builds are not available.\n\nNote that even the snapshots are rather stable, as the libraries are not pushed to _Maven Central_ unless they pass\ntheir extensive test suites. However, the public APIs in snapshot libraries might be changed prior to a stable release.\n\n## Documentation\n\n### Official guides\n\nEach module contains a `README.md` file with a list of all its features and a guide with useful code snippets.\nBrowse through the directories in the root folder to find out more about each library.\n\n### Source documentation\n\nAll functionalities are documented with Kotlin _KDocs_. You can access the source documentation by:\n\n- Viewing the generated Dokka files hosted on the [project website](https://libktx.github.io/docs/).\n- Extracting the `doc` folders with Dokka files from the [release archives](https://github.com/libktx/ktx/releases).\n- Reading the sources directly.\n\n### Links\n\n[**KTX** wiki](https://github.com/libktx/ktx/wiki) lists some useful resources that can help you get started.\n\nMost official guides and code examples in this repository assume that the reader is at least a bit familiar with\nthe libGDX API. If you are just getting to know the framework, it might be helpful to go through\n[the official libGDX wiki](https://libgdx.com/wiki/), and convert some Java examples to Kotlin.\n\n## [Contribution](.github/CONTRIBUTING.md)\n\nSuggestions, questions, typo fixes, documentation improvements and code contributions are always welcome.\n\nDo not hesitate to [start a discussion](https://github.com/libktx/ktx/discussions) with questions about the framework.\nFeel free to advertise your **KTX** project, propose new features, discuss game jams, or even create a personal devlog.\n\nIf you would like to contribute, please read [the contribution guideline](.github/CONTRIBUTING.md), and browse through\n[the active issues](https://github.com/libktx/ktx/issues). The [`develop`](https://github.com/libktx/ktx/tree/develop/)\nis the active development branch. When creating pull requests, make sure to choose `develop` as the target branch.\n\nYou can check the list of the contributors via [GitHub insights](https://github.com/libktx/ktx/graphs/contributors)\nor [the contributors list](.github/CONTRIBUTORS.md).\n\n### Licensing\n\nThis project is dedicated to [public domain](LICENSE.txt).\n\n### Working from sources\n\nSee [this section](.github/CONTRIBUTING.md#working-from-sources) of the contribution guideline to get started.\n","funding_links":["https://github.com/sponsors/czyzby","https://opencollective.com/ktx"],"categories":["Libraries","Resources"],"sub_categories":["Others","Kotlin"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibktx%2Fktx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flibktx%2Fktx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibktx%2Fktx/lists"}