Releases: utopia-rise/godot-jvm
Release list
1.0.0-rc1
Here we go. The release candidate for 1.0.0 is here finally !
The goal is to keep it around a few weeks and address issues you might encounter before truly going stable, but that version should be good already. Feature are frozen for now and we'll wait a future 1.1, and we'll only focus on bug fixes. So please report as much as possible to make sure everything work properly.
Most changes this time are Quality of life features.
New features
- Node-scoped coroutines.
Node.launchandNode.asyncrun coroutines in aNodeScopetied to the node's lifetime, Godot signals can be collected asFlows, and frame-awaiting helpers replace the oldawaitMainThreadAPI. A newGodotDispatchers.MainThreadDeferreddispatcher runs every step through Godot's deferred queue so GDScript callers canawaitsignals emitted from a coroutine. - Simpler Gradle plugin API. The
godot { }block is split into focused sections for toolchains, registration, Android, and GraalVM. A new project needs onlylanguagesandisGodotCoroutinesEnabled; everything else has a default. - Godot-JVM section in export presets. Presets choose the runtime (JVM, GraalVM native image, or none) and can override the debug, memory, and custom-argument settings of
godot_jvm_configuration.json. The exported configuration is generated per preset with only the keys relevant to the target platform. If any dependency is missing like a jar, a warning will appear (Missing embedded JVM no longer shows up at the start of the editor) - Property groups in the inspector. New
@Group,@Subgroup, and@Categoryannotations organize exported properties, in Kotlin, Java, and Scala alike. - IntelliJ run configuration. The IDE plugin gains a Godot run configuration that starts the editor with the project's JDK, plus a "New Godot Script" action that generates a class with the annotations required by the selected registration mode
- Custom API generation. Projects can point the API generator at their own
extension_api.jsonto get bindings for a custom engine build or for extensions, straight from Gradle. --jvm-pathcommand-line option. Forces the JVM to run with for a single launch, overriding the embedded JRE,JAVA_HOME, andPATH.--strict-image-heapfor native images. The opt-inisGraalNativeImageStrictImageHeapEnabledproperty passes the flag to the native-image tool for reflection-heavy code.- Choose where dependencies are packaged.
implementationdependencies go intogodot-bootstrap.jaras before.godotMainmerges a dependency intomain.jarso it follows editor reloads, andgodotSinglekeeps it as an intact JAR for signed or unmergeable libraries. Both work on desktop, Android, GraalVM native image, and iOS. - iOS upgrade to JDK 25, if you use that export, update your local graalVM version.
Fixes
- RPC transfer mode, RPC on callables, byte-array encoding, and enum parameters did not round-trip correctly.
@IntFlagnames and@Fileextension filters were silently dropped and never reached the inspector.- The editor applied the project's JSON runtime settings to itself; it now uses defaults plus command-line flags only.
- Debug and JMX options were added to the JVM even when running a native image, Android, or iOS build.
- JVM discovery checked
PATHbeforeJAVA_HOME; the order is nowJAVA_HOMEfirst, thenPATH.
plugins {
id("com.utopia-rise.godot-jvm") version "1.0.0-rc1"
}1.0.0-dev3
Third dev version for the Godot-JVM gdextension.
- Android support is added and functionnal.
- iOS support is added but untested.
- Fix jar reloading
- Many other minor bugs, pray that yours were in the batch.
Update your Gradle plugin version, note the change of name to "godot-jvm":
plugins {
id("com.utopia-rise.godot-jvm") version "1.0.0-dev3"
}0.17.1-4.7.2
And now the true release based on stable Godot 4.7.2.
Note that unless there is a non-minor deal breaker bug in this release, it will be the last module release we do. And from now on, we will move the 1.0.0 once the gdextension build is stable.
Improvements made on the gdextension version were backported to it as well:
- Added fallback discovery for installed Java runtimes.
- Improved JVM export support and project template generation.
- Improved delegate registration.
- Fixed a coroutine worker-task completion race.
Update your Gradle plugin version:
plugins {
id("com.utopia-rise.godot-kotlin-jvm") version "0.17.1-4.7.2"
}1.0.0-dev2
Minor patch for Godot-JVM GDExtension.
As the module version is going to stop being update, all new feature/fixes are going to be for the gdextension branch from now on.
- Added fallback discovery for installed Java runtimes.
- Improved JVM export support and project template generation.
- Improved delegate registration.
- Fixed a coroutine worker-task completion race.
Update your Gradle plugin version, note the change of name to "godot-jvm":
plugins {
id("com.utopia-rise.godot-jvm") version "1.0.0-dev2"
}1.0.0-dev1
Dev release for the gdextension version of Godot-JVM
Download the addon zip and extract it in your godot project, then in the settings you can see and enable the gdextension.
There should be no other usage change, just write your scripts and build them as usual.
Update your Gradle plugin version, note the change of name to "godot-jvm":
plugins {
id("com.utopia-rise.godot-jvm") version "1.0.0-dev1"
}0.17.0-4.7.2
New release for Godot-JVM 0.17.0 against Godot 4.7.2.
This is the last non-patch release before switching to GDExtension.
⚠️ Breaking Changes
The registration layer has been entirely remade. It was redone from the ground-up so many bugs are to be expected. Open an issue if you found one.
- Registration annotations were renamed. Use
@Script,@Register,@Visible, and@Emitin place of@RegisterClass,@RegisterFunction,@RegisterProperty, and@RegisterSignal.*. .gdjare no longer the default script identity and are only generated for external dependencies without sources..kt,.java,.scalaare now the expected way to attach scripts. Be careful to rebind everything.- Registration modes. Choose inferred, explicit, or automatic registration; the IntelliJ plugin highlights registration errors using the selected mode.
- Abstract script classes. Abstract Godot classes can declare exposed members that are inherited by concrete script classes.
- Constructors are optional. A script can be registered without a no-argument constructor, and you can create it from code, but Godot can instantiate it only when a public no-argument constructor is present.
- Delegated properties. Kotlin delegated properties can also be registered.
Anyproperties. Properties declared asAnycan be registered.- Notifications. Use
@Notificationon a regular no-argument method instead of overriding_notificationto register a notification. - Enums. Enum properties, enum collections, and
BitField<Enum>are recognized from their types without an enum-hint annotation. - Custom property hint strings.
@HintStringsupplies the Godot hint string while retaining the inferred property-hint type. - Script reloading. Reloading now keeps source and virtual script resources associated by fully qualified class name.
- JVM status light. The editor toolbar now shows the current JVM initialization status beside Run Gradle.
🐛 Bug Fixes
- Fixed JVM binding leaks for freed non-
RefCountedobjects. - Fixed calls on freed Godot objects crashing through the JVM bridge.
- Fixed embedded-JRE packaging.
Update your Gradle plugin version:
plugins {
id("com.utopia-rise.godot-kotlin-jvm") version "0.17.0-4.7.2"
}0.16.3-4.6.3
Bump version to 0.16.3-4.6.3
0.16.2-4.6.3
New patch release for Godot Kotlin based on Godot 4.6.3.
New:
- A new simpler IDE plugin has been deployed and passed Jetbrain's review. It's still experimental so report any bug you can find, it mostly handle two things:
- New project creation
- Inspect your Godot code for any registration mistake (to activate manually in the inspection settings)
- Gdj generation can be entirely disabled if you only want to use source file directly.
- A fast build task has been added to the gradle plugin. After a first regular build, it can be used if your change doesn't change your script structurally (Put simply, you can use it if no registered signature changed).
Fixes:
- Fixed
VariantArray<Any?>and `Dictionary<Any?,Any?> creation - Fixed signal registration conflicts when a class declared a signal and a function with the same name.
- Fixed reloading replacing gdj path with virtual path
- Fixed buffer corruption when a registered function with Object argument was used for the first time.
- Removed incorrect warning when a LambdaCallable was called
- Improved
.gdjscanning to properly identified existing files - Registered class names are now sanitized when FQNAME mode is enabled
- Registration files now use unified indentation and a setting has been added in the gradle build.
- Coroutine dispatcher behavior has been improved. No more extra dispatches when already in the correct thread.
Don't forget to change your build.gradle configuration with the following line.
plugins {
id("com.utopia-rise.godot-kotlin-jvm") version "0.16.2-4.6.3"
}What's Changed
- Fix nullable VariantArray and Dictionary checks by @CedNaru in #920
- Unify gdj indent by @CedNaru in #921
- Fix IntelliJ plugin verification setup by @CedNaru in #925
- Remove registration of functions for signal by @CedNaru in #924
- Improve project build process by @CedNaru in #927
- Bump to 0.16.2 by @CedNaru in #931
- Improve virtual script path handling by @CedNaru in #930
- Sanitize registered class name by @CedNaru in #929
- Improve coroutine dispatchers by @CedNaru in #933
- Fix configuration cache by @CedNaru in #934
- Fix callable call issues by @CedNaru in #926
Full Changelog: 0.16.1-4.6.3...0.16.2-4.6.3
0.16.1-4.6.3
New minor release for Godot Kotlin based on Godot 4.6.3.
Warning:
This release contains large internal and workflow changes compared to the previous release.
If you are upgrading an existing project, you should review your Gradle configuration, make the necessary changes, and refresh its cache.
Your previous UUIDs will also be invalidated, so you should also have a full reload of your godot project (Made easier in Project/Tools in the editor)
Gradle plugin:
- Changes to the
godot {}configuration. - Individual languages can be enabled and their version chosen
(experimental). - Proper individual tasks to build for different targets.
- Configuration-cache friendly. You can set it to
truein your Gradle settings. - Optimized to become much shorter on hot runs, with less than 3 seconds on our 3D demo.
- Generated files are no longer added to the source set, so the workflow is much less intrusive.
- Library mode is much simpler and will not generate registrar or
.gdjfiles for you ahead of time.
IDE plugin:
- Simplification of the plugin to remove bloat.
- Project creation wizard entirely redone.
- Individual inspection settings for the 3 languages, but the focus remains on Kotlin.
- The IDE plugin should be generally much faster and should no longer hang as easily.
- Better feedback to tell you whether your JVM scripts are registered properly, including annotations, inheritance, properties, use of local copies, and related issues.
Signals and callables:
- Specific Java and Scala syntax have been added for
MethodCallableandLambdaCallableto bridge the gap with Kotlin. - Documentation properly explain how to use them for all 3 languages
Misc:
- UUIDS for scripts don't collide anymore.
- PackedArray support has been fixed and improved, including missing optimization for packed color arrays.
- Recent Godot math fixes have been ported to the Kotlin core types.
Warning:
Don't forget to change your build.gradle configuration with the following line.
plugins {
id("com.utopia-rise.godot-kotlin-jvm") version "0.16.1-4.6.3"
}What's Changed
- Bump to 4.6.2 by @CedNaru in #904
- Normalize JVM CLI flags, improve command-line parsing, and update docs by @CedNaru in #902
- Enable Gradle configuration cache in project template by @DSteve595 in #862
- Port recent Godot core math fixes to Kotlin core types by @Copilot in #907
- Add Dummy Implementation of abstract API class by @CedNaru in #906
- Rework Java API for Signal/Callable by @CedNaru in #833
- Rework gradle plugin, IDE plugin and shared Kotlin tool modules by @CedNaru in #911
- Fix and improve packedarray by @CedNaru in #915
- Update to 4.6.3 by @CedNaru in #918
New Contributors
- @Copilot made their first contribution in #907
Full Changelog: 0.15.0-4.6...0.16.1-4.6.3
0.15.0-4.6
The files prefixed with godot-kotlin-jvm_editor_ are the editors.
release editors are the editors you use normally. debug editors provide debug symbols and are intended to provide better stacktraces in case of crashes of the editor. Please use those when submitting bugreports.
godot-kotlin-jvm_export_templates_0.15.0-4.6.tpz is the archive for all export templates . See exporting documentation on how to use it.
Changelog:
Targets Godot 4.6. Update your Gradle plugin version:
plugins { id("com.utopia-rise.godot-kotlin-jvm") version "0.15.0-4.6" }
⚠️ Breaking Changes
✨ New Features
- Scala support (initial) – The binding now has initial support for Scala as a JVM language. ([#761](#761), [#888](#888))
- Godot 4.6 – The module has been updated to target Godot 4.6. ([#895](#895))
🐛 Bug Fixes
🔧 Internal / CI
Contributors
@piiertho · @CedNaru · @chippmann
Full diff: 0.14.3-4.5.1...0.15.0-4.6