Library / SDK
HumbleUI/JWM avatar
HumbleUI/JWM

JWM wants to be the Electron for the JVM, and it says so in alpha

Cross-platform window management and OS integration library for Java

644 stars50 forksC++Apache-2.0

At a glance

What is it?
HumbleUI's JWM is a C++ backed Java library that creates native windows and wires up OS integration on Windows, macOS and X11. The support tables are honest about what is missing, and the project labels itself Alpha with expected API breakages.
Who is it for?
Adopt JWM if you are willing to track an Alpha library and your application needs real native window behaviour on Windows, macOS or X11, with Skija or another renderer drawing the contents. Do not adopt it for a product that cannot absorb API breakages, and do not assume Wayland, drag and drop, notifications or window resizing constraints are handled, since the project tables mark several of them unsupported.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 116 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A native windowing layer written for the JVM

JWM is described as a cross-platform Java window management and OS integration library, and the way it is built is the interesting part. The primary language is C++, with platform directories named linux/, macos/ and windows/ at the repository root, a shared/ directory for common code, and CMakeLists.txt driving the native build. Above that sits a Java API intended to abstract over window creation, input handling and OS integration. The stated goals are a native JVM API, high quality OS integration that should be indistinguishable from native applications, and playing well with, but not requiring, Skija, the Skia based rendering library from the same organisation. The motto the project uses is "Electron for JVM, without Chrome and JS", which is a promise about the model rather than a performance claim: you get a native application binary and a JVM inside it, without carrying a browser engine.

The support tables show what is done and what is not

The project publishes per-platform tables for the app, theme, window, event, screen and clipboard surfaces, and they are the most useful document in the repository because they are specific. The app level operations are broadly covered: start, makeWindow, getScreens, getPrimaryScreen, runOnUIThread and terminate are marked supported on Windows, macOS and X11, with makeWindow on macOS still pointing at an open issue. Window operations are mostly there too, including show, setWindowPosition, setWindowSize, getWindowRect, requestFrame, minimize, maximize, restore and setTitle. Then the table stops being uniform. Set custom cursor, openFile, openFolder, setMinimumSize, setMaximumSize and setResizable are marked unsupported on all three platforms. Set system cursor is supported everywhere, but the ability to set a custom one is not, and that combination tells you the resizing and minimum size constraints are simply not implemented yet rather than configured off.

Text input, focus and scrolling differ per platform

Input handling is where the platform differences bite hardest. setTextInputEnabled and unmarkText work on Windows but are marked unsupported on macOS and X11, which is a meaningful gap for any application with a text field, since the marked text protocol is how IME composition is tracked. The event side mirrors that pattern: EventTextInput is supported on Windows and X11 but points at an open issue on macOS, while EventMouseScroll points at an open issue on Windows. Focus is supported on Windows and macOS but marked unsupported on X11, and Get ZOrder and Progress Bar exist only on macOS, while Transparency exists only on Windows and Toggle Fullscreen only on macOS and X11. Theme detection is thin as well: isHighContrast and isDark work on Windows and macOS, isInverted is macOS only, and the X11 column uses a neutral dash for all three. Drag and Drop, Touch events on anything but macOS, and Theme Changed are listed as unsupported across the board.

Alpha status with three releases in the first half of 2026

The project states its status in one line: Alpha, expect API breakages. That is the single most important sentence for an adopter, and it sits above the tables rather than buried in a changelog. The release numbering reflects it, with versions in the 0.4 range and recent tags at 0.4.23 on 2026-01-19, 0.4.24 on 2026-02-24 and 0.4.25 on 2026-06-16. The last push to the repository was on 2026-06-29, and a CHANGELOG.md file sits at the repository root for the detail. Maintenance, in other words, is recent, and the project is still moving. The licence is Apache-2.0 with a LICENSE file at the root, which permits modification and redistribution under its conditions, though that is a description of the licence rather than advice on how your own obligations work out.

Adding the dependency and building the native side

The artifact is published to Maven Central under a straightforward coordinate: the groupId is io.github.humbleui and the artifactId is jwm, with the version taken from the Maven Central badge the documentation displays. The Getting Started guide lives at docs/Getting Started.md inside the repository, and the resources list also points to a Jetpack Compose on JWM project, which shows how a third party toolkit sits on top of the library. The examples directory holds four runnable shapes: dashboard, empty, empty-native and native-image. Building from source is a different matter from consuming the artifact, because the native side has to be compiled for the host platform, and the repository ships a Dockerfile that documents the toolchain it expects:

dockerfile
FROM ubuntu:20.04
WORKDIR /root
RUN apt-get update -y && apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:ubuntu-toolchain-r/test
RUN add-apt-repository -y ppa:openjdk-r/ppa
RUN add-apt-repository -y ppa:git-core/ppa

The image then installs the X11 development packages and the JDK, and pulls down Maven 3.6.3 into the workspace, with JAVA_HOME pointed at the Java 11 installation. In other words, the native build is a CMake project with Linux, macOS and Windows variants rather than a single portable artefact, which is the price of the native integration the project is after.

How the team frames the alternatives

The project lists its prior art, and the comparisons are specific enough to be useful. AWT is described as bullet-proof and working everywhere, but with a two-threaded event loop that lags in the UI, dated font, color and dpi management, and no vsync. JavaFX is credited with a fixed threading model, but its performance is characterised as sometimes great and sometimes terrible, its fonts, color and graphics API as even more limited, its vsync as weird in the multi monitor case, and it has no real extensibility. GLFW via LWJGL and SDL2 are grouped together as game-oriented, with bad window management, no OS integration, and full screen as the main use case. Winit is noted as having been tried at JetBrains, with a complicated event loop model that tries to unify desktop, web and mobile. Electron is treated as inspiration rather than a competitor. If your Java UI work already fits inside AWT or JavaFX, JWM is asking you to trade a known API for a younger one.

Where JWM is the wrong tool right now

There are several honest reasons to wait. Alpha status means your code can break on a minor version bump, and a window management library is exactly the layer you do not want churning underneath an application. The gaps are concrete rather than theoretical: no drag and drop, no notifications, no custom cursors, no file or folder opening, no minimum, maximum or resizable constraints, and no Wayland support in the tables, which cover Windows, macOS and X11 only even though Wayland appears in the list of platforms the project plans to support. Text input enabling is missing outside Windows, and focus is missing on X11, so an application with a login field or an IME will hit edges. If you need any of those today, the alternative is not another library but the mainstream ones, AWT or JavaFX, which are slower in some ways and finished in others.

Editorial conclusion

Adopt JWM if you are willing to track an Alpha library and your application needs real native window behaviour on Windows, macOS or X11, with Skija or another renderer drawing the contents. Do not adopt it for a product that cannot absorb API breakages, and do not assume Wayland, drag and drop, notifications or window resizing constraints are handled, since the project tables mark several of them unsupported. Before writing any code, pull the io.github.humbleui:jwm artifact at the version shown by the Maven Central badge, work through docs/Getting Started.md, and check the support tables for the platform you actually ship on.

Frequently asked questions

What is the Maven dependency for the JWM library?

The coordinates are groupId io.github.humbleui and artifactId jwm, with the version shown by the Maven Central badge the documentation displays. The library is published to Maven Central as io.github.humbleui:jwm.

Is JWM stable enough for production use?

The project states its status as Alpha and tells users to expect API breakages. Recent releases include 0.4.23 on 2026-01-19, 0.4.24 on 2026-02-24 and 0.4.25 on 2026-06-16.

Which desktop platforms does JWM support today?

The project plans to support Windows, macOS, X11 and Wayland, but its support tables cover Windows, macOS and X11 only. Wayland does not yet appear in those tables.

Does JWM support drag and drop and notifications?

Not yet. The support tables mark Drag and Drop, Show notification and Theme Changed as unsupported across Windows, macOS and X11, and set custom cursor, openFile, openFolder and the resizing constraint methods are unsupported on all three as well.

Official sources

  1. HumbleUI/JWM on GitHub
  2. Issues
  3. License: Apache-2.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/humbleui-jwm.svg)](https://hysenlabs.com/projects/humbleui-jwm)

Was this useful?