{"id":19458450,"url":"https://github.com/humbleui/jwm","last_synced_at":"2025-05-16T13:03:11.337Z","repository":{"id":37881210,"uuid":"364196978","full_name":"HumbleUI/JWM","owner":"HumbleUI","description":"Cross-platform window management and OS integration library for Java","archived":false,"fork":false,"pushed_at":"2025-04-11T13:56:50.000Z","size":2490,"stargazers_count":590,"open_issues_count":52,"forks_count":47,"subscribers_count":23,"default_branch":"main","last_synced_at":"2025-05-16T13:03:08.424Z","etag":null,"topics":["java","window-management"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HumbleUI.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-05-04T08:58:32.000Z","updated_at":"2025-05-04T20:53:37.000Z","dependencies_parsed_at":"2023-02-11T00:40:35.680Z","dependency_job_id":"6ac74c29-ad85-4d98-80a9-3109c8f0ac5c","html_url":"https://github.com/HumbleUI/JWM","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HumbleUI%2FJWM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HumbleUI%2FJWM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HumbleUI%2FJWM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HumbleUI%2FJWM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HumbleUI","download_url":"https://codeload.github.com/HumbleUI/JWM/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254535826,"owners_count":22087398,"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":["java","window-management"],"created_at":"2024-11-10T17:27:07.015Z","updated_at":"2025-05-16T13:03:11.317Z","avatar_url":"https://github.com/HumbleUI.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java Window Management library\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./extras/jwm_logo.svg\" height=\"400\"\u003e\n\u003c/p\u003e\n\n## Vision\n\nJWM is a cross-platform Java window management and OS integration library.\n\nJWM aims to expose an interface that abstracts over window creation, input handling and OS integration. It’s planned to support all the primary desktop platforms:\n\n- Windows\n- macOS\n- X11\n- Wayland\n\nPrimary goals:\n\n- Native JVM API\n- High-quality OS integration (indistinguishable from native apps)\n- Plays well with (but does not require) [Skija](https://github.com/HumbleUI/Skija)\n\nMotto: **“Electron for JVM, without Chrome and JS”**\n\n![](extras/screenshot.png)\n\n## Comparison to other UI/window libraries\n\nTraditionally, Java UIs struggled with high-quality OS integration. JWM plans to bring it to modern standards by implementing those integrations from scratch in modern low-level OS-native APIs. Prior art:\n\nAWT:\n\n- Bullet-proof, works everywhere\n- Event loop is two-threaded (lags in UI)\n- Dated font management, color management, dpi management\n- No vsync\n\nJavaFX:\n\n- Fixed threading model\n- Performance is [sometimes great, sometimes terrible](https://github.com/tonsky/java-graphics-benchmark/)\n- Even more limited fonts/color/graphics API\n- VSync is weird in multi-monitor case\n- No real extensibility\n\n[Winit](https://github.com/rust-windowing/winit):\n\n- Tried at JetBrains\n- Complicated event loop model (tries to unify desktop + web + mobile)\n- https://github.com/rust-windowing/winit/blob/master/FEATURES.md\n\nGLFW via LWJGL, SDL2:\n\n- Game-oriented\n- Bad window management\n- No OS integration\n- Create one window and go full-screen is the main use-case\n\nElectron:\n\n- Seems great, will use as inspiration\n- https://www.electronjs.org/docs\n\n## Dependency\n\nKey        | Value\n-----------|-----------------------\ngroupId    | io.github.humbleui\nartifactId | jwm\nversion    | ![version](https://img.shields.io/maven-central/v/io.github.humbleui/jwm)\n\n## Resources\n\n- [Getting Started](https://github.com/HumbleUI/JWM/blob/main/docs/Getting%20Started.md)\n- [Jetpack Compose on JWM](https://github.com/smallshen/JWM-Compose/)\n\n## Status\n\nAlpha. Expect API breakages.\n\n### App\n\n|                   | Windows | macOS | X11 |\n|-------------------|---------|-------|-----|\n| start             | ✅   | ✅   | ✅   |\n| makeWindow        | ✅   | [#121](https://github.com/HumbleUI/JWM/issues/121)   | ✅   |\n| getScreens        | ✅   | ✅   | ✅   |\n| getPrimaryScreen  | ✅   | ✅   | ✅   |\n| runOnUIThread     | ✅   | ✅   | ✅ |\n| terminate         | ✅   | ✅   | ✅   |\n| Show notification | ❌   | ❌   | ❌   |\n\n### Theme\n|                   | Windows | macOS | X11 |\n|-------------------|---------|-------|-----|\n| isHighContrast    | ✅      | ✅    | ➖  |\n| isDark            | ✅      | ✅ | ➖ |\n| isInverted        | [#161](https://github.com/HumbleUI/JWM/issues/161) | ✅ | ➖ |\n\n### Window\n\n|                     | Windows | macOS | X11 |\n|---------------------|---------|-------|-----|\n| setEventListener    | ✅   | ✅   | ✅   |\n| setTextInputClient  | ✅   | ✅   | ✅   |\n| setTextInputEnabled | ✅   | ❌   | ❌   |\n| unmarkText          | ✅   | ❌   | ❌   |\n| show                | ✅   | ✅   | ✅   |\n| getWindowRect       | ✅   | ✅   | ✅   |\n| getContentRect      | ✅   | ✅   | ✅   |\n| setWindowPosition   | ✅   | ✅   | ✅   |\n| setWindowSize       | ✅   | ✅   | ✅   |\n| setContentSize      | ✅   | ✅   | ✅   |\n| getScreen           | ✅   | ✅   | ✅   |\n| requestFrame        | ✅   | ✅   | ✅ |\n| close               | ✅   | [#107](https://github.com/HumbleUI/JWM/issues/107) | ✅   |\n| minimize            | ✅   | ✅  |  ✅   |\n| maximize            | ✅   | ✅  |  ✅   |\n| restore             | ✅   | ✅  |  ✅   |\n| setTitle            | ✅   | ✅   | ✅   |\n| setIcon             | ✅   | ✅   | [#95](https://github.com/HumbleUI/JWM/issues/95)  |\n| Set system cursor   | ✅   | ✅   | ✅  |\n| Customize titlebar  | [#75](https://github.com/HumbleUI/JWM/issues/75)  | [#75](https://github.com/HumbleUI/JWM/issues/75)  | [#75](https://github.com/HumbleUI/JWM/issues/75)  |\n| focus               | ✅   | ✅   | ❌   |\n| Get ZOrder          | ❌   | ✅   | ❌   |\n| Progress Bar        | ❌   | ✅   | ❌   |\n| Set custom cursor   | ❌   | ❌   | ❌   |\n| openFile            | ❌   | ❌   | ❌   |\n| openFolder          | ❌   | ❌   | ❌   |\n| Transparency        | ✅   | ❌   | ❌   |\n| Toggle Fullscreen   | ❌   | ✅   | ✅   |\n| setMinimumSize      | ❌   | ❌   | ❌   |\n| setMaximumSize      | ❌   | ❌   | ❌   |\n| setResizable        | ❌   | ❌   | ❌   |\n\n### Events\n\n|                         | Windows | macOS | X11 |\n|-------------------------|---------|-------|-----|\n| EventFrame              | ✅   | ✅   | ✅   |\n| EventKey                | ✅   | ✅   | ✅   |\n| EventMouseButton        | ✅   | ✅   | ✅   |\n| EventMouseMove          | ✅   | ✅   | ✅   |\n| EventMouseScroll        | [#115](https://github.com/HumbleUI/JWM/issues/115) | ✅   | ✅   |\n| EventTextInput          | ✅   | [#105](https://github.com/HumbleUI/JWM/issues/105) | ✅   |\n| EventTextInputMarked    | ✅   | ✅   | ✅   |\n| EventWindowCloseRequest | ✅   | ✅   | ✅   |\n| EventWindowMove         | ✅   | [#116](https://github.com/HumbleUI/JWM/issues/116) | ✅   |\n| EventWindowResize       | ✅   | ✅   | ✅   |\n| EventWindowMinimize     | ✅   | ✅   | [#96](https://github.com/HumbleUI/JWM/issues/96)   |\n| EventWindowMaximize     | ✅   | ✅   | [#96](https://github.com/HumbleUI/JWM/issues/96)   |\n| EventWindowRestore      | ✅   | ✅   | [#96](https://github.com/HumbleUI/JWM/issues/96)   |\n| EventWindowVisible      | [#140](https://github.com/HumbleUI/JWM/issues/140) | [#140](https://github.com/HumbleUI/JWM/issues/140)   | [#140](https://github.com/HumbleUI/JWM/issues/140)   |\n| EventWindowScreenChange | [#117](https://github.com/HumbleUI/JWM/issues/117) | [#117](https://github.com/HumbleUI/JWM/issues/117) | [#117](https://github.com/HumbleUI/JWM/issues/117) |\n| EventWindowFocusIn      | ✅   | ✅   | ✅   |\n| EventWindowFocusOut     | ✅   | ✅   | ✅   |\n| EventWindowFullScreenEnter | ❌   | ✅   | ❌   |\n| EventWindowFullScreenExit  | ❌   | ✅   | ❌   |\n| Drag \u0026 Drop             | ❌   | ❌   | ❌   |\n| Touch events            | ❌   | [#249](https://github.com/HumbleUI/JWM/issues/249)   | ❌   |\n| Theme Changed           | ❌   | ❌   | ❌   |\n\n### Screen\n\n|                         | Windows | macOS | X11 |\n|-------------------------|---------|-------|-----|\n| id                      | ✅      | ✅    | ✅  |\n| isPrimary               | ✅      | ✅    | ✅  |\n| bounds                  | ✅      | ✅    | ✅  |\n| scale                   | ✅      | ✅    | ✅  |\n| workArea                | ✅      | ✅    | [#119](https://github.com/HumbleUI/JWM/issues/119) |\n| colorSpace              | [#122](https://github.com/HumbleUI/JWM/issues/122) | [#122](https://github.com/HumbleUI/JWM/issues/122) | [#122](https://github.com/HumbleUI/JWM/issues/122) |\n\n### Clipboard\n\n|                | Windows | macOS | X11 |\n|----------------|---------|-------|-----|\n| set            | ✅      | [#51](https://github.com/HumbleUI/JWM/issues/51)   | ✅  |\n| get            | ✅      | [#51](https://github.com/HumbleUI/JWM/issues/51)   | ✅  |\n| getFormats     | ✅      | [#51](https://github.com/HumbleUI/JWM/issues/51)   | ✅  |\n| clear          | ✅      | [#51](https://github.com/HumbleUI/JWM/issues/51)   | ✅  |\n| registerFormat | ✅      | [#51](https://github.com/HumbleUI/JWM/issues/51)   | ✅  |\n\n### Layers\n\n|            | Windows | macOS | X11 |\n|------------|---------|-------|-----|\n| Raster     | ✅      | [#81](https://github.com/HumbleUI/JWM/issues/81)   | ✅  |\n| OpenGL     | ✅      | ✅    | ✅  |\n| DirectX 11 | ❌      | ➖    | ➖  |\n| DirectX 12 | ✅      | ➖    | ➖  |\n| Metal      | ➖      | ✅    | ➖  |\n| Vulkan     | ❌      | ➖    | ❌  |\n\n### Packaging\n\n|                | Windows | macOS | X11 |\n|----------------|---------|-------|-----|\n| Run on GraalVM | ❌      | ❌    | ❌  |\n| App package    | ❌      | ❌    | ❌  |\n\n## Building from source\n\nPrerequisites:\n\n- Shared: Git, CMake(3.11+), Ninja, C++ compiler, JDK 11+, $JAVA_HOME, Python 3\n- Windows 10: Microsoft Visual C++ (MSVC), x64 Native Tools Command Prompt for VS\n- Ubuntu 20.04: `libxcomposite-dev libxrandr-dev libgl1-mesa-dev libxi-dev libxcursor-dev`\n\nRun:\n\n```\n./script/build.py\n```\n\nRun examples:\n\n```\n./script/run.py\n```\n\nRun examples without building (use version from the table above):\n\n```\n./script/run.py --jwm-version \u003cversion\u003e\n```\n\n# Contributing\n\nPRs \u0026 issue reports are welcome!\n\nPlease read [Conventions](https://github.com/HumbleUI/JWM/blob/main/docs/Conventions.md) first.\n\nIf you are looking where to start, there’s a label: [Good first issue](https://github.com/HumbleUI/JWM/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).\n\nIssues labeled “[Design](https://github.com/HumbleUI/JWM/issues?q=is%3Aissue+is%3Aopen+label%3ADesign)” and “[Not sure](https://github.com/HumbleUI/JWM/issues?q=is%3Aissue+is%3Aopen+label%3A%22Not+sure%22)” require prior discussion—leave a comment with your ideas!\n\n# Contributors\n\n- [Nikita Prokopov](https://github.com/tonsky)\n- [Egor Orachyov](https://github.com/EgorOrachyov)\n- [Alexey Titov](https://github.com/Alex2772)\n- [Pavel Sergeev](https://github.com/SergeevPavel)\n- [110416](https://github.com/i10416)\n- [Matt Worzala](https://github.com/mworzala)\n- [dzaima](https://github.com/dzaima)\n\nDevelopment sponsored by:\n\n- [JetBrains](https://jetbrains.com/)\n- [Roam Research](https://roamresearch.com/)\n- [Clojurists Together](https://www.clojuriststogether.org/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumbleui%2Fjwm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhumbleui%2Fjwm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhumbleui%2Fjwm/lists"}