ScriptWeaver
A small, accessible native desktop runtime for JavaScript apps — real native widgets, tiny single-file binaries, no embedded browser.
Write standard JS, lay out the widgets, and ship one binary that runs on Linux, macOS, and Windows.
Status: pre-release. v1.0 ships once Tcl/Tk 9.1 lands with first-class accessibility. Source is on GitLab; follow there for the cut.
A whole ScriptWeaver app — a native window with a button that opens a native dialog:
const btn = app.TButton({
text: 'Hello, World!',
onClick: () => sw.dialog.alert('You clicked it!'),
});
btn.pack.configure({ padx: 40, pady: 40 });
No HTML, no browser engine — that's the entire program. See the tutorial →
Why ScriptWeaver
- Native widgets, not WebView. Real Tk widgets backed by your platform's accessibility APIs — ATK + AT-SPI on Linux, IAccessible2 on Windows, NSAccessibility on macOS.
- Tiny. A typical Player binary is ~20 MB. No Chromium.
- Accessible by default. First-class screen-reader support comes from the runtime, not from each app having to reinvent it.
- Source-available. MPL-2.0 for the runtime; ship your own JS apps under whatever license you want.
When to pick ScriptWeaver
Useful when you need a desktop app that:
- Talks to local data (files, databases, hardware) rather than a remote API.
- Must be usable by people relying on screen readers, switch access, or other assistive tech — including for EU Accessibility Act compliance.
- Ships to environments where a 200 MB Electron download is a non-starter (kiosks, regulated industries, low-bandwidth deployments).
Get started
The docs are already online — start with the getting-started guide. The Player binary and downloads arrive with v1.0; until then: