@tarve/core v0.4.0 · Windows x64 & Linux x64

Native interfaces,
written in TSX.

Tarve turns a TSX tree into a retained native interface. No browser, no DOM, no React runtime — just Bun, a Rust runtime and pixels.

Read the docs
  • Bun 1.4+
  • Rust
  • Taffy
  • Parley
  • Vello
  • AccessKit
app.tsx
import { Button, Column, Text, Window, createApp } from "@tarve/core";

let count = 0;

function App() {
  return (
    <Window title="Counter" width={520} height={360}>
      <Column flex={1} align="center" justify="center" gap={16}>
        <Text size={42} weight={700}>{count}</Text>
        <Button onClick={() => count++}>Increase</Button>
      </Column>
    </Window>
  );
}

const app = createApp(App);
await app.ready;
await app.closed;
Counter
0
idle · 0 fps 0 frames

No updates yet. Nothing is drawn while nothing changes.

0 frames presented while the window is idle
95 native components in the box
3 render paths: D3D11, Vello and CPU
1 standalone executable per build
The idea

Your interface. Not an entire browser.

What stays out

  • A bundled Chromium
  • The DOM and a CSS engine
  • The React runtime
  • A render loop spinning while idle

What you get

  • TSX with its own JSX runtime
  • Native layout, text and painting in Rust
  • GPU or CPU rendering, your choice
  • A single executable to ship
Pipeline

From TSX to pixels, in six steps.

Every layer is specialised. Together they deliver a window that only works when something actually changes.

  1. 01

    TSX

    You write components against the dedicated @tarve/core JSX runtime. No React underneath.

  2. 02

    Retained tree

    The reconciler compiles your tree and sends only the mutations that changed to native.

  3. 03

    Bun ↔ Rust bridge

    Event-driven, with no continuous polling. Nothing happens until something changes.

  4. 04

    Taffy

    Retained Flexbox and Grid layout with incremental property and structural updates.

  5. 05

    Parley

    Text shaping, selection, IME composition and Unicode-aware editing.

  6. 06

    Pixels

    D3D11/DXGI, Vello/WGPU or vello_cpu + softbuffer — you choose the path.

Features

Everything a desktop app needs. Native.

Real text editing

Selection, clipboard with text, files and images, IME composition, native undo/redo and Unicode editing.

Rich content

Native Markdown, syntax-highlighted Code and Diff leaves designed for large documents.

VirtualList

Fixed-height, measured variable-height or externally windowed. Huge lists without effort.

Accessible

AccessKit built in: UI Automation on Windows and AT-SPI on Linux.

Truly desktop

Global hotkeys, native file dialogs, custom title bars and window positioning.

Zero idle frames

A window at rest presents no frames at all. Your users' batteries will thank you.

Dev mode

In-window error overlay, same-window remount under bun --hot and a native frame-time graph.

Semantic themes

shadcn-inspired light/dark tokens, switchable at runtime without recreating the window.

Renderers

GPU when it can. CPU when it must.

createApp accepts renderer: "auto" | "gpu" | "cpu". Windows uses native D3D11/DXGI with a Vello/WGPU fallback; Linux uses Vello/WGPU. Both ship a low-memory CPU path.

  1. D3D11 / DXGI in use
  2. Vello / WGPU standby
  3. vello_cpu + softbuffer standby

D3D11/DXGI with a Vello/WGPU fallback for initialization or recovery failures. If Vello cannot run on the adapter, it falls back to CPU.

Styling

Write it like CSS. Paint it natively.

Linear, radial and conic gradients, boxShadow, textShadow, transform and transitions animated natively on hover, focus and updates — identical on D3D11, Vello and the CPU renderer.

card.tsx
<Column style={{
  background: "linear-gradient(135deg, #2563eb, #9333ea 80%)",
  radius: 16,
  boxShadow: { y: 2, blur: 6, color: "#0f172a22" },
  hover: {
    transform: "translateY(-2px) scale(1.02)",
    boxShadow: { y: 14, blur: 28, color: "#2563eb44" },
  },
  transition: { all: { duration: 220, easing: "easeOut" } },
}} />
Components

95 components, inspired by shadcn.

Native primitives and high-level controls, all exported from @tarve/core with light and dark theme tokens. Every one has its own documentation page.

Get started

From install to window in four steps.

terminal
bun add @tarve/core
bun add -d typescript @types/bun
Distribution

One command. One executable.

The tarve build CLI compiles your app into a standalone executable with the native runtime embedded. The published package already carries the Windows x64 and Linux x64 runtimes — cross-compile without a Rust toolchain.

terminal
# Windows → .exe with the native runtime embedded
bun run tarve build app.tsx --outfile dist/App.exe

# cross-compile for Linux x64, no Rust toolchain needed
bun run tarve build app.tsx --target linux-x64 --outfile dist/App

Build your next native window.

Bun + TSX on the outside. Rust, Taffy, Parley and Vello on the inside.

Read the docs View on GitHub