{"_id":"swing-ui","_rev":"59-122c302f11a4078c3006a6d5294503e3","name":"swing-ui","dist-tags":{"latest":"1.0.7"},"versions":{"0.1.25":{"name":"swing-ui","version":"0.1.25","keywords":["gui","ui","\"user","interface\"","java","swing","forms","components","graphic","graphical"],"author":{"name":"Dmitriy Kulikovskiy"},"license":"SEE LICENCE IN A LICENCE FILE","_id":"swing-ui@0.1.25","maintainers":[{"name":"vitaminxp","email":"dima@vitaminxp.com"}],"homepage":"https://swing-ui.com","bugs":{"url":"https://swing-ui.com/contact-me"},"dist":{"shasum":"5eb2a74cb6781b67cf36c5ec91ce6b2f5b03f2ec","tarball":"https://registry.npmjs.org/swing-ui/-/swing-ui-0.1.25.tgz","fileCount":5,"integrity":"sha512-vDl8pl7392w5PJEtN+I+hEr8xLmx0m/6MmFgSWYo1PXovr5vLbSOlHFuMrGYM0E/RdZy7xVhhpTetypFUpJ0hw==","signatures":[{"sig":"MEQCIAVf+8VD3mok0pkvkEOnQcYnQAf+gX+4N3tKu/HJxdGAAiBuxwx/hC4GcrhKE+NHRgT4c/cb80yUb7A0VtRmrCah9Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1951},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"vitaminxp","email":"dima@vitaminxp.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.4.0","description":"Coming soon","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/swing-ui_0.1.25_1727224645158_0.8871454735085662","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"swing-ui","version":"1.0.1","keywords":["gui","ui","java","swing","graphic","graphical","interface","swing-ui"],"author":{"name":"swing-ui.com"},"license":"SEE LICENCE IN A LICENCE FILE","_id":"swing-ui@1.0.1","maintainers":[{"name":"vitaminxp","email":"dima@vitaminxp.com"}],"homepage":"https://swing-ui.com","bugs":{"url":"https://swing-ui.com/report-bug/"},"dist":{"shasum":"081ce4f346f968bbaf4eca2f1336b5b935894ecf","tarball":"https://registry.npmjs.org/swing-ui/-/swing-ui-1.0.1.tgz","fileCount":115,"integrity":"sha512-EFHx7cR+s0DLKRU4OPClfdwLZbph6VsMoeuBqQL6EDufUb3yhRQFr+z2AgIveIdz2O1mDW8cVOgpMYiVIPTdug==","signatures":[{"sig":"MEYCIQC/HE+tl83HCcV8e9gz6gVCxyUw5PtcKGmOwmVMo50LJwIhAJtTZ1fstErXBTX9VOCd8Sm2jpz2cQuG8k+14Yna6jYR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4694059},"main":"index.js","type":"module","types":"./types/index.d.ts","engines":{"bun":">= 1.1.0","deno":">= 2.6.0","node":">= 18"},"scripts":{"docs":"jsdoc -c docs-files/jsdoc.json","docs-to-json":"jsdoc -c docs-files/jsdoc.json --explain > docs-files/static/data.json","convert-json-docs":"node docs-files/convert-json-docs.js","apply-inherited-methods":"node docs-files/apply-inherited-methods.js"},"_npmUser":{"name":"vitaminxp","email":"dima@vitaminxp.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"Graphic User Interface for JavaScript","directories":{},"_nodeVersion":"18.20.6","dependencies":{"java-bridge":"^2.8.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/swing-ui_1.0.1_1788466859160_0.5549237997928498","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"swing-ui","version":"1.0.3","keywords":["gui","ui","java","swing","graphic","graphical","interface","swing-ui"],"author":{"name":"swing-ui.com"},"license":"SEE LICENCE IN A LICENCE FILE","_id":"swing-ui@1.0.3","maintainers":[{"name":"vitaminxp","email":"dima@vitaminxp.com"}],"homepage":"https://swing-ui.com","bugs":{"url":"https://swing-ui.com/report-bug/"},"dist":{"shasum":"cb7ce45364e7f7a25a58d6df9dbddccfe2ca4b4e","tarball":"https://registry.npmjs.org/swing-ui/-/swing-ui-1.0.3.tgz","fileCount":115,"integrity":"sha512-SZBS85KSI3NpRi4M+AJSpBYBYtY2jS9jZgLierTwY/aME00ZTfUmUTKsn7LDLO0UvwQvQxsZx3/SocW3+LmM4g==","signatures":[{"sig":"MEQCIFtElfXWpayplFc30Re+pyaOzRem6l8fsWjyaqQYFJftAiBO04AplhWq2TT/2JSvLoTwbvtXnZZC/IBUqfKkxV/gJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4695919},"main":"index.js","type":"module","types":"./types/index.d.ts","engines":{"bun":">= 1.1.0","deno":">= 2.6.0","node":">= 18"},"scripts":{"docs":"jsdoc -c docs-files/jsdoc.json","docs-to-json":"jsdoc -c docs-files/jsdoc.json --explain > docs-files/static/data.json","convert-json-docs":"node docs-files/convert-json-docs.js","apply-inherited-methods":"node docs-files/apply-inherited-methods.js"},"_npmUser":{"name":"vitaminxp","email":"dima@vitaminxp.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"Cross-platform Graphic User Interface for Node.js, Bun and Deno 2+","directories":{},"_nodeVersion":"18.20.6","dependencies":{"java-bridge":"^2.8.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/swing-ui_1.0.3_1789030690971_0.5020272503494076","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"swing-ui","version":"1.0.4","keywords":["gui","ui","java","swing","graphic","graphical","interface","swing-ui"],"author":{"name":"swing-ui.com"},"license":"SEE LICENCE IN A LICENCE FILE","_id":"swing-ui@1.0.4","maintainers":[{"name":"vitaminxp","email":"dima@vitaminxp.com"}],"homepage":"https://swing-ui.com","bugs":{"url":"https://swing-ui.com/report-bug/"},"dist":{"shasum":"a2871542760af951ae2709846f85897c78728330","tarball":"https://registry.npmjs.org/swing-ui/-/swing-ui-1.0.4.tgz","fileCount":115,"integrity":"sha512-aIQh3Y27xwldCDHw/Jd9Kac3ihVmvqcX1aqvrruXGLuwHd31+ohzM7yxkWEdgT3KwQN9GpRc9QKqpItmTsJEWw==","signatures":[{"sig":"MEUCIE+JIJI1CclB3zD+iYioYE/J6vRvETbvmYMtnrdG9yk6AiEA11kOn2Tdsx91Y80BgWnE+0nUe9X8m/iMsHDZN5hNAD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4696757},"main":"index.js","type":"module","types":"./types/index.d.ts","engines":{"bun":">= 1.1.0","deno":">= 2.6.0","node":">= 18"},"scripts":{"docs":"jsdoc -c docs-files/jsdoc.json","docs-to-json":"jsdoc -c docs-files/jsdoc.json --explain > docs-files/static/data.json","convert-json-docs":"node docs-files/convert-json-docs.js","apply-inherited-methods":"node docs-files/apply-inherited-methods.js"},"_npmUser":{"name":"vitaminxp","email":"dima@vitaminxp.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"Cross-platform Graphic User Interface for Node.js, Bun and Deno 2+","directories":{},"_nodeVersion":"18.20.6","dependencies":{"java-bridge":"^2.8.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/swing-ui_1.0.4_1789379842031_0.4596465429384402","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"swing-ui","version":"1.0.5","keywords":["gui","ui","java","swing","graphic","graphical","interface","swing-ui"],"author":{"name":"swing-ui.com"},"license":"SEE LICENCE IN A LICENCE FILE","_id":"swing-ui@1.0.5","maintainers":[{"name":"vitaminxp","email":"dima@vitaminxp.com"}],"homepage":"https://swing-ui.com","bugs":{"url":"https://swing-ui.com/report-bug/"},"dist":{"shasum":"e7ba0ae36134264c87a000ed56e733e850421142","tarball":"https://registry.npmjs.org/swing-ui/-/swing-ui-1.0.5.tgz","fileCount":115,"integrity":"sha512-MCBzlW+Q2BF1HzcO3/Xy+UPbwdyX3RGFSUEwBdoUA/OJGl/C0afMyCW8HuhAMEXzy1nMLqn5964GNlRYqY8csg==","signatures":[{"sig":"MEUCIChBjToDRjAxBVBa9ZTfEwLmYjsow2Cfq0VuHm0yZv2lAiEAmpqnDCj5gSZ2xiijnvdJwUI6ibEDaVPIMjf5a54Duvs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCAgF1yQ4v3YPNKJrjrRaox6pdR29DrCHPZTGe7hDL4zAIgDzrmmPZk9geSI/PCpV7GZ/6C8s1uK5d21Z0k8C1pGDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4699154},"main":"index.js","type":"module","types":"./types/index.d.ts","engines":{"bun":">= 1.1.0","deno":">= 2.6.0","node":">= 18"},"scripts":{"docs":"jsdoc -c docs-files/jsdoc.json","docs-to-json":"jsdoc -c docs-files/jsdoc.json --explain > docs-files/static/data.json","convert-json-docs":"node docs-files/convert-json-docs.js","apply-inherited-methods":"node docs-files/apply-inherited-methods.js"},"_npmUser":{"name":"vitaminxp","email":"dima@vitaminxp.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"Cross-platform Graphic User Interface for Node.js, Bun and Deno 2+","directories":{},"_nodeVersion":"18.20.6","dependencies":{"java-bridge":"^2.8.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/swing-ui_1.0.5_1789528556244_0.610151480801103","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"swing-ui","version":"1.0.6","keywords":["gui","ui","java","swing","graphic","graphical","interface","swing-ui"],"author":{"name":"swing-ui.com"},"license":"SEE LICENCE IN A LICENCE FILE","_id":"swing-ui@1.0.6","maintainers":[{"name":"vitaminxp","email":"dima@vitaminxp.com"}],"homepage":"https://swing-ui.com","bugs":{"url":"https://swing-ui.com/report-bug/"},"dist":{"shasum":"06d2c88457cec84bf4e662e8e7ac8f56ebfe8ba8","tarball":"https://registry.npmjs.org/swing-ui/-/swing-ui-1.0.6.tgz","fileCount":115,"integrity":"sha512-LLQf4SawOSj/1baVCKYN5+AFlcibj3w+VmEXAU4Ztgp7Hq/lCXXx/08n4yqNEHEjBIXgx6JkG4qLVJOJwkF7Fw==","signatures":[{"sig":"MEQCIBhg8oZznyJMLtW8xUjJQRaVMf29rKsrYQ4dPjstBH3jAiByirviTJT7fgyAUcESHNg6zamxYEDZwzfTMaOpI0X7XQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD3zVJZNjXIHuyMsuFeAoVoAUYyxra5zNqGjy16X7RwxQIgd01Buu7ctR+WP7oOzhBIIo51PLzusCFPcw0hRPOs8YI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4700014},"main":"index.js","type":"module","types":"./types/index.d.ts","engines":{"bun":">= 1.1.0","deno":">= 2.6.0","node":">= 18"},"scripts":{"docs":"jsdoc -c docs-files/jsdoc.json","docs-to-json":"jsdoc -c docs-files/jsdoc.json --explain > docs-files/static/data.json","convert-json-docs":"node docs-files/convert-json-docs.js","apply-inherited-methods":"node docs-files/apply-inherited-methods.js"},"_npmUser":{"name":"vitaminxp","email":"dima@vitaminxp.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"Cross-platform Graphic User Interface for Node.js, Bun and Deno 2+","directories":{},"_nodeVersion":"18.20.6","dependencies":{"java-bridge":"^2.8.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/swing-ui_1.0.6_1789597682291_0.5991015324518381","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"_id":"swing-ui@1.0.7","bugs":{"url":"https://swing-ui.com/report-bug/"},"dist":{"shasum":"b70c2960c9e224a6a4f109c01787afa641c92368","tarball":"https://registry.npmjs.org/swing-ui/-/swing-ui-1.0.7.tgz","fileCount":115,"integrity":"sha512-llft7ep8yVi0ZcHIAUwArRZOyJq5PTTVqV1qjUtb9kt02tbhns9DrsNCswDxX5IcUvq9vl0LpPSipmqVHQvgSQ==","signatures":[{"sig":"MEUCIQC4TX1GtExjY/XZ825PU0VvlbAaeFrB9rXw2sx9ZkzyJwIgZstOb4lUeVjvFUlG1HTeQo6ZWxi4Vi0+DR9ZST+yKjM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBA1Z3GHytEdPHe3BwNTeUY/YjQiOFna/pq31RROHQVmAiEA91HC8g7IL3IGw7jv1hYUK1R9KUo0Ul6mS96AeHfJuyo="}],"unpackedSize":4699715},"main":"index.js","name":"swing-ui","type":"module","types":"./types/index.d.ts","author":{"name":"swing-ui.com"},"engines":{"bun":">= 1.1.0","deno":">= 2.6.0","node":">= 18"},"license":"SEE LICENCE IN A LICENCE FILE","scripts":{"docs":"jsdoc -c docs-files/jsdoc.json","docs-to-json":"jsdoc -c docs-files/jsdoc.json --explain > docs-files/static/data.json","convert-json-docs":"node docs-files/convert-json-docs.js","apply-inherited-methods":"node docs-files/apply-inherited-methods.js"},"version":"1.0.7","_npmUser":{"name":"vitaminxp","email":"dima@vitaminxp.com"},"homepage":"https://swing-ui.com","keywords":["gui","ui","java","swing","graphic","graphical","interface","swing-ui"],"repository":{"url":"","type":"git"},"_npmVersion":"10.9.2","description":"Cross-platform Graphic User Interface for Node.js, Bun and Deno 2+","directories":{},"maintainers":[{"name":"vitaminxp","email":"dima@vitaminxp.com"}],"_nodeVersion":"18.20.6","dependencies":{"java-bridge":"^2.8.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/swing-ui_1.0.7_1789811580053_0.839732866535164"}}},"time":{"created":"2024-09-17T06:32:45.903Z","modified":"2026-09-19T09:53:00.361Z","0.1.1":"2024-09-17T06:32:46.143Z","0.1.2":"2024-09-17T07:01:31.844Z","0.1.3":"2024-09-17T07:13:55.528Z","0.1.4":"2024-09-17T08:00:12.811Z","0.1.5":"2024-09-17T21:03:30.942Z","0.1.6":"2024-09-17T21:21:03.259Z","0.1.7":"2024-09-17T22:00:41.305Z","0.1.8":"2024-09-17T22:02:56.291Z","0.1.9":"2024-09-17T22:10:20.440Z","0.1.10":"2024-09-18T05:40:05.932Z","0.1.11":"2024-09-18T05:44:41.778Z","0.1.12":"2024-09-19T04:00:14.810Z","0.1.13":"2024-09-19T15:53:44.728Z","0.1.14":"2024-09-19T16:01:27.605Z","0.1.15":"2024-09-19T16:04:08.685Z","0.1.16":"2024-09-19T18:55:38.814Z","0.1.17":"2024-09-19T18:57:43.626Z","0.1.18":"2024-09-19T18:59:22.787Z","0.1.19":"2024-09-19T19:16:15.424Z","0.1.20":"2024-09-20T20:29:44.109Z","0.1.21":"2024-09-21T17:28:34.481Z","0.1.22":"2024-09-21T23:52:38.574Z","0.1.23":"2024-09-23T17:03:32.960Z","0.1.24":"2024-09-24T00:51:09.669Z","0.1.25":"2024-09-25T00:37:25.331Z","1.0.0":"2026-09-03T20:14:28.159Z","1.0.1":"2026-09-03T20:20:59.452Z","1.0.2":"2026-09-10T08:22:18.753Z","1.0.3":"2026-09-10T08:58:11.177Z","1.0.4":"2026-09-14T09:57:22.403Z","1.0.5":"2026-09-16T03:15:56.419Z","1.0.6":"2026-09-16T22:28:02.516Z","1.0.7":"2026-09-19T09:53:00.208Z"},"bugs":{"url":"https://swing-ui.com/report-bug/"},"author":{"name":"swing-ui.com"},"license":"SEE LICENCE IN A LICENCE FILE","homepage":"https://swing-ui.com","keywords":["gui","ui","java","swing","graphic","graphical","interface","swing-ui"],"repository":{"url":"","type":"git"},"description":"Cross-platform Graphic User Interface for Node.js, Bun and Deno 2+","maintainers":[{"name":"vitaminxp","email":"dima@vitaminxp.com"}],"readme":"# `swing-ui` GUI Module\n\n**Build real cross-platform desktop apps in JavaScript — no Electron, no Chromium, no browser, no HTML/CSS**, no React/Angular/Svelte/Vue. **No back-end / front-end mess**.\n\nBuild once, run it on Windows, Linux and macOS in your favorite JavaScript runtime: Node.js, Bun, or Deno 2+.\n\n[![npm version](https://img.shields.io/npm/v/swing-ui.svg)](https://www.npmjs.com/package/swing-ui)\n![Node | Bun | Deno](https://img.shields.io/badge/runtime-Node.js%20%7C%20Bun%20%7C%20Deno%202%2B-brightgreen)\n![Windows | macOS | Linux](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-blue)\n[![npm license](https://img.shields.io/npm/l/swing-ui.svg)](https://www.npmjs.com/package/swing-ui)\n\n`swing-ui` wraps and upgrades the full Java Swing library so you can write native-looking, cross-platform desktop applications entirely in JavaScript using the JS runtime you already know: Node.js, Bun or Deno 2+.\n\nYou only write JavaScript and the GUI gets built, or better yet, use our [Visual GUI Designer](https://swing-ui.com/visual-gui-designer/) to skip coding at all.\n\nTry it in your project: `npm install swing-ui`.\n\nFor quick onboarding check out swing-ui.com [Getting Started](https://swing-ui.com/installation/) guide and [API reference](https://swing-ui.com/jsdocs.php).\n\n---\n\n> Finally, JavaScript is no longer for web browser and server back end. Now its for desktop apps too.\n\n## Problems with building JavaScript desktop apps without `swing-ui`\n \nIf you've shipped a desktop app in JS before, you've probably lived one of these:\n\n- **Electron works, but it's heavy, require HTML, CSS, ....** Every app ships its own copy of Chromium and Node, so installers balloon past 100–150 MB and even simple apps chew through RAM before you've drawn a single window.\n- **The \"lightweight\" alternatives mean leaving JavaScript.** Native performance and a small footprint usually mean learning Qt, WinForms, or raw Swing/AWT in a completely different language and ecosystem.\n- **HTML/CSS UIs never quite feel native.** Buttons, menus, and dialogs built in a webview look and behave like a webpage wearing a desktop costume, not a real OS application.\n- **Back-end/front-end confusion and management makes coding horrible.** Now it's just one JavaScript code like it should be.\n- **Asynchronous request calls to UI components from main application logic are messy.** `swing-ui` provides a synchronous deterministic code execution, so that when you request a text from a component in your main application logic code, you can use the returned text in your next line of code without using `await`, Promise and a callback function.\n\n`swing-ui` removes those issues. You get a **real native OS windows and UI components from enhanced Java Swing library** and you don't have to write a single line of Java code, HTML or CSS. Write your UI in plain JavaScript, or simply design the UI in our free **[swing-ui Visual GUI Designer](https://swing-ui.com/visual-gui-designer/)**.\n\n![swing-ui under the hood](https://swing-ui.com/wp-content/uploads/2026/04/3D-swing-ui-stack-244x300.png)\n\n---\n\n## Why developers love `swing-ui` GUI module\n\n- **No browser engine, no markup.** No Chromium bundled into your build, no HTML, no CSS — just JavaScript, or the visual GUI Designer if you'd rather not hand-position pixels.\n- **It's just JavaScript, with a chainable API.** Every component returns itself, so building UI reads like jQuery, not like fighting a framework:\n\n  ```js\n  const saveButton = new Button(\"Save\").position(15, 50).size(100, 30)\n    .addTo(window)\n    .onAction(e => save());\n  ```\n\n- **[JavaScript API](https://swing-ui.com/jsdocs.php) is super easy, intuitive, and well documented**. Quick onboarding docs and API reference is at [swing-ui.com](https://swing-ui.com).\n- **Simple synchronous code execution**. No need to use `await` or callback function to get Ui component property or value.\n- **For your convenience complex low level stuff is highly simplified without much compromise**. For example features like drag-and-drop, undo/redo, clipboard management, table manipulation, images support and much more.\n- **Looks native, not just close.** swing-ui can opt into your OS's system look-and-feel, so windows and controls take on native Windows, macOS, or Linux styling instead of a generic default theme.\n- **The full Java Swing component library, from JS.** Tables with sorting, filtering, column reordering and hiding; trees, tabs, and split views; rich clipboard and drag-and-drop support — including MIME types, both within your app and to/from other applications; full icon and image support across JPG, PNG, GIF, BMP, ICO, TIFF, HEIC, WEBP, AVIF; and deep event handling for actions, mouse, scrolling, resizing, and more.\n- **Runs on the runtime you already picked.** First-class support for **Node.js, Bun, and Deno 2+** — same API, same imports.\n- **Synchronous where it should be.** GUI calls, file reads/writes, clipboard access — no unnecessary `await` and callbacks for things that don't need it.\n- **One honest dependency.** swing-ui needs a Java 11+ JDK on the system PATH to power the native rendering — the whole trade-off for skipping Chromium. It's light enough to run on a $5 Raspberry Pi Zero, just slower than on a desktop.\n- **Multiple UI themes available.** In addition to few themes build into Java, like `metal` or system look-and-feel, `swing-ui` includes beautiful `FlatLaf` themes (light and dark) from https://www.formdev.com/flatlaf/.\n- **AI already writes apps with `swing-ui` GUI using our pre-made skill and GUI definition file schema**.\n\n---\n\n## Quick look\n\n```bash\nnpm install swing-ui\n```\n\n> Install it locally in each project — not with `-g` option.\n\n```js\nimport \"swing-ui\";\n\nclass HelloApp extends Window {\n  constructor() {\n    super(\"swing-ui Demo\");\n    this.innerSize(360, 160).position(200, 200).closeOperation(Window.CloseOperation.Exit);\n\n    new Label(\"What's your name?\").position(20, 20).size(300, 25).addTo(this);\n    const name = new TextField(\"type name here\").size(300, 28).position(20, 45).addTo(this);\n\n    new Button(\"Greet me\").position(20, 85).addTo(this)\n      .onAction(e => alert(`Hello, ${name.text()}!`));\n\n    this.show();\n  }\n}\n\nglobalThis.HelloApp = new HelloApp();\n```\n\nRun it with `node index.js` (or `bun index.js` / `deno run index.js`) and you get a real, resizable, native OS window — not a browser tab.\n\nThat's just a taste. Tables, trees, tabs, menus, system tray icons, custom drawing, and the full component API are all covered in the docs.\n\n---\n\n## See it in action\n\n- A [notes app built entirely with swing-ui](https://swing-ui.com/wp-content/uploads/2024/09/swing-ui-based-notes-application.jpg) — a real simple example of what you can ship\n- Our [Visual GUI Designer](https://swing-ui.com/wp-content/uploads/2026/04/GUI-Designer-1.png) was build entirely in JavaScript with `swing-ui` GUI module.\n---\n\n## What people build with it\n\n- Internal tools\n- Admin dashboards\n- Data-entry apps\n- File and asset managers\n- Monitoring utilities\n- Small line-of-business apps\n- Simple graphical games using shapes API\n- Vector drawing apps\n- Industrial control software\n- CNC software\n- Financial software with graphical graphs and charts\n- and much more...\n\nAnywhere you want a real desktop app without the weight of a browser runtime, and without leaving JavaScript to get it. With thousands of JavaScript modules now almost anything is possible in JavaScript.\n\n---\n\n## Requirements\n\n- Windows, Linux, or macOS\n- Node.js 18+, Bun 1.1+, or Deno 2+\n- Java 11+ JDK, with `java` available on the system `PATH`\n- 1 GHz processor and 500 MB RAM or more - light enough to even run on a $5 Raspberry Pi Zero\n- ECMAScript Module (ESM) mode only (`\"type\": \"module\"` in `package.json`)\n\n---\n\n## Docs\n\nThis README is just the pitch. Everything else lives at **[swing-ui.com](https://swing-ui.com)**:\n\n- Quick onboarding guide — go from `npm install` to `swing-ui` expert in no time\n- Full JavaScript API reference, class by class\n- Coding style and patterns explained, theming, Visual GUI Designer, and UI-definition-file guides\n- More examples\n\nFound a bug? [Report it here](https://swing-ui.com/report-bug/) — every report gets reviewed and helps to make `swing-ui` even better.\n\n","readmeFilename":"README.md"}