{"id":15722027,"url":"https://github.com/bailuk/java-gtk","last_synced_at":"2025-04-06T00:06:53.685Z","repository":{"id":41183001,"uuid":"404475468","full_name":"bailuk/java-gtk","owner":"bailuk","description":"GTK bindings for Java","archived":false,"fork":false,"pushed_at":"2025-03-17T17:21:25.000Z","size":10927,"stargazers_count":123,"open_issues_count":1,"forks_count":9,"subscribers_count":4,"default_branch":"stage","last_synced_at":"2025-03-29T23:07:29.338Z","etag":null,"topics":["gtk-java","gtk4","java","library"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bailuk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-08T19:45:28.000Z","updated_at":"2025-03-17T17:21:30.000Z","dependencies_parsed_at":"2023-11-12T16:27:18.931Z","dependency_job_id":"c19f449e-bc28-469d-a726-437f455f7ca6","html_url":"https://github.com/bailuk/java-gtk","commit_stats":{"total_commits":405,"total_committers":2,"mean_commits":202.5,"dds":0.004938271604938316,"last_synced_commit":"cddc7a91e655dac67714ec593abcb44ef644fae4"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bailuk%2Fjava-gtk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bailuk%2Fjava-gtk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bailuk%2Fjava-gtk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bailuk%2Fjava-gtk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bailuk","download_url":"https://codeload.github.com/bailuk/java-gtk/tar.gz/refs/heads/stage","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247415967,"owners_count":20935388,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gtk-java","gtk4","java","library"],"created_at":"2024-10-03T22:03:09.824Z","updated_at":"2025-04-06T00:06:53.664Z","avatar_url":"https://github.com/bailuk.png","language":"Kotlin","readme":"[![Build on Debian](https://github.com/bailuk/java-gtk/actions/workflows/build-on-debian.yml/badge.svg)](https://github.com/bailuk/java-gtk/actions/workflows/build-on-debian.yml)\n[![Build on Fedora](https://github.com/bailuk/java-gtk/actions/workflows/build-on-fedora.yml/badge.svg)](https://github.com/bailuk/java-gtk/actions/workflows/build-on-fedora.yml)\n[![Build on Ubuntu](https://github.com/bailuk/java-gtk/actions/workflows/build-on-ubuntu.yml/badge.svg)](https://github.com/bailuk/java-gtk/actions/workflows/build-on-ubuntu.yml)\n[![Build on Windows](https://github.com/bailuk/java-gtk/actions/workflows/build-on-windows.yml/badge.svg)](https://github.com/bailuk/java-gtk/actions/workflows/build-on-windows.yml)\n[![JitPack](https://jitpack.io/v/bailuk/java-gtk.svg)](https://jitpack.io/#bailuk/java-gtk)\n\n# Java-GTK\nGTK 4 bindings for Java.\nIt uses [Java Native Access (JNA)](https://github.com/java-native-access/jna) to access GTK libraries. \n\n[![POC screenshot](doc/screenshot.png)](examples/src/main/java/examples/ImageBridge.java)\n\n## Example\n\n```java\npackage examples;\n\nimport ch.bailu.gtk.gio.ApplicationFlags;\nimport ch.bailu.gtk.gtk.Application;\nimport ch.bailu.gtk.gtk.ApplicationWindow;\nimport ch.bailu.gtk.gtk.Button;\nimport ch.bailu.gtk.type.Strs;\n\npublic class HelloWorld {\n    public static void main(String[] args) {\n        var app = new Application(\"com.example.hello\",\n                ApplicationFlags.FLAGS_NONE);\n\n        app.onActivate(() -\u003e {\n            // Create a new window\n            var window = new ApplicationWindow(app);\n\n            // Create a new button\n            var button = new Button();\n\n            // Set button label\n            button.setLabel(\"Hello, World!\");\n\n            // When the button is clicked, close the window\n            button.onClicked(window::close);\n\n            window.setChild(button);\n            window.show();\n        });\n\n        // Start application main loop\n        var result = app.run(args.length, new Strs(args));\n\n        // Terminate with exit code\n        System.exit(result);\n    }\n}\n```\n\n## Build and run\n`./gradlew generate` or `make gen`  \nCompiles and runs the code generator. This will generate Java code from [GIR](https://gi.readthedocs.io/en/latest/) files.\n\n- Input: `generator/src/resources/gir/*`\n- Output Java: `java-gtk/build/generated/src/main/java/[...]/*.java`\n- Configuration: [generator/src/main/kotlin/ch/bailu/gtk/Configuration.kt](generator/src/main/kotlin/ch/bailu/gtk/Configuration.kt)\n\n`./gradlew build` or `make`  \nCreates library, javadoc and run tests\n\n- Output: jar, javadoc.jar and sources.jar in `libray/build/libs/` \n\n`./gradlew run` or `make run`  \nRun the default demo application.\nThere are more demo applications in [examples/src/main/java/examples](examples/src/main/java/examples) including GeoClue2 and Adwaita samples.\n\n- To run on Windows see [doc/windows.md](doc/windows.md)\n- To run on MacOS see [doc/macos.md](doc/macos.md)\n\n`make install`  \nCompile Java library, generate JAR archive and copy JAR archive as artifact to local Maven repository (`~/.m2/repository`).\n\n## Integration\nLibrary and [Javadoc](https://javadoc.jitpack.io/com/github/bailuk/java-gtk/0.6.0/javadoc/) is available via [JitPack](https://jitpack.io).\n\n```kotlin\n// build.gradle.kts\nplugins {\n    application\n}\n\nrepositories {\n    maven { url = uri(\"https://jitpack.io\") }\n}\n\ndependencies {\n    implementation(\"com.github.bailuk:java-gtk:0.6.0\")\n}\n\napplication {\n    mainClass.set(\"examples.HelloWorld\")\n}\n```\n\n## Modules\n- `generator/`: Kotlin application that generates Java code from GIR files (xml parser -\u003e model builder -\u003e writer). GIR files are taken from Debian dev packages.\n- `java-gtk/` : java-gtk library depends on generated Java code.\n- `examples/` : Some examples to test the bindings. Mostly ported from [https://gitlab.gnome.org/GNOME/gtk/-/tree/main/demos/gtk-demo](https://gitlab.gnome.org/GNOME/gtk/-/tree/main/demos/gtk-demo).\n \n## License\n- Files in [generator/src/main/resources/gir/](generator/src/main/resources/gir) are comming from the [GTK project](https://gitlab.gnome.org/GNOME/gtk) and are therefore licensed under the GNU Library General Public License.\n- Examples in [examples/src/main/java/examples/gtk4_demo](examples/src/main/java/examples/gtk4_demo) are ported from the [GTK project](https://gitlab.gnome.org/GNOME/gtk/-/tree/main/demos/gtk-demo) and are therefore licensed under the GNU Library General Public License.   \n- Everything else licensed under the [MIT License](https://en.wikipedia.org/wiki/MIT_License)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbailuk%2Fjava-gtk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbailuk%2Fjava-gtk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbailuk%2Fjava-gtk/lists"}