-
1.0.0-RC1
StableAll checks were successfulRun Gradle build / run-gradle-build (push) Successful in 2m10sreleased this
2026-05-25 18:39:43 +02:00 | 10 commits to main since this releaseJava-GI 1.0.0-RC1 is the first release candidate for the upcoming 1.0.0 release.
This release contains a couple API changes compared to version 0.15.0, that may impact existing code:
- Introduced
Filenameclass for system-encoded text (see !358); these are overloaded whenever possible with aStringargument, but in some cases you may have to convert a value to a Filename or back. - Renamed many functions in the
org.javagi.interop.Interopclass - Renamed the inner class
DowncallHandlestoNativeHandles - Renamed
org.javagi.gobject.InstanceCache.getForType()toget() - Removed deprecated method
org.gnome.gio.ListStore.removeItem(int) - Removed broken functions from GLib bindings
- Several superfluous DestroyNotify arguments have been removed, and some other methods gained a missing DestroyNotify argument.
The renamed APIs are all in internal Java-GI code that users will usually not call directly. But generated bindings will not work anymore and must be re-generated with an upgraded version of the
java-gitool. If you encounter issues, please ask for help in the Java-GI Matrix channel.Fixes
- !353: Fix initialization of deep-derived Java classes. Thanks to @Til7701 for logging the issue.
- !355: Generate "@Nullable" annotations on record constructor parameters
- !357: Fix memory leak when reading array contents
- !360: Fix memory being released too soon after constructing a record with an "auto" arena
- !365: Exclude broken bindings for GLib functions
- !367: Fix methods with multiple callbacks with notified scope and shared DestroyNotify. Thanks to @dragon-Elec for logging the issue.
- !368: Improved Windows support
Improvements
- !354: Rewrote the MemoryLayout generator, generate static handles for field accessors, and renamed the "DowncallHandles" classes to "NativeHandles".
- !358, !369: Added support non-UTF8-encoded filenames
- !361: Added support for injecting code (for example additional methods) with patches
- !363: Generate GErrorException subclasses for all error domains
- !364: Add javadoc to GtkTreeListModel to help solve unexpected ClassCastExceptions. Thanks to @mrlem for logging the issue.
Miscellanious
- !356: Refactored the code generator (removed the "PartialStatement" class)
- !359: Refactored methods in Java-GI runtime utility classes. Old methods are still available in this release, and marked as deprecated.
- Removed deprecated method
org.gnome.gio.ListStore.removeItem(int)which has been renamed toremoveAt(int)for several releases
Availability and dependencies:
- The new release is available on Maven Central.
- Java-GI requires OpenJDK 25 or later.
- The bindings are based on the GNOME 50 libraries. These need to be installed.
Full Changelog: https://codeberg.org/java-gi/java-gi/compare/0.15.0...1.0.0-RC1
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads
- Introduced
-
0.15.0
StableAll checks were successfulRun Gradle build / publish (push) Successful in 1m58sreleased this
2026-04-18 17:20:30 +02:00 | 81 commits to main since this releaseJava-GI 0.15.0 is a major feature and bugfix release.
Highlights
- The bindings have been upgraded to GNOME 50 versions.
- Java-GI now requires OpenJDK 25 or later.
Fixes
- !333: Multiple fixes for GObject ownership handling, preventing memory leaks.
- !342: Multiple fixes and improvements for out-parameter and array handling, dependency handling, multiple
c:identifier-prefixes, and some issues specifically in ECal, Camel and related libraries. This PR also fixed an issue that caused the javadoc for callback parameters to not be generated. - !348: Fix deep inheritance of template classes defined in Java. Thanks to @Til7701 for logging the issue.
Improvements
- !335: Upgraded to JDK 25.
- !335: The Javadoc generator has been reworked to output Markdown Javadoc (JEP 467). This simplifies the documentation conversion, and improves the quality of the Javadoc formatting.
- !337: Improved the error reporting in case a native function was called that cannot be found. This will now raise an
UnsupportedOperationExceptionwith the name of the missing function in the exception message. - !340: Improved GErrorException to clarify ownership of the GError.
- !343: Renamed the (JPMS) modules to use
org.javagi, to improve consistency with the Maven artifact names. - !344: Updated the gir files to the latest GNOME 50 library versions.
- !345: For unions, there are now
read()andwrite()methods to read and write data from and to the fields
Miscellanious
- Migrated the repository and website from https://github.com/jwharm/java-gi to https://codeberg.org/java-gi/java-gi
- !335: Forked
github.com/square/javapoettocodeberg.org/java-gi/javapoet, and added Markdown Javadoc support - !336: Improved the construction of custom GObject classes using a Scoped Value (JEP 506)
- !339: Used JEP 513 (Flexible Constructor Bodies) to generate more concise constructor code (with no private helper methods anymore)
- !346: Added an xml file to configure information about the generated modules (this used to be hard-coded)
- !347: Refactored the Gradle build scripts
Availability and dependencies:
- The new release is available on Maven Central.
- Java-GI requires OpenJDK 25 or later.
- The bindings are based on the GNOME 50 libraries. These need to be installed.
Full Changelog: https://codeberg.org/java-gi/java-gi/compare/0.14.1...0.15.0
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
1 download
-
0.14.1 Stable
released this
2026-02-23 21:40:39 +01:00 | 174 commits to main since this releaseJava-GI 0.14.1 is a minor feature and bugfix release.
Fixes
- #327: Fix double
ref()-calls on callback arguments - #328, #329: Fix generation of several unused
Arenavariables - #330: Do not crash when InstanceCache contains a null value
Improvements
-
#332: Add support for enum (and flags) properties. Use them like this:
enum Artform { PAINTING, DRAWING } @Flags enum Color { RED, YELLOW, BLUE } class Artwork extends GObject { private Artform artform; private Set<Color> colors; // This getter/setter pair is registered as an enum property public void setArtform(Artform a) { this.artform = a; } public Artform getArtform() { return this.artform; } // This getter/setter pair is registered as a flags property public void setColors(Set<Color> colors) { this.colors = colors; } public Set<Color> getColors) { return this.colors; } } // Using the properties: var artwork = new Artwork(); artwork.setProperty("artform", Artform.PAINTING); artwork.setProperty("colors", EnumSet.of(Color.BLUE, Color.YELLOW));
Miscellanious
- Updated the gir files to the latest GNOME 49 library versions
- The Java-GI flatpak application template has been improved:
- Updated the app to use GNOME 49, Java-GI 0.14 and OpenJDK 25
- Simplified the flatpak manifest
- It's now easier to run the app directly with Gradle from an IDE, without flatpak-builder
- The flatpak build is now completely driven by Meson (with Gradle running as a custom target)
- #326: Bumped Gradle wrapper to version 9.3.1
- #331: Bumped JUnit Jupiter to version 6.0.3
Availability and dependencies:
- The new release is available on Maven Central.
- Java-GI requires OpenJDK 22 or later.
- The bindings are based on the GNOME 49 libraries. These need to be installed.
Full Changelog: https://github.com/jwharm/java-gi/compare/0.14.0...0.14.1
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
0 downloads
- #327: Fix double
-
0.14.0 Stable
released this
2026-01-31 16:50:11 +01:00 | 199 commits to main since this releaseJava-GI 0.14.0 is a major new feature and bugfix release. There was only one small change since 0.14.0-RC1. For the full release notes, read the release notes of Java-GI 0.14.0-RC1.
Highlights
GNOME 49
The bindings published with Java-GI 0.14.0 have been upgraded to the versions in GNOME 49.
JSpecify annotations
Java-GI 0.14.0 generates JSpecify nullability annotations, based on the information from GObject-Introspection. Null-safe languages such as Kotlin should have an improved development experience with these annotations.
Fixes
#325: Fixed a regression in retrieving the value of
javagi.path. (Thanks to @JFronny for reporting this issue.)Availability and dependencies:
- The new release is available on Maven Central.
- Java-GI requires OpenJDK 22 or later.
- The bindings are based on the GNOME 49 libraries. These need to be installed.
Full Changelog: https://github.com/jwharm/java-gi/compare/0.13.0...0.14.0
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
0 downloads
-
0.14.0-RC1 Stable
released this
2026-01-19 21:16:22 +01:00 | 202 commits to main since this releaseJava-GI 0.14.0-RC1 is the first release candidate of the upcoming 0.14.0 feature and bugfix release.
Improvements
#301: Added support for enums and flags in Hashtables, and fixed
Flags.of(int)to return a Set instead of a single flag.
#302: Added atoString()method for VariantType
#305: Added acast()method that will allow to “cast” instances to another type when an ordinary Java cast doesn’t suffice.
#306: Added JSpecify nullability annotations
#307: Upgraded the bindings to the versions in GNOME 49
#313: Added support for deeply derived classes
#323: Changed the "value" argument of the@Generatedannotation to "org.javagi.JavaGI"Fixes
#295: StreamVolume.getType() only returns null
#297: Unable to create HashTable with org.gnome.secret.SchemaAttributeType as value
#298: Activating Action causes SIGSEGV
#299: Can't cast Element to StreamVolume
#303: Unable to call a gtk instance method of a derived class if there is a virtual function with the same name
#316 / #318: Issues subclassing Widget in Clojure
#319 / #320: Unable to load libgettextlib.dll from MSYS2 MINGW64Thanks to @Nyeksenn, @williamahartman and @ibnu-ja for reporting issues.
Miscellanious
#317: Bump version of junit-jupiter dependency from 6.0.1 to 6.0.2
#321: Bump version of com.vanniktech.maven.publish plugin from 0.35.0 to 0.36.0
#322: Bump version of Gradle wrapper to 9.3.0Availability and dependencies:
- The new release is available on Maven Central.
- Java-GI requires OpenJDK 22 or later.
- The bindings are based on the GNOME 49 libraries. These need to be installed.
Full Changelog: https://github.com/jwharm/java-gi/compare/0.13.0...0.14.0-RC1
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
0 downloads
-
0.13.1 Stable
released this
2025-12-10 09:00:27 +01:00 | 231 commits to main since this releaseJava-GI 0.13.1 is a bugfix release.
Fixes
- A bug that crashed the
java-gicommand-line tool has been fixed (#309, thanks to @Daru-san for reporting), and the tool has been updated so that the generatedmodule-info.javaandbuild.gradlefiles work with the new domain name and module structure introduced in Java-GI 0.13.0. - The
org.javagi.util.Intlclass, introduced with Java-GI 0.13.0, was not usable with the GNOME Flatpak runtime because it couldn't findlibgettextlib.so. This has also been fixed.
Availability and dependencies:
- The new release is available on Maven Central.
- Java-GI requires OpenJDK 22 or later.
- The bindings are based on the GNOME 48 libraries. These need to be installed.
Full Changelog: https://github.com/jwharm/java-gi/compare/0.13.0...0.13.1
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
0 downloads
- A bug that crashed the
-
0.13.0 Stable
released this
2025-11-16 19:35:41 +01:00 | 265 commits to main since this releaseJava-GI 0.13.0 is a major new feature and bugfix release. There were no changes since 0.13.0-RC1.
All changes, fixes and other improvements in this release are listed in the release notes of Java-GI 0.13.0-RC1.
Availability and dependencies:
- The new release is available on Maven Central.
- Java-GI requires OpenJDK 22 or later.
- The bindings are based on the GNOME 48 libraries. These need to be installed.
Full Changelog: https://github.com/jwharm/java-gi/compare/0.12.2...0.13.0
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
0 downloads
-
0.13.0-RC1 Stable
released this
2025-11-03 23:44:43 +01:00 | 266 commits to main since this releaseJava-GI 0.13.0-RC1 contains a number of enhancements and bugfixes. It is the first release candidate for the upcoming 0.13.0 release.
Highlights
New domain name
One of the most visible changes in this release is the new java-gi.org domain name (#238). The Maven artifact coordinates have a new group-id, and all Java-GI packages and modules have a new name. This will break the code for all existing users, but should be easy to fix:
- Change the Maven group-id from
io.github.jwharm.javagitoorg.java-gi(mind the dash) in your dependency declarations; - Change all import statements starting of
io.github.jwharm.javagitoorg.javagi.
Reorganized modules & packages
#270: Many packages have been combined in modules:
- GLib, GObject, GIO and GModule are now bundled in one module
org.gnome.glib - Gsk, Gdk, Graphene and Gtk are bundled in
org.gnome.gtk - All GStreamer modules are in
org.freedesktop.gstreamer - All WebKit modules are in
org.webkitgtk - All regression test modules are in
org.gnome.gobjectintrospectiontests
#259: The package names of WebKitGTK bindings have been changed from
org.gnome.webkittoorg.webkitgtk. Users of the Java-GI WebkitGTK bindings will have to update the package names as described in #259.Last but not least, there are new bindings for LibRsvg, GstApp and LibSecret.
GNOME version
The bindings of Java-GI 0.13.0-RC1 are based on GNOME 48 (the same as the previous release 0.12.2).
An update to GNOME 49 will follow in a future release.Improvements
- Java-GI will now read the input value of an
Out<>parameter in Java, and set it as the initial value of the out-parameter of a native function.- This should be completely null-safe and automatically unbox primitive values, but still, if you encounter any issues with this, please log a GitHub issue.
- Java-GI now builds "library" and "test" modules. The "library" modules are published to Maven Central, while the "test" modules generate and compile Java bindings for the GObject-Introspection regression tests (GIMarshallingtests, Regress), and run JUnit testcases for these bindings.
- #234, #254, #257: A metadata parser was added to Java-GI, to make it easier to "patch" the GIR data. The metadata format is inspired by the Gir metadata format used by Vala.
- #237:
GObject.notify_(),Icon.toString_()andSocketConnectable.toString_()have been renamed. - #238: The package and module names have been renamed from
io.github.javagitoorg.javagiand the Maven group-id toorg.java-gi. - #253: Specified the actual ListModel element type, instead of the generic
<T extends GObject>, of several classes that implement ListModel. - #256: GString has been replaced in Java by
java.lang.String: java-gi will automatically marshal Java Strings from and to native GStrings when applicable. The classorg.gnome.glib.GStringis no longer generated. - #259: The package names of Webkit, JavaScriptCore and Webkit-Webprocessextension were wrong for multiple reasons, so they have been changed.
- #260, #261: Java-GI now registers boxed, enum and flags types in the internal TypeCache, enabling automatically conversion of GValues with boxed, enum and flags values from and to Java objects. #260 also added conversion of GValues with GStrv from and to Java
String[]values. - #264: It is now possible to pack and unpack GVariants from and to Java objects with the new
pack(),unpack()andunpackRecursive()methods of theorg.gnome.glib.Variantclass. - #267: The runtime platform checks have been removed. The checks didn't add much value, but complicated the code generator. Calling a function that is unavailable on your runtime platform will now throw
NullPointerException(instead of the oldUnsupportedPlatformException). - #271: Added GstApp-1.0 to the gstreamer module.
- #275: Added bindings for LibRsvg
- #281: Added a utility class to use GNU Gettext-based translations from Java
- #285: Added bindings for LibSecret
Fixes
NB. Several fixes don't have a linked issue; most of these were found while working on the regression tests.
- #222 & #224: Run cleanable immediately when calling yieldOwnership (thanks to @BwackNinja)
- #225: Fixed a race condition during cleanup of short-lived callback functions
- #223 & #227: Use a single upcall stub for all ToggleRefFinalizers to fix an out-of-memory error (thanks to @BwackNinja)
- Fix handling of a
void*alias that is used in an out-parameter - Fix handling of virtual methods with different parameter names than its invoker method
- For variadic callback functions, Java-GI used to generate incorrect code that didn't compile. The compile error has been fixed (but this type of callback function is not supported.)
- Treat alias of
va_listas an opaque pointer - Recognize a
GDestroyNotify*out-parameter - Added a couple temporary patches for missing out-parameter annotations in GstVideo gir data, to be submitted upstream
- Handle GObject properties of type
uchar - Fix the
writeXXX()method that is generated for GObject properties with a pointer to a primitive value (the method will now expect a MemorySegment value in Java) - Renamed
Implclasses that Java-GI uses internally for interfaces and abstract classes (such asFile.FileImpl) to$Implto prevent name clashes with types that actually have a name ending with "Impl" - Added support for marshaling zero-terminated
float[]arrays - Fix conversion of parameter names that start with an underscore
- #239: Fixed handling of constant declarations with suffixes
- Apply the "deprecated" annotation on all types where it is set in the Gir file, not only on methods
- Changed the return type of
GObject.connect()to a generic SignalConnection - #243: Fixed issues with array out-parameters
- #244: Various small fixes
- #245: Added missing Deprecated annotations on deprecated constant fields and enum members
- #246: Fixed an issue with displaying images in Javadoc for GskPath
- Many small fixes for array marshalling and proper memory allocation of arrays
- #250 Implemented a
malloc-based SegmentAllocator for memory that is freed by native code, but allocated in Java. - #251 Added support for struct/union parameters and return values that are passed by value, not by reference.
- #255 Improved handling of boxed types
- #268 Fixed ownership bugs of GError parameters
- #277: Fixed reading and writing to and from fixed-size array (SequenceLayout) fields in a struct
- #290: Added a runtime warning for a missing MemorySegment-constructor
- #296: Fixed signal argument handling for structs that are passed by value
Miscellanious
- Updated the dependency of cairo-java-bindings to 1.18.4.2
- Updated JUnit-Jupiter, com.vanniktech.maven.publish and GitHub actions dependencies
- #258: GIR files are now loaded by version and filename. Previously, java-gi only used the name (for example, "Gtk") to find a gir file. Now it uses the name and version (like "Gtk-4.0") to prevent conflicts when multiple versions of the same library have a gir file available in the same directory.
- #286: The
addressfield of the ProxyInstance class has been marked as deprecated. This field was set to public visibility in Java-GI 0.12, but that will be changed back toprivatein a future release. The deprecation will provide some time to update impacted code. - #287: Improved documentation about icon usage in templates (thanks to @Nyeksenn)
Availability and dependencies:
- The new release is available on Maven Central.
- Java-GI requires OpenJDK 22 or later.
- The bindings are based on the GNOME 48 libraries. These need to be installed.
Full Changelog: https://github.com/jwharm/java-gi/compare/0.12.2...0.13.0-RC1
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
0 downloads
- Change the Maven group-id from
-
0.12.2 Stable
released this
2025-05-07 22:04:29 +02:00 | 668 commits to main since this releaseJava-GI 0.12.2 is a bugfix release.
Fixes
- #216 & #219: Rework library loading with a focus on cross-platform support (thanks to @JFronny for the PR)
- #221 LibAdwaita 1.7 API not available: wrong versions of gir files were used to generate bindings
Availability and dependencies:
- The new release is available on Maven Central.
- Java-GI requires OpenJDK 22 or later.
- The bindings are based on the GNOME 48 libraries. These need to be installed.
Full Changelog: https://github.com/jwharm/java-gi/compare/0.12.1...0.12.2
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
0 downloads
-
0.12.1 Stable
released this
2025-05-02 21:21:01 +02:00 | 689 commits to main since this releaseJava-GI 0.12.1 is a bugfix release. There were no changes since 0.12.1-RC1.
Availability and dependencies:
- The new release is available on Maven Central.
- Java-GI requires OpenJDK 22 or later.
- The bindings are based on the GNOME 48 libraries. These need to be installed.
Full Changelog: https://github.com/jwharm/java-gi/compare/0.12.0...0.12.1
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
0 downloads