tantrum
June 25, 2026 ยท View on GitHub
A little bit of Fory (formerly Fury) for various libGDX-related libraries.
This lets Fory (currently 1.3.0) de/serialize objects from libGDX and several other libraries in its "tangential ecosystem." These other libraries are RegExodus, digital, and jdkgdxds; none of these three directly depend on libGDX, but all have been designed to be compatible with it.
This repo is modeled after kryo-more. There is a kryo-more sub-library for an older version of simple-graphs and the current version of gand, but gand mostly replaces what simple-graphs does while enabling serialization, and gand also doesn't need any external code to be able to use Fory. Similarly, there is a kryo-more sub-library for cringe and for juniper, but they aren't needed here because any types in cringe or juniper can be read and written without needing a Serializer.
This uses Fory's pure-Java serialization, which calls itself blazingly fast, and it actually is! In general, Fory's
automatic serialization is very high-quality, and it can be worthwhile to try not using a custom serializer in some
cases, because the automatic, generated serializers can actually be faster. Some cases are clearly better for the custom
serializers, though. For example, ordered maps and sets in jdkgdxds are better with a custom serializer from here,
because a custom serializer can simply read and write the entries in order. That avoids needing to store the separate
order(), which is a list of keys or items that an automatic serializer would otherwise save additionally.
How to get
Releases are delivered through JitPack. Maven Central is no longer a feasible way to publish this library, so we use JitPack to publish stable releases as well as commits. See my rant in the digital project for why. See JitPack's information on using it as a repo if you don't use gdx-liftoff to create projects, or you are otherwise making a project yourself and don't already use JitPack.
If you use Java 25 or higher, see Fory's needed JVM args. You can look at the build.gradle here to see how this project adds those JVM args.
The new versioning scheme shares one version for all four subprojects, which is the Fory version with an extra component for updates to any of the four subprojects. The last component resets to .0 when any Fory update is published.
- tantrum-libgdx is at version 1.3.0.0, compatible with libGDX 1.14.2
- tantrum-digital is at version 1.3.0.0, compatible with digital 0.10.2
- tantrum-jdkgdxds is at version 1.3.0.0, compatible with jdkgdxds 2.1.5
- tantrum-regexodus is at version 1.3.0.0, compatible with RegExodus 0.1.21
In earlier releases, this published through Maven Central, and each sub-library had its own version, linked to the version of the library it de/serializes. These are the last versions published to Maven Central; all future versions use a different versioning scheme and publish to JitPack.io .
In the old scheme, the last component of the version was usually .0, but was increased for bug-fixes to the same linked library version, or if Fory itself had an update available but the linked library did not have an update. The Fory version was updated quite a lot, and this component reached .27 .
- tantrum-libgdx was at version 1.14.2.27, compatible with libGDX 1.14.2
- tantrum-digital was at version 0.10.1.27, compatible with digital 0.10.1
- tantrum-jdkgdxds was at version 2.1.4.27, compatible with jdkgdxds 2.1.4
- tantrum-regexodus was at version 0.1.21.27, compatible with RegExodus 0.1.21
A while ago, tantrum-libgdx expanded to cover substantially more libGDX classes, from Color to
OrientedBoundingBox. If a class you need isn't covered, you can first read the sources here to see if writing a
serializer yourself is feasible, and if not, you can post an issue here requesting any classes that aren't present.
Some classes may not be possible to serialize reasonably, such as ones that use private or package-private
modifiers excessively without providing getters.
The current version of libGDX at the time of writing is 1.14.2, which works with Fory 1.3.0 via tantrum-libgdx 1.3.0.0 . The earlier 1.14.0 release works with tantrum-libgdx 1.14.0.24 and Fory 0.17.0. The older libGDX version 1.13.5 works with Fury (not Fory) 0.10.2 via tantrum-libgdx 1.13.5.8 . Version 1.14.2, 1.14.0, or 1.13.1 of libGDX is currently preferred due to bugs in 1.13.5, so if you must use a 1.13.x release, use tantrum-libgdx 1.13.1.10, which uses libGDX 1.13.1. If you need to use 1.13.0, which you probably won't ever need to consider, you should use tantrum-libgdx 1.12.1.6 instead. There are no tantrum-libgdx releases tied to libGDX 1.13.0 because that release wasn't really the quality you'd want to ship anything with.
All of these sub-libraries depend on Java 8, and will work with higher versions as well. Fory is not compatible with GWT, so no GWT info is provided here.
Gradle dependency info
tantrum-libgdx:
implementation "com.github.tommyettinger.tantrum:tantrum-libgdx:1.3.0.0"
tantrum-digital:
implementation "com.github.tommyettinger.tantrum:tantrum-digital:1.3.0.0"
tantrum-jdkgdxds:
implementation "com.github.tommyettinger.tantrum:tantrum-jdkgdxds:1.3.0.0"
tantrum-regexodus:
implementation "com.github.tommyettinger.tantrum:tantrum-regexodus:1.3.0.0"
Maven dependency info
tantrum-libgdx:
<dependency>
<groupId>com.github.tommyettinger.tantrum</groupId>
<artifactId>tantrum-libgdx</artifactId>
<version>1.3.0.0</version>
</dependency>
tantrum-digital:
<dependency>
<groupId>com.github.tommyettinger.tantrum</groupId>
<artifactId>tantrum-digital</artifactId>
<version>1.3.0.0</version>
</dependency>
tantrum-jdkgdxds:
<dependency>
<groupId>com.github.tommyettinger.tantrum</groupId>
<artifactId>tantrum-jdkgdxds</artifactId>
<version>1.3.0.0</version>
</dependency>
tantrum-regexodus:
<dependency>
<groupId>com.github.tommyettinger.tantrum</groupId>
<artifactId>tantrum-regexodus</artifactId>
<version>1.3.0.0</version>
</dependency>
GWT
GWT is not supported because Fory doesn't support it. You can use libGDX Json on GWT; all the libraries here (except libGDX itself) are supported by jdkgdxds-interop with Json.
Like how they support Fory without needing externally-defined Serializers, you can just use cringe
and gand with libGDX Json natively, since they have classes that implement Json.Serializable.
You do need jdkgdxds-interop to serialize juniper classes to JSON, though.
License
Apache 2.0, see the LICENSE file.