JavaScript desktop apps in under 10MB
#803 — September 22, 2026
JavaScript Weekly
tinyjs: Build JavaScript Desktop Apps in <10MB — I built an app with this and was impressed. You get a txiki.js-powered backend with full system access (including FFI!), native webview rendering, and tiny macOS, Linux, and Windows builds. It even makes it easy to sign/notarize the final app.
Tarwin Stroh-Spijer
There are lots of great options in this space though:
- Electrobun offers richer multi-window and GPU features, at the cost of a larger TypeScript runtime – though it can instead use Zig, Rust, Go, or Odin for a tiny native main process.
- Perry is a TypeScript to native AOT compiler whose primary UI model renders AppKit, Win32 and GTK4 widgets for a more conventionally native feel.
- Electron and the experimental Deno Desktop are powerful, but their executables typically run several times larger.
- Neutralinojs apps can be even smaller than tinyjs's, but you lose the general-purpose JavaScript privileged backend by design.
Full-Text Search in Drizzle Without a Second System — Try the official ParadeDB integration for Drizzle. Search your live Postgres tables. No ETL, no Elasticsearch. ParadeDB cloud coming soon.
ParadeDB sponsor
Persistent Databases in the Browser with DuckDB-Wasm and OPFS — A walkthrough of running DuckDB in the browser with a database file that survives reloads using the Origin Private File System now supported by all major browsers.
Piovesan and Wielenga (DuckDB)
How Linear Reworked Its CI for 4x the Tests — Eager agents grew Linear's test suite, and its CI costs with it! They share some remedies: rewriting type-aware ESLint rules as plain AST checks cut lint time 55% and eased a move to Oxlint, while selectively turning off Vitest's isolation saved a further 17% a month.
Mufeez Amjad (Linear)
IN BRIEF:
- Lovable rewrote Vite's dev server in Rust (calling it OJ) for performance reasons, but Evan You disputes the benchmark and predicts AI will have everyone maintaining "their own slop fork".
- 📊 npmchart.com plots download trends, releases and repo activity for any npm package (here's Svelte's, for example), and lets you compare packages.
- 🔒 npm now offers stage-only tokens to let automated workflows stage a release for a maintainer to approve with 2FA. This offers a migration path for those who can't move to trusted publishing yet.
RELEASES:
- Turborepo 2.11 – Experimental Rust, Python and Go support joins the task graph, plus up to 4x faster startup over 2.9.
- ESLint 10.11.0 – Performance update with faster startup and linting.
- Node.js 26.10.0 (Current) – Adds
util.debounce/throttle. - 📊 billboard.js 4.1, QuickJS-ng 0.17.0, VueUse 15.0
📖 Articles and Videos
An Undercover Analyst Infiltrated the Gang Behind 'Mini Shai-Hulud' — Bad news for the group behind this spring's cascading supply chain attacks… Google had a mole in their group chat! WIRED explains how the group was monitored and disrupted, leading to two recent arrests.
Andy Greenberg (WIRED)
The V8 Runtime Undermined My Constant-Time JavaScript Library — A look at how even branchless JavaScript can leak secrets through CPU cache behavior, due to quirks in how V8 handles booleans and -0.
Soatok Dreamseeker
Your UI Isn't Slow. It's Waiting on the Data — TimescaleDB extends Postgres so the data behind your UI loads fast as it grows. Get $1000 credit to start.
Tiger Data (creators of TimescaleDB) sponsor
Do Frameworks Matter Anymore? — If you're using AI, you're either using a framework or your agent is building an ad-hoc one on the fly. A Remix team member argues that's a good reason to want frameworks, and better ones, too.
Brooks Lybrand
📄 We Are All Product Engineers Now – Laurie argues that understanding what customers need becomes a core developer skill. Laurie Voss
📺 Is AI Changing How JavaScript Itself Gets Designed? – A 2-minute take from TC39 delegate Michael Ficarra. JetBrains
📄 Solid 2.0: It's the Little Things – Six touches that change how SolidJS 2.0 feels. Brenley Dueck
📄 How Notion Handles Concurrent Editing with CRDTs Nehmzow and Guo (Notion)
🛠 Code & Tools
Plotly.js 4: A Big Update for the Popular Charting Library — Now ships its own TypeScript types, adds ‘quiver’ plots (above) for drawing vector fields (with many awesome examples in the post), accepts CSS Color 4 color strings, and removes Mapbox GL in favor of MapLibre (no token needed!)
Chris Parmer
🤖 Transformers.js v4.3: Run AI Models in the Browser — Adds support for structured output (e.g. JSON), using WebGPU on Safari 26+, and DeepSeek v4. The docs have had an overhaul and there’s now an agent skill you can use.
Hugging Face
💡 Hugging Face also released a collection of 207 Apache-2.0 WebGPU kernels — matmul, attention and quantization ops for your own runtime.
Still Writing Tests Manually? Meticulous AI Is Here — Flaky tests slowing down dev? Meticulous gives engineers confidence to ship faster by autonomously testing every edge case of your web app.
Meticulous sponsor
@shadcn/lint: An Agent-First Linter for Tailwind — An ESLint/Oxlint plugin to enforce rules like "no raw colors" and "no restyling from outside" with errors to steer agents back to your variants and tokens.
shadcn
Devframe: A Framework for Building DevTools That Run Anywhere — From the developer behind Vitest and Nuxt DevTools, "a framework for building DevTools, in the same way Nuxt or Next.js provides a framework [for web apps]". Define a tool once and Devframe turns it into a Web Standard request handler you can mount almost anywhere.
Anthony Fu
✉️ Mailflare: A Self-Hosted Inbox Built Entirely on Cloudflare — A self-hosted inbox for custom domains built on Cloudflare’s Email Routing, Workers, D1 and R2. AGPL 3.0 licensed.
Hieu Nguyen
- gridstack.js 14.0 – The popular drag-and-drop dashboard layout library adds a
listmode that reflows widgets like a reorderable list. (Demos.) - 🖼️ image-dimensions 2.6 – Quickly get an image's dimensions by reading the least amount of data.
- Feedsmith 3.0 – A fast way to parse and generate web feeds, including RSS, Atom, and JSON.
📰 Classifieds
A developer's guide to adding eSignature to your app with an API: How signing workflows and embedded signing work, and the core steps to add signing to your product with Foxit.
🧩 CAPTCHA was built for a different internet. Replace it with invisible bot detection with a few lines of code. Try Fingerprint for free.
Meet chat.agent on Trigger.dev: durable AI agents built with the AI SDK you already use. Long-lived LLM sessions that survive deploys, crashes & refreshes.
📢 Elsewhere in the ecosystem
- I love these pure CSS 'hand drawn' annotations (above) you can add to any page in a
data-noteattribute. - Cloudflare's Sunil Pai writes about the senior engineer 'death spiral', where you go dark for weeks to prove yourself in a new role and end up burning out.
- 🤖 Simon Willison writes about Jev, a new, fast 'decision model' taking developer social media by storm. Feed it semi-structured state and one or more questions and you get only numbers back (probabilities, choices and scores).
- GitHub Actions has a new
cache-modesetting to limit cache access per workflow or job, a defence against the kind of cache poisoning that compromised TanStack's npm packages in May.