Introduction
ScriptWeaver builds native desktop applications in plain JavaScript. You write standard JS against a small widget API; the free Player runs it as a real native window — no web browser, no bundled browser engine, no Node.js.
Why ScriptWeaver
- Tiny and fast. The Player is a single static binary with native widgets. Apps start instantly and use a fraction of the memory of a browser-based (Electron / WebView) app.
- Truly cross-platform. The same script runs on Linux, macOS, and Windows.
- Zero-friction deployment. Your app is just JavaScript (plus any assets).
Ship a
.jsfile or a.zipbundle; users run it with the Player they already have — no installer, no runtime to set up. - Modern look out of the box. Bundled light / dark themes (Azure) make apps look contemporary from the first line.
The trade-off versus a web stack: you lay out native widgets (themed Tk), not HTML/CSS. For tools, utilities, forms, dashboards, and internal apps, that's usually a feature, not a limitation.
How it fits together
You don't need the internals to be productive, but in one sentence: Go orchestrates the process, QuickJS runs your JavaScript, and Tcl/Tk 9 draws the native widgets — combined into the one binary that is the Player.
In practice that means:
- You program in modern JavaScript (ES2023 — classes, modules,
async/await). - Widgets are objects:
app.TButton({ text: 'OK', onClick: … }). - The UI is native and themed, and the event loop never freezes the window while your code runs.
What you build with
- Widgets — buttons, entries, lists, tables, menus, a canvas, and more. See the widget reference.
- Layout — stack, grid, or flex your widgets. See Layout.
- System access — files, subprocesses, native dialogs, the clipboard, and the
network (
fetch). See System & files.
Next
- Install & run — get the Player and run something
- Hello, World — your first app in a minute
- Widget basics — the model behind every widget