Tauri-style · Pure TypeScript · ~2 MB runtime

The desktop framework,
rewritten in TypeScript

Ztron pairs the tiny txiki.js runtime with the system WebView: native windows, tray, menus, dialogs and 25 official plugins — behind a Tauri-compatible API you already know.

ztron — dev
$ ztron init my-app
✓ scaffolded src/main.ts + frontend/
$ cd my-app && ztron dev
✓ vite dev server + host + backend
✓ window opened — hello from Ztron

Everything a desktop app needs

Built for the web-skilled — the whole stack, from native host bindings to the frontend API, is TypeScript.

Featherweight runtime

txiki.js (~2 MB) replaces Node and Electron bundles. Your app ships small and starts fast.

Full-stack TypeScript

Core, plugin layer, CLI and frontend API are all TypeScript — typed commands via `ztron codegen`.

25 official plugins

store, http, sql, shell, updater, notification, clipboard and more — Tauri-parity APIs.

Least-privilege ACL

Capabilities gate every IPC call; PathScope, HttpScope and CSP are enforced by default.

Native integration

Tray, menu bar, dialogs, notifications, global shortcuts, drag & drop and multi-window — via the native host.

Three-layer testing

Surface, unit and integration suites plus a MockRuntime — 86 deterministic checks stay green.

See it all in the Showcase

A runnable desktop app with 34 interactive cards — every button calls the real API: native dialogs, clipboard, multi-window, theme switching, frameless tricks. Each card carries a copyable snippet and a direct link to its docs page.

  • 8 categories: core IPC & events, windows, fs, network, dialogs, menu & tray, data, system
  • Live demo, inline result, minimal snippet, docs link — one card per feature
  • ACL denials and errors are shown verbatim: error-reading is part of the lesson
  • CI-friendly smoke gate: ztron check --expect SHOWCASE_OK
Core x4Window x5FS x3Network x3Dialogs x4Menu & Tray x3Data x3System x9
Run it from the repo root
git clone https://github.com/ZturnLibs/ztron.git
cd ztron && pnpm install
pnpm --filter @zturnlibs/ztron-example-showcase dev

Two processes, one TypeScript stack

A tiny native host owns the GUI; everything else lives in an async txiki.js backend.

ztron-host

native C · system WebView · window / tray / menu / dialog

TCP · JSON

tjs backend

txiki.js · @zturnlibs/ztron-core · IPC · plugins · ACL · updater

Vite frontend → @zturnlibs/ztron-api (invoke · listen · Channel)
tjs compile → ztron build → signed .app / .dmg

25 plugins, ready to use

Each plugin ships as core commands + typed API + ACL permissions.

Data & files

storesqlfsupload

System

osshelllogautostartclipboard

Network

httpwebsocketnetworklocal-ipdeep-link

Desktop

traymenudialognotificationglobal-shortcutsingle-instancepositionerwindow-state

Lifecycle

updaterpersisted-scopeapp

25 = 25 ✓

Where it runs today

macOS is fully verified; Windows and Linux hosts are scaffolded and next.

macOS dev pipeline · .app + .dmg · ad-hoc signing · updater
Windows host skeleton (WebView2) — compile & packaging pending
Linux host skeleton (GTK + WebKitGTK) — compile & packaging pending

86 deterministic end-to-end checks pass on every run — `ztron check` gates CI.

ROADMAP.md ↗

Quick start

Install the CLI, scaffold, and a native window opens.

npm i -g @zturnlibs/ztron-cli
ztron init my-app && cd my-app
pnpm install
ztron dev                # native window opens

One workspace, five packages

Published to npm as @zturnlibs/ztron-*. Install the CLI globally and go.

@zturnlibs/ztron-api

Frontend API translated from @tauri-apps/api — invoke/events/Channel + plugin wrappers

@zturnlibs/ztron-core

Main-process core: IPC, events, commands, ACL, PathScope, 25 plugins, MockRuntime

@zturnlibs/ztron-runtime-ffi

HostRuntime socket adapter (Plan A) + FFI reference bindings

@zturnlibs/ztron-inject

window.__TAURI_INTERNALS__ bootstrap injected into page HTML

@zturnlibs/ztron-cli

ztron dev / build / codegen / init — Vite build + host + backend