Skip to content

Product1 publisher3 min readPublished

tinyjs trades Electron's bundled Chromium for a 5.6 MB JavaScript runtime

The project's own download page lists its example music player at 7.4 MB against Electron's 150 MB floor, with native Node addons and identical cross-platform rendering among the costs of getting there.

The Product Desk · Product desk

Illustration accompanying tinyjs trades Electron's bundled Chromium for a 5.6 MB JavaScript runtime

What happened

  • tinyjs builds desktop apps whose page talks to a backend over RPC on a Unix socket in a private temp dir, with nothing listening on a network port.
  • The menu bar including About and Quit, the file panels and the alert, confirm and prompt dialogs are answered by AppKit rather than by HTML in the page.
  • One `tinyjs build` command emits a codesigned, notarization-ready macOS bundle with the developer's icon, plus Windows and Linux binaries.
  • The project attributes Electron's 150 MB floor to bundling an entire Chromium and an entire Node inside every application.

Compiled by The Product DeskSomething wrong?How this is made

Why it matters

  • constraint Dropping one identical rendering engine per platform moves per-OS rendering checks onto the team that ships the app, at every release.
  • decision The project sends teams that want Rust in the stack or a mobile target to Tauri, which narrows tinyjs to JavaScript-only desktop tools.
  • capability A real backend runtime lets amp synthesize MIDI and tracker modules that the page says a webview cannot play, so features stop being capped by the browser.
  • exposure By the project's account Neutralino proxies its OS API over a localhost websocket server, while the tinyjs private socket leaves a reviewer no listening port to approve.

Install the tray clock on Windows and the time is gone from the menu bar. The project says the app is best on macOS and Linux, where the menu bar and app indicator can show live text, and that a tray icon on Windows has no label, so the clock becomes something you hover over to read, which the project says rather misses the point [17]. That caveat sits in a section the page frames as "the honest version, caveats included", the part where it says another tool is sometimes the better answer [23].

The size claim rests on not shipping a browser. tinyjs renders in the webview the machine already has and runs its backend on a 5.6 MB JavaScript runtime, which the project says brings the same app to about 6 MB [2]. Against the 150 MB floor, that is roughly 25 times smaller [3]. It also means the runtime is nearly the whole download: 5.6 of about 6 MB, leaving on the order of 0.4 MB for the app's own code and assets [4].

The page names what goes out with Chromium: one identical rendering engine on every platform, native Node addons, and a decade of Electron-shaped tooling [10]. On Tauri it is blunter. "If you want Rust in your stack, or you want mobile, use Tauri," the page says [12]. What it claims over Tauri is a JavaScript backend with no compile step and no second language in the project, plus an OS surface that arrives as the API instead of plugins added one at a time [11].

Two details matter for whoever has to maintain this. Frontend edits swap into the live window and backend edits restart the process, so development needs no build step [9]. Each project also ships a skill file, the page says, so coding agents already know the whole API [18].

All of the size figures come from the project's own download listings, for its own example apps: 4.4 MB for the catalog, 5.6 MB for the thirteen-tab demo app, 7.4 MB for the amp player [13][14][15]. Nothing published there measures how long anyone keeps one of these apps installed.

Two things settle it for a small tool. The first is whether the product survives being rendered by a different engine on each operating system; identical cross-platform rendering is the first item the page lists among what you give up [10]. The second is whether the app needs the native OS surface, meaning a real menu bar with About and Quit and an AppKit alert in place of a div [7]. Where both hold, the 6 MB is available. An app that depends on a native Node addon does not reach the size question at all, because that addon is on the same list [10].

What to watch

  • Size figures for an app someone else builds with tinyjs, measured outside the project's own download listings.
  • Whether the OS surface reaches parity on Windows and Linux, starting with a tray icon that can show live text.
  • Whether the capability gate for remote origins gets documented behaviour a security reviewer can sign off.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories