Run any Java Swing application inside a modern web browser — pure HTML5, zero plugins, zero client-side installation.
Getting Started · Build · What's New · Architecture
WebSwing Lite is a modernized, open-source edition of WebSwing — the web server that renders Java Swing applications in HTML5 Canvas and delivers them to any browser via WebSocket.
This edition is based on the last open-source release (v20.2.5) of WebSwing, updated and maintained by Manticore Projects with a focus on modern JDK compatibility, security, and build toolchain modernization.
Looking for the full-featured commercial edition? WebSwing Lite does not include advanced capabilities such as cluster session pooling, load balancing, recording/playback, advanced admin console, and commercial support. For production deployments at scale, we encourage you to explore the Commercial Edition at webswing.org →
Recommended standard OpenJDK distributions: Eclipse Temurin, BellSoft Liberica, or Amazon Corretto.
| JDK | Status | Temurin Support | Notes |
|---|---|---|---|
| 17 (LTS) | 🔶 Supported | Oct 2027 | Toolchain of the build |
| 21 (LTS) | ✅ Supported | Dec 2029 | |
| 23 | ✅ Supported | ⛔ EOL (Mar 2025) | Non-LTS, 6-month lifecycle |
| 25 (LTS) | ✅ Supported | Sep 2031 | Current LTS |
| 26 | ✅ Supported | Sep 2026 | Non-LTS; requires --sun-misc-unsafe-memory-access=allow |
All internal APIs adapted for the post-JDK-11 module system — no --illegal-access=permit, no -noverify required.
Beware: JetBrains Runtime modifies AWT's internal keyboard focus dispatch, which breaks when Webswing replaces the toolkit. Mouse events are unaffected because they bypass the patched focus path.
Try the Online JSQLFormatter using Webswing Lite 
- Shiro Security Plugin with hot configuration reloading provides authorization via AD/LDAP/Database/Text Files with or without 2FA (Second Factory authorization)
- SVG Application Icons
- better server start scripts supporting SSL certificate registration and WAR version numbers
- Deduplication of the java libraries in the WAR file, reducing the size drastically
- Node.js 24 LTS — migrated from Node 10; Webpack 5, TypeScript 5, Dart Sass
- Gradle build system — fast, incremental builds
- All dependencies updated — Jetty12, Jackson3, Guava, Log4j2, SLF4J 2.0, Apache Commons, Protocol Buffers, LZ4, and more
- Active monitoring via SNYK and Semgrep
- SSE/AVX-optimized PNG encoding via fpng-java — hardware-accelerated image compression in the DirectDraw rendering pipeline
- Browser-side font rendering — text is rendered as font names + coordinates instead of server-side glyph bitmaps, reducing WebSocket bandwidth by up to 80%
- GZIP/Brotli pre-compression for all static assets (reducing the JS size from 5 MB to less than 1 MB), GZIP compression for all content (JSON)
| Component | Version |
|---|---|
| JDK | 17 or later (21+ recommended; Eclipse Temurin) |
| Xvfb | Required on headless Linux servers |
# Download the latest release
curl -LO https://github.com/manticore-projects/webswing/releases/latest/download/webswing-26.1.zip
unzip webswing-26.1.zip
cd webswing-26.1
# Start the server
./run.sh start
# Open in your browser
open http://localhost:8080./run.sh start # Start the server (background, with log tailing)
./run.sh stop # Graceful shutdown (30s timeout, then SIGKILL)
./run.sh restart # Stop + Start
./run.sh status # Check if the server is running| Tool | Version |
|---|---|
| JDK | 21+ |
| Gradle | 8.12 |
| Git | 2.x |
Node.js and npm are automatically downloaded during the build — no manual installation needed.
# Clone the repository
git clone https://github.com/manticore-projects/webswing.git
cd webswing
# Full build
./gradlew clean build
# Build specific modules
./gradlew :webswing-directdraw:webswing-directdraw-javascript:build
./gradlew :webswing-server:webswing-server-frontend:build# Extract to your deployment directory
unzip build/dist/webswing-26.1.zip -d /opt/webswing
# Configure your Swing application in webswing.config
vim /opt/webswing/webswing.config
# Start
cd /opt/webswing && ./run.sh start┌─────────────────────────────────────────────────────────────┐
│ Browser │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ HTML5 Canvas ◄──── WebSocket ────► Event Capture │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────┬───────────────────────────┘
│
┌─────────────▼──────────-───┐
│ WebSwing Server │
│ (Jetty 12 / Servlet) │
│ │
│ ┌──────────────────────┐ │
│ │ Session Manager │ │
│ │ Security (Shiro) │ │
│ │ WebSocket Handler │ │
│ └──────────┬───────────┘ │
└─────────────┼──────────────┘
│ spawns
┌─────────────▼─────────-────┐
│ Child JVM Process │
│ │
│ ┌──────────────────────┐ │
│ │ WebToolkit (AWT) │ │
│ │ DirectDraw Pipeline │ │
│ │ Font Renderer │ │
│ │ ────────────────── │ │
│ │ Your Swing App │ │
│ └──────────────────────┘ │
└────────────────────────────┘
How it works: The server intercepts Java2D Graphics2D paint operations in the child JVM, serializes them via Protocol Buffers, and streams them over WebSocket to the browser. The browser's JavaScript engine deserializes and replays the draw commands on an HTML5 Canvas. User input (mouse, keyboard) flows back over the same WebSocket.
| Component | Version | Purpose |
|---|---|---|
| Jetty | 12.1.7 | Embedded HTTP/WebSocket server |
| Jackson | 3.1.1 | JSON serialization |
| Protocol Buffers | 3.25.5 | Binary wire format (DirectDraw) |
| Apache Shiro | 1.13.0 | Authentication & authorization |
| Guava | 33.5.0 | Core utilities |
| Log4j 2 | 2.25.3 | Logging framework |
| SLF4J | 2.0.17 | Logging facade |
| Webpack | 5.x | JavaScript bundling |
| TypeScript | 5.x | Type-safe frontend code |
This project is based on WebSwing v20.2.5, the last open-source release under the AGPL v3 license. All credit for the original WebSwing architecture and implementation goes to the WebSwing team.
If you use WebSwing Lite to deliver your product, please provide attribution and a link to webswing.org.
This project is licensed under the GNU Affero General Public License v3.0.
Maintained by Manticore Projects
Building enterprise financial software for banks and insurances since 2011.