Zig Native Transpiler & Compiler
Fast, lightweight TypeScript toolchain
A transpiler + bundler written in Zig. JavaScript · TypeScript · JSX · Flow at native speed, with a Vite/Rollup-compatible plugin system.
import { transpile } from '@zntc/core';
const { code } = transpile(source, {
filename: 'input.tsx',
jsx: 'automatic',
target: 'es2022',
}); Transpile
1K LOC · TypeScript
Bundle
10 modules
faster
vs rolldown (small)
Doc pages
ko · en
As of 2026-05-30 · darwin arm64 · 50-run median
Bundle performance
vs Bun 5.0 · esbuild 6.5 · rolldown 48 · rspack 56 ms
vs Bun 16.1 · esbuild 19.7 · rolldown 65 · rspack 82 ms
vs Bun 55.2 · esbuild 73 · rolldown 119 · rspack 173 ms
2026-05-30 · darwin arm64 · 50-run median · fan-out tree fixture (see full benchmarks →)
Bundle size — Tree-shake + Minify
Speed is not everything — output size matters too. Real npm libraries bundled + minified with the same input (raw bytes, lower is better).
6.2× smaller than esbuild 217 KB · rspack 136 KB (tree-shaking)
1.25–1.69× smaller than esbuild 191 KB · rspack 142 KB
Essentially on par with esbuild / rolldown / rspack
2026-05-30 · darwin arm64 · 9 real npm libraries · —minify-all (see full benchmarks →)
Why ZNTC
A JS/TS toolchain that combines the strengths of existing tools.
Type stripping
Strip TypeScript annotations, interfaces, enums, and decorators at native speed. Flow has an independent pipeline.
Production bundler
Tree-shaking · code splitting · preserve-modules · sourcemaps. ESM · CommonJS · IIFE output. On-par with rolldown/esbuild.
React Native ready
Metro-compatible bundling · InitializeCore · Hermes bytecode · Flow stripping. Babel migration guide included.
Pluggable
Rollup/Vite-compatible plugin API. Extensible in JS/TS, with Vite · Rollup · AST plugin adapters.
Usage
From a single CLI invocation to Vite integration — pick the style that fits your project.
# installnpm install -g @zntc/core
# bundlezntc build src/index.ts --bundle --outdir dist
# watch modezntc build src/index.ts --bundle --watchimport { build } from "@zntc/core";
const result = await build({ entryPoints: ["src/index.ts"], bundle: true, outdir: "dist", target: "es2020", platform: "browser",});
console.log(`${result.outputFiles.length} files emitted`);import { defineConfig } from "vite";import zntc from "@zntc/vite-plugin";
export default defineConfig({ plugins: [ zntc({ jsx: "automatic", target: "es2022", }), ],});export default { module: { rules: [ { test: /\.(?:tsx?|jsx?)$/, exclude: /node_modules/, loader: "@zntc/rspack-loader", options: { transpileOptions: { target: "es2020", jsx: "automatic" }, }, }, ], },};Start building today
First bundle in 5 minutes. Or try it right in the browser via Playground.