• 1.0.0-RC1 3ff6b154bb

    1.0.0-RC1
    All checks were successful
    Run Gradle build / run-gradle-build (push) Successful in 2m10s
    Stable

    jwharm released this 2026-05-25 18:39:43 +02:00 | 10 commits to main since this release

    Java-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 Filename class for system-encoded text (see !358); these are overloaded whenever possible with a String argument, but in some cases you may have to convert a value to a Filename or back.
    • Renamed many functions in the org.javagi.interop.Interop class
    • Renamed the inner class DowncallHandles to NativeHandles
    • Renamed org.javagi.gobject.InstanceCache.getForType() to get()
    • 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-gi tool. 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 to removeAt(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
  • 0.15.0 8106ffb74e

    0.15.0
    All checks were successful
    Run Gradle build / publish (push) Successful in 1m58s
    Stable

    jwharm released this 2026-04-18 17:20:30 +02:00 | 81 commits to main since this release

    Java-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 UnsupportedOperationException with 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() and write() 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/javapoet to codeberg.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
  • 0.14.1 fc1f58862a

    0.14.1 Stable

    jwharm released this 2026-02-23 21:40:39 +01:00 | 174 commits to main since this release

    Java-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 Arena variables
    • #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
  • 0.14.0 8a1842b50f

    0.14.0 Stable

    jwharm released this 2026-01-31 16:50:11 +01:00 | 199 commits to main since this release

    Java-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
  • 0.14.0-RC1 1d78b26dda

    0.14.0-RC1 Stable

    jwharm released this 2026-01-19 21:16:22 +01:00 | 202 commits to main since this release

    Java-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 a toString() method for VariantType
    #305: Added a cast() 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 @Generated annotation 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 MINGW64

    Thanks 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.0

    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-RC1

    Downloads
  • 0.13.1 b179a9bb5d

    0.13.1 Stable

    jwharm released this 2025-12-10 09:00:27 +01:00 | 231 commits to main since this release

    Java-GI 0.13.1 is a bugfix release.

    Fixes

    • A bug that crashed the java-gi command-line tool has been fixed (#309, thanks to @Daru-san for reporting), and the tool has been updated so that the generated module-info.java and build.gradle files work with the new domain name and module structure introduced in Java-GI 0.13.0.
    • The org.javagi.util.Intl class, introduced with Java-GI 0.13.0, was not usable with the GNOME Flatpak runtime because it couldn't find libgettextlib.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
  • 0.13.0 ceb296e5e2

    0.13.0 Stable

    jwharm released this 2025-11-16 19:35:41 +01:00 | 265 commits to main since this release

    Java-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
  • 0.13.0-RC1 96ba86e6b2

    0.13.0-RC1 Stable

    jwharm released this 2025-11-03 23:44:43 +01:00 | 266 commits to main since this release

    Java-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.javagi to org.java-gi (mind the dash) in your dependency declarations;
    • Change all import statements starting of io.github.jwharm.javagi to org.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.webkit to org.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_() and SocketConnectable.toString_() have been renamed.
    • #238: The package and module names have been renamed from io.github.javagi to org.javagi and the Maven group-id to org.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 class org.gnome.glib.GString is 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() and unpackRecursive() methods of the org.gnome.glib.Variant class.
    • #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 old UnsupportedPlatformException).
    • #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_list as 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 Impl classes that Java-GI uses internally for interfaces and abstract classes (such as File.FileImpl) to $Impl to 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 address field 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 to private in 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
  • 0.12.2 c41ebdd052

    0.12.2 Stable

    jwharm released this 2025-05-07 22:04:29 +02:00 | 668 commits to main since this release

    Java-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
  • 0.12.1 15284c8d16

    0.12.1 Stable

    jwharm released this 2025-05-02 21:21:01 +02:00 | 689 commits to main since this release

    Java-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