VL

vercel-labs/native

Developer tools
7.8K stars Quality 73 Trend 86Apache-2.0

Toolkit for building native desktop apps

Overview

Native SDK exists because expressive UI and native performance should not be competing goals. Developers often choose web-based runtimes because they offer freedom, speed and control over the product experience. But that freedom often comes with a heavy runtime. Native SDK keeps the expressive authoring model and replaces the runtime with native rendering. Views are declarative markup in .native files, logic is plain TypeScript compiled to native code at build time — or Zig, first-class by choice — and Native SDK's own engine draws every pixel into real OS windows. No browser, no WebView, no JS runtime in the binary: Zig is how everything works, TypeScript and Native markup are how apps are authored. Soundboard, Notes, and Calculator from examples/ — every pixel drawn by the Native SDK engine, captured through its deterministic reference renderer. The images follow your color scheme. A native window opens with a working counter.

README

Native SDK

Native SDK is a toolkit for building native desktop applications with TypeScript and Native markup. The toolkit compiles app logic and views into a native executable and renders the interface in OS windows. Zig cores and optional embedded web content are also supported.

Native SDK is experimental. Platform capabilities vary, and mobile support is still evolving. See the platform support matrix for current support.

Quick start

Install the CLI with Node.js 24 or later:

npm install -g @native-sdk/cli

Create and run an app:

native init my_app
cd my_app
native dev

The generated project opens a counter app and includes:

  • src/core.ts: the app’s model, messages, and update function.
  • src/app.native: the view, with layout, bindings, and message dispatch.
  • app.json: app identity, windows, permissions, and security settings.

native dev watches markup changes and updates the view while preserving app state. TypeScript core changes rebuild and restart the app. Use native dev --core to exercise core logic under Node.js without opening a window, native check to validate the project, and native build to create a release binary.

The CLI uses a compatible Zig toolchain from your PATH or offers to download the pinned version. See Quick Start for platform prerequisites and the complete workflow.

App model

Events dispatch typed messages to update, which returns the next model and any effects. The view derives its content from the model. Filesystem access, network requests, and other external work run through effects and TypeScript services.

App cores use a checked TypeScript subset and compile to native code. To write a Zig core instead, create the project with native init my_app --template zig-core. See App Model and TypeScript Cores.

Examples

The Soundboard example rendered by the Native SDK engine. More apps are in examples/:

  • Chatbot: streaming responses, text editing, and TypeScript effects.
  • Soundboard: audio playback, search, assets, and context menus.
  • System monitor: subprocess effects, tables, charts, and timers.
  • Calculator: markup, keyboard input, and theming.

See the example catalog for additional apps and their authoring languages.

Documentation

Contributing

See CONTRIBUTING.md for repository setup and local checks. For larger changes, open an issue to discuss the design first.

License

Apache-2.0

View this README on GitHub

Recommended Tools

Try a different keyword or remove a filter.

Install

npx skillfish add vercel-labs/native