If you are looking for past changelogs, check out this page.

It has been some time since our last release, but version 1.13.0 of libGDX brings plenty of improvements and bug fixes. Check out the full list below to find out more.

Please note that at the moment, any desktop apps developed with version 1.13.0 seem to be incorrectly flagged by some antivirus programs. The likely cause is a false positive of LWJGL 3’s natives. Find out more here.

Breaking changes

The following changes require you to adapt your existing libGDX codebases:

  • [ANDROID] The minimum API level is now 19 (Android 4.4).
  • [ANDROID] Removed Input#setCatchBackKey, #isCatchBackKey, #setCatchMenuKey, and #isCatchMenuKey deprecated in 1.9.10. Use #setCatchKey and #isCatchKey instead.
  • [ANDROID] The Android backend now depends on AndroidX. To update your old projects, add android.useAndroidX=true to your gradle.properties file and add implementation "androidx.core:core:1.13.1" as dependency to your Android module.
  • [ANDROID & iOS] Exceptions occurring in Runnable tasks scheduled through Gdx.app.postRunnable(...) are no longer swallowed and will crash the app. Add a protection to your tasks if required.
  • [GWT] Updated to GWT 2.11.0 from 2.10.0. This improves the JRE emulation to support features from Java 11 like collections, streams, and more. To keep old projects working, add com.google.jsinterop:jsinterop-annotations:2.0.2:sources as dependency to your html subproject.
  • [iOS] The minimum supported iOS version is now 12.0. Update your Info.plist file if necessary.
  • [LWJGL3] The gdx-lwjgl3-glfw-awt-macos extension was retired. Just remove it from your dependencies and use the following snippet at the start of your main() method instead (#7361):
     if (SharedLibraryLoader.isMac) {
         Configuration.GLFW_LIBRARY_NAME.set("glfw_async");
     }
    

A few notable changes

In addition, there are a couple notable changes:

  • [CORE] There have been a couple of minor performance improvements, in particular to Sprite and SpriteBatch.
  • [CORE] Added Framebuffer multisample support (#7185). Take a look at GL31FrameBufferMultisampleTest for a simple example of how to use it.
  • [CORE] There is a new API to get user input via native text fields (#7004).
  • [GWT] The audio device can be switched now (#7243). This has to be enabled via GwtApplicationConfiguration#fetchAvailableOutputDevices beforehand.
  • [iOS] Updated to MobiVM 2.3.21 from 2.3.21.
  • [iOS] The iOS backend now has an implementaion for AudioDevice (#7371). It can be configured through IOSApplicationConfiguration with audioDeviceBufferSize and audioDeviceBufferCount.
  • [LWJGL3] Added the Lwjgl3ApplicationConfiguration#pauseWhenMinimized and #pauseWhenLostFocus flags to control when the application should call the pause() method on the ApplicationListener (#7287).
  • [LWJGL3] Support for Linux RISC-V has been added (#7275).

To check out our progress towards the next release, take a look at the corresponding milestone on GitHub. As always, we appreciate feedback on the issues/PRs already part of the milestone and would like to invite you to bring forward anything still missing on our Discord server!

Full changelog

Updating your Gradle project is straight-forward: Check out the instructions on the wiki!

- [BREAKING CHANGE] GWT: Updated to 2.11.0. `com.google.jsinterop:jsinterop-annotations:2.0.2:sources` must be added as a dependency to your html project dependencies.
- [BREAKING CHANGE] Android: Minimum API level is now level 19 (Android 4.4)
- [BREAKING CHANGE] iOS: Increased min supported iOS version to 12.0. Update your Info.plist file if necessary.
- [BREAKING CHANGE] Android, iOS: Exceptions occurring in Runnable tasks scheduled through Gdx.app.postRunnable() are no longer swallowed and will crash the app (add a protection if required).
- Updated: Update to jnigen 2.5.2
- iOS: Update to MobiVM 2.3.21
- iOS: The iOS backend now implements AudioDevice. It can be configured through IOSApplicationConfiguration with audioDeviceBufferSize/audioDeviceBufferCount
- Fixed GlyphLayout for fixed width glyph offsets at the start and end of lines.
- Fixed scene2d.ui layout for fractional positions and sizes.
- LWJGL3: Added pauseWhenMinimized and pauseWhenLostFocus flags to Lwjgl3ApplicationConfiguration.
- libGDX is now built using Java 17 due to Gradle 8 requirements.
- New GDX Setup projects now use Gradle 8.4 and AGP Plugin 8.1.2 which require at least Java 17.
- Fixed Timer#stop, remember time spent stopped and delay tasks when started again. #7281
- Android: Add configuration option to render under the cutout if available on the device.
- Fix: Keep SelectBox popup from extending past right edge of stage.
- Added Framebuffer multisample support (see GL31FrameBufferMultisampleTest.java for basic usage)
- Fix: Fonts generated with gdx-freetype no longer bleed when drawn with a shadow
- Fixed Timer tasks being run after cancellation.
- Optimization of SpriteBatch in GL30 default modes, as indices do not need to be updated
- Desktop: Added support for 8/32/64-bit PCM and MP3 WAVs
- Desktop: Improved support for surround sound audio files (#6792)
- Android: Added support for predictive back gesture (requires android:enableOnBackInvokedCallback="true" in manifest)
- API Removal: Removed deprecated back and menu key methods. Use `setCatchKey` and `isCatchKey` instead.
- Cache packed color on sprite to improve performance
- Improve JsonReader, add JsonSkimmer, JsonString
- Add proper glTexImage2D support on GWT
- Expose the color variables of Box2DDebugRenderer
- Add Color#set(Color rgb, float a)
- Prevent loss of precision in OrthographicCamera#update
- Fix offsets in ConvexHull while being unsorted
- Small particle emitter improvements
- Fix : RenderBuffer leak in GLFrameBuffer
- LWJGL 3: Remove unnecessary window.makeCurrent() calls to improve performance (#7362)
- Fix: DragListener only listens to the correct touch up events
- Fix incorrect glyph page index in FreeTypeFontGenerator
- Added TextureAtlas.TextureAtlasData.Page#name.
- iOS: Improve preferred FPS setting logic and documentation on iOS backend
- Fixed TextField breaking if the font has markup enabled.
- Only allow scrolling of a scroll pane if it has scroll focus
- iOS: Adding RoboVM AudioDevice implementation
- Add new Color#CLEAR_WHITE
- Fixed ScrollPane#scrollTo setting scrollX when there's a width
- Screens now extend the Disposable interface
- Added antialiasing flag to the ScreenUtils.
- Fix Intersector.intersectPolygons() corner case
- LWJGL 3: Fix the delta time not changing when resizing the window
- GWT: Allow switching the audio device; this has to be enabled via GwtApplicationConfiguration#fetchAvailableOutputDevices
- Add API to get user inout with native text fields (#7004)
- Fix issue with the 'request still pending' check on NetJavaImpl
- Added possibility to reset a particle effect without starting it
- Android & iOS: Use empty Audio implementations on Android and iOS when audio is disabled
- Adds status detection for an httpRequest
- Fix ANGLE GLES renderer on dekstop (#7274)
- Architecture support: Support for Linux RISC-V has been added. The gdx-xxx-natives-desktop.jar files now also contain native libraries for this architecture.

Updated: