{"id":49362976,"url":"https://github.com/manticore-projects/webswing","last_synced_at":"2026-05-09T07:04:06.520Z","repository":{"id":209249332,"uuid":"723575974","full_name":"manticore-projects/webswing","owner":"manticore-projects","description":"Java Swing in HTML5 Browser.","archived":false,"fork":false,"pushed_at":"2026-04-27T07:18:34.000Z","size":113836,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-27T17:40:06.162Z","etag":null,"topics":["bridge","browser","html5","java","middleware","swing-application","webapp"],"latest_commit_sha":null,"homepage":"https://manticore-projects.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"tonygermano/webswing-mirror","license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manticore-projects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-26T05:09:07.000Z","updated_at":"2026-04-27T07:18:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/manticore-projects/webswing","commit_stats":null,"previous_names":["manticore-projects/webswing"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/manticore-projects/webswing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manticore-projects%2Fwebswing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manticore-projects%2Fwebswing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manticore-projects%2Fwebswing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manticore-projects%2Fwebswing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manticore-projects","download_url":"https://codeload.github.com/manticore-projects/webswing/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manticore-projects%2Fwebswing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32810382,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["bridge","browser","html5","java","middleware","swing-application","webapp"],"created_at":"2026-04-27T17:34:08.713Z","updated_at":"2026-05-09T07:04:06.514Z","avatar_url":"https://github.com/manticore-projects.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# WebSwing Lite 26.3\n\n### Enterprise Java Swing Applications — Delivered Through Your Browser\n\n[![Build](https://img.shields.io/github/actions/workflow/status/manticore-projects/webswing/Gradle.yml?branch=master\u0026style=for-the-badge\u0026logo=githubactions\u0026logoColor=white\u0026label=Build)](https://github.com/manticore-projects/webswing/actions/workflows/Gradle.yml)\n[![Version](https://img.shields.io/badge/Version-26.3-orange?style=for-the-badge)](https://github.com/manticore-projects/webswing/releases)\n[![JDK 17+](https://img.shields.io/badge/JDK-17%2B%20%7C%2021%20%7C%2025%20%7C%2026-blue?style=for-the-badge\u0026logo=openjdk\u0026logoColor=white)](https://openjdk.org/)\n[![Node.js 24](https://img.shields.io/badge/Node.js-24%20LTS-339933?style=for-the-badge\u0026logo=nodedotjs\u0026logoColor=white)](https://nodejs.org/)\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-red?style=for-the-badge)](https://www.gnu.org/licenses/agpl-3.0)\n[![Build](https://img.shields.io/badge/Build-Gradle%20%7C%20Maven-02303A?style=for-the-badge\u0026logo=gradle\u0026logoColor=white)](https://gradle.org/)\n[![GitHub](https://img.shields.io/github/stars/manticore-projects/webswing?style=for-the-badge\u0026logo=github)](https://github.com/manticore-projects/webswing)\n\n\u003cbr/\u003e\n\n*Run any Java Swing application inside a modern web browser — pure HTML5, zero plugins, zero client-side installation.*\n\n\u003cbr/\u003e\n\n[Getting Started](#-getting-started) · [Build](#-build-instructions) · [What's New](#-whats-new) · [Architecture](#-architecture)\n\n---\n\n\u003c/div\u003e\n\n## Overview\n\n**WebSwing Lite** is a modernized, open-source edition of [WebSwing](https://www.webswing.org) — the web server that renders Java Swing applications in HTML5 Canvas and delivers them to any browser via WebSocket.\n\nThis edition is based on the **last open-source release (v20.2.5)** of WebSwing, updated and maintained by [Manticore Projects](https://manticore-projects.com) with a focus on **modern JDK compatibility**, **security**, and **build toolchain modernization**.\n\n\u003e **Looking for the full-featured commercial edition?**\n\u003e WebSwing Lite does not include advanced capabilities such as cluster session pooling, load balancing, recording/playback, advanced admin console, and commercial support.\n\u003e For production deployments at scale, we encourage you to explore the [**Commercial Edition at webswing.org**](https://www.webswing.org) →\n\n---\n\n## What's New\n\n### JDK Compatibility\n\nRecommended standard OpenJDK distributions: [Eclipse Temurin](https://adoptium.net/), [BellSoft Liberica](https://bell-sw.com/pages/downloads/), or [Amazon Corretto](https://aws.amazon.com/corretto/).\n\n| JDK |    Status    | Temurin Support | Notes                                                     |\n|:---:|:------------:|:---------------:|:----------------------------------------------------------|\n| 17 (LTS) | 🔶 Supported | Oct 2027 | Toolchain of the build                                    |\n| 21 (LTS) | ✅ Supported  | Dec 2029 |                                       |\n| 23 | ✅ Supported  | ⛔ EOL (Mar 2025) | Non-LTS, 6-month lifecycle                                |\n| 25 (LTS) | ✅ Supported  | Sep 2031 | Current LTS                                               |\n| 26 | ✅ Supported  | Sep 2026 | Non-LTS; requires `--sun-misc-unsafe-memory-access=allow` |\n\nAll internal APIs adapted for the post-JDK-11 module system — no `--illegal-access=permit`, no `-noverify` required.\n\n**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.\n\n### Demo\n\nTry the [Online JSQLFormatter using Webswing Lite](http://jsqlformatter.manticore-projects.com/jsqlformatter/demo.html?args=-c%20OoSQKgEgBApgHlAggZSgCgFBWz7yCiAMvgMJhQBUWuOAYgEoDyAslAMYBmMAdAE4wAHAPrwoASmrYANFA5xeSVJho4CxMtgCWAEyFsArr34A7NgE8hHXgHsAtpJWOZc3gEMALjAe4GLdndtrY24XDxghAAsAZ3dvHGAIfHp8dCgdPUMTc0sbWxl0gyMYUwtNY3drGQA3VwAbfXDtMPEoEAA5VLwiUnI03UKsiys7OMcx8YnJqencfP7M4uyyitGZtfWNyZlmVzg0WXluGvrG5rEoY4ahJs9VzfuHx19WNgCgkPkwyJiD3jvHgGA1ptNpJKAAKUY7XYXD4ghECHg-yBKMejA6LiOdSuNxgUAAPABeWBwLEna5hZGo6ljADiTAAqgAFKAAIQAmrgCgsSjkRjSBdS5hkirzltZxFTEG0ACJ9EWDITiqDEgBcrMYjAA0kISAz6Mk2iR2asGW0QOikIRCKs1D1sOrNTq9Qb8EaTesZABGVbPKDafR1SWzfy1WpCdxmAQwKKKdC27oaAD0FAA1FAZfQQAA1dq0oTIcD4NCIc4UJNUqhjP2vWyBYKvMNhNzhyPRqCuKntUH0CFQjr7VSJ8g7Pbyxu1Zt1CNR8L8DgtArWJueFsz6NCedU9Y1t4N5eT1fTtteGkJJIpdIxDz6WPQ-YAchID5kD4gD+D1PpjGZbM5S5XGA1xPT9NgZQs2lpVIAMPIDj1nTcYAXc4JDtDRQ1qbgl30cogIEVxeEjVYZDYARuFeHDV3wwiLG0GM2GIjCsP6A8p1qRiJ2YvRWKPVtZygAAfASoA-NAIBIVURME4SwGsXUIgI-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-57mNee-iL14DdmKsrqc+uwP2BJucj1+8+NBuoCWjjzo9gby2KJ9wK8sHtc0-m7gJbkXQItdsbvfrL06feKZ-uH5CvOfrdR+flAarugHf1aSllFKE8A9R7F-bzvJVHerMb-LFuGc25u-j1dYfI+rn9wr3x09aSF9q++57v5rgV9vQG7eezIkRtrrmy1mzW-Q-SfD6NyPUeY+4Gn5Xjy1eEeb4VWcf0ifLTaHv3rVX2nAMCk0Z-vXu7NwPnoXoqoKAAR9gPl9sPHXFAVFIPmvusBvlxGfsNqumNufFlNklrlvECMbHDBjIMIfIcCTtUqfGettnomrlbENFZjgGdswnVLOETnPuCqviBJ8mKl-vBMGgANxAA$$) \u003cimg width=\"33%\" alt=\"JSQLFormatter Screenshot\" align=\"right\" src=\"https://github.com/user-attachments/assets/93786995-983b-4b94-93a5-a3499f084e70\" /\u003e\n\n\n### Features\n\n- **Shiro Security Plugin** with hot configuration reloading provides authorization via AD/LDAP/Database/Text Files with or without 2FA (Second Factory authorization)\n- **SVG Application Icons**\n- better server start scripts supporting SSL certificate registration and WAR version numbers\n- Deduplication of the java libraries in the WAR file, reducing the size drastically\n- **Network resilience** for flaky corporate VPNs (Netskope, Zscaler) — HTTP/2 via ALPN, Conscrypt TLS (tolerates underscored SNI hostnames), per-socket TCP keepalive, 5-minute idle timeouts, TLS session resumption, tuned thread pool with `LowResourceMonitor`\n\n### Build \u0026 Runtime Modernization\n\n- **Node.js 24 LTS** — migrated from Node 10; Webpack 5, TypeScript 5, Dart Sass\n- **Gradle build system** — fast, incremental builds\n- **All dependencies updated** — Jetty12, Jackson3, Guava, Log4j2, SLF4J 2.0, Apache Commons, Protocol Buffers, LZ4, and more\n\n### Performance\n\n- **SSE/AVX-optimized PNG encoding** via [zpng-java](https://manticore-projects.com/FPNG-Java/index.html) — hardware-accelerated image compression in the DirectDraw rendering pipeline\n- **Browser-side font rendering** — text is rendered as font names + coordinates instead of server-side glyph bitmaps, reducing WebSocket bandwidth by up to 80%\n- **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)\n\n### Security\n\nThis fork implements defence-in-depth for deployment at regulated financial institutions.\n\n[![Known Vulnerabilities](https://snyk.io/test/github/manticore-projects/webswing/badge.svg?style=flat-square)](https://snyk.io/test/github/manticore-projects/webswing)\n[![Semgrep](https://github.com/manticore-projects/webswing/actions/workflows/semgrep.yml/badge.svg)](https://github.com/manticore-projects/webswing/actions/workflows/semgrep.yml)\n[![Semgrep](https://img.shields.io/badge/semgrep-scanning-green?style=flat-square\u0026logo=semgrep)](https://semgrep.dev)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/e6e58b5d5e65456bb206098319baf1f2)](https://app.codacy.com/gh/manticore-projects/webswing/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n\n**Continuous monitoring** via Snyk (dependency CVEs), Semgrep (SAST/OWASP Top 10), SpotBugs (bytecode analysis), and Codacy (code quality). CycloneDX SBOM generated with every release.\n\n**Proactive hardening** against entire vulnerability classes — not just known CVEs: deserialization allowlists (CWE-502), SSRF scheme validation (CWE-918), XSS content-type enforcement (CWE-79), Zip Slip / path traversal protection (CWE-22), log injection sanitisation (CWE-117), AES-CBC→AES-GCM migration, and HMAC-signed file identifiers.\n\n**Runtime** — non-root Docker container on Eclipse Temurin JRE 21 (Ubuntu Noble), multi-stage build excluding source and build tools from the image.\n\n**Compliance alignment** — tooling and controls support evidence gathering for DORA, SOC 2, ISO 27001, CBN IT Standards, NIST SSDF, and PCI DSS v4.0. SBOM output satisfies supply chain transparency requirements under NIST SP 800-218 and the EU Cyber Resilience Act.\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n| Component | Version |\n|-----------|---------|\n| JDK | 17 or later (21+ recommended; [Eclipse Temurin](https://adoptium.net/)) |\n| Xvfb | Required on headless Linux servers |\n\n### Quick Start\n\n```bash\n# Download the latest release\ncurl -LO https://github.com/manticore-projects/webswing/releases/latest/download/webswing-26.3.zip\nunzip webswing-26.3.zip\ncd webswing-26.3\n\n# Start the server\n./run.sh start\n\n# Open in your browser\nopen http://localhost:8080\n```\n\n### Management\n\n```bash\n./run.sh start      # Start the server (background, with log tailing)\n./run.sh stop       # Graceful shutdown (30s timeout, then SIGKILL)\n./run.sh restart    # Stop + Start\n./run.sh status     # Check if the server is running\n```\n\n---\n\n## Build Instructions\n\n### Prerequisites\n\n| Tool   | Version |\n|--------|---------|\n| JDK    | 21+     |\n| Gradle | 8.12    |\n| Git    | 2.x     |\n\n\u003e Node.js and npm are **automatically downloaded** during the build — no manual installation needed.\n\n### Build with Gradle\n\n```bash\n# Clone the repository\ngit clone https://github.com/manticore-projects/webswing.git\ncd webswing\n\n# Full build\n./gradlew clean build\n\n# Build specific modules\n./gradlew :webswing-directdraw:webswing-directdraw-javascript:build\n./gradlew :webswing-server:webswing-server-frontend:build\n```\n\n### Deploy\n\n```bash\n# Extract to your deployment directory\nunzip build/dist/webswing-26.3.zip -d /opt/webswing\n\n# Configure your Swing application in webswing.config\nvim /opt/webswing/webswing.config\n\n# Start\ncd /opt/webswing \u0026\u0026 ./run.sh start\n```\n\n---\n\n## Architecture\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"architecture.svg\" alt=\"WebSwing Lite Architecture\" width=\"800\"/\u003e\n\u003c/p\u003e\n\n**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.\n\n---\n\n## Dependency Overview\n\n| Component | Version | Purpose |\n|-----------|---------|---------|\n| Jetty | 12.1.+  | Embedded HTTP/WebSocket server |\n| Jackson | 3.+     | JSON serialization |\n| Protocol Buffers | 3.+     | Binary wire format (DirectDraw) |\n| Apache Shiro | 3.+     | Authentication \u0026 authorization |\n| Guava | 33.+    | Core utilities |\n| Log4j 2 | 2.+     | Logging framework |\n| SLF4J | 2.+     | Logging facade |\n| Webpack | 5.+     | JavaScript bundling |\n| TypeScript | 5.+     | Type-safe frontend code |\n\n\n---\n\n## Attribution\n\nThis project is based on [WebSwing](https://www.webswing.org) 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.\n\nIf you use WebSwing Lite to deliver your product, **please provide attribution and a link to [webswing.org](https://www.webswing.org).**\n\n## License\n\nThis project is licensed under the [GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.en.html).\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Maintained by [Manticore Projects](https://manticore-projects.com)**\n\n*Building enterprise financial software for banks and insurances since 2011.*\n\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanticore-projects%2Fwebswing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanticore-projects%2Fwebswing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanticore-projects%2Fwebswing/lists"}