Skip to content

ohah/zntc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3,720 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZNTC

Zig Native Transpiler & Compiler — JavaScript / TypeScript / Flow 를 네이티브 속도로 처리하는 트랜스파일러 + 번들러.

License Docs Test262 Status

ZNTC 는 SWC / oxc / esbuild 수준의 프로덕션 품질을 목표로 만들어진 단일 패스 툴체인입니다. 트랜스파일과 번들링이 같은 파이프라인을 공유하고, Babel 없이도 styled-components / emotion / Reanimated worklets / Flow 같은 1st-party transform 을 본체에 내장합니다.

  • 📦 Single dependency@zntc/core 하나로 transpile + bundle + dev server (zntc CLI 포함)
  • Native speed — SIMD 렉서, Arena + mimalloc, 인덱스 기반 24B 고정 AST, Producer-Consumer 파이프라인
  • 🔌 Plugin compat — Rollup / Vite 호환 훅 (resolveId / load / transform) + esbuild 호환 CLI / 옵션
  • 📱 React Native 1st-class — Metro 호환 번들링, Flow, Reanimated worklets, Hermes 타겟, dev server
  • 🌐 Runs anywhere — Node 24+, Bun 1.3+, 브라우저 WASM (transpile-only + bundler 포함)

Installation

# Node / Bun
bun add -D @zntc/core
# npm i -D @zntc/core
# pnpm add -D @zntc/core
시나리오 추가로 필요한 패키지
transpile / bundle (라이브러리 모드) @zntc/core 단독
dev / preview / build (postcss · sass · CSS Modules · HMR overlay) + @zntc/web
Vite 사용자 — esbuild transform 만 ZNTC 로 교체 @zntc/vite-plugin
React Native (init / preset / dev server) + @zntc/react-native
브라우저 playground / Workers @zntc/wasm

Status: pre-release. NAPI 바이너리는 macOS / Linux / Windows × x64 / arm64 사전 빌드. 자세한 빌드 매트릭스는 docs/PUBLISH.md.

Quick start

CLI

# 단일 파일 트랜스파일 (.ts → .js, sourcemap 동반)
npx zntc src/index.ts --outdir dist

# 번들 (esbuild 호환 옵션)
npx zntc src/index.ts --bundle --outdir dist --format=esm --target=es2022

# Dev server + HMR + Fast Refresh
npx zntc serve src/main.tsx --port 5173

# React Native (Metro 호환)
npx zntc --bundle index.js --platform=react-native --rn-platform=ios -o bundle.js

zntc --help 로 전체 옵션 확인.

@zntc/core JS / NAPI API

import { init, transpile, build } from "@zntc/core";

init(); // NAPI 바인딩 한 번만

// 단일 파일 트랜스파일
const { code, map } = transpile(source, {
  filename: "input.ts",
  jsx: "automatic",
  target: "es2022",
  sourcemap: true,
});

// 번들링 (esbuild / Vite / Rollup 호환 플러그인 훅)
const result = await build({
  entryPoints: ["src/index.ts"],
  bundle: true,
  format: "esm",
  platform: "browser",
  target: ["chrome100", "safari16"],
  define: { "process.env.NODE_ENV": '"production"' },
  plugins: [
    {
      name: "my-plugin",
      setup(build) {
        build.onResolve({ filter: /^virtual:/ }, (args) => ({ path: args.path, namespace: "virtual" }));
        build.onLoad({ filter: /.*/, namespace: "virtual" }, () => ({ contents: "export const x = 1" }));
      },
    },
  ],
});

Vite 통합

// vite.config.ts
import { defineConfig } from "vite";
import zntc from "@zntc/vite-plugin";

export default defineConfig({
  plugins: [zntc()],
});

Vite 의 esbuild transform 단계가 ZNTC 로 교체되어 TS / JSX / Flow / 1st-party transform 까지 단일 패스로 처리됩니다.

React Native CLI 프로젝트 부착

npx @zntc/init

기존 RN CLI 앱의 start / bundle:* 스크립트를 ZNTC 로 교체합니다 (Metro fallback 은 보존). 자세한 절차는 React Native 가이드.

Features

Babel 없이 1st-party transform

다른 번들러에서 별도 Babel 플러그인이 필요한 변환을 ZNTC 는 본체에 내장합니다.

// zntc.config.ts
import { defineConfig } from "@zntc/core";

export default defineConfig({
  platform: "react-native",      // flow / worklets / RN preset 자동
  jsxImportSource: "@emotion/react",
  compiler: {
    styledComponents: true,      // babel-plugin-styled-components 대응
    emotion: { autoLabel: "dev-only" },  // @emotion/babel-plugin 대응
  },
});
Babel 플러그인 ZNTC 옵션
babel-plugin-styled-components compiler.styledComponents
@emotion/babel-plugin compiler.emotion
react-native-worklets/plugin workletTransform (RN 자동)
@babel/preset-flow flow: true (RN 자동)
@babel/preset-env target: "es2020" / target: "hermes0.70"

자세한 사용법: 네이티브 트랜스폼 가이드.

Plugin / 옵션 호환

  • Rollup / Vite 스타일 훅: resolveId, load, transform (filter 함수 / RegExp / string 모두 지원)
  • esbuild 호환 옵션 surface: entryPoints, bundle, format, target, define, loader, external, metafile
  • Vite alias 호환: object Record<string, string> + array { find, replacement } 형태 모두
  • zntc.config.{ts,js,json} + tsconfig + .env + CLI flag 우선순위 머지 (docs/CONFIG.md)

성능

항목 결과
Test262 TC39 정합성 50,504 / 50,504 통과 (100%, 0 fail)
144 npm 패키지 스모크 (build + execute) esbuild 대비 평균 0.82x bundle size
합성 벤치 (parse + emit) ZNTC 7ms · Bun 10ms · esbuild 13ms · rolldown 62ms
RN core (react-native 0.74) 410 개 @flow 파일 회귀 통과
HMR warm rebuild < 100ms (PR #1747)

자세한 데이터: docs/ROADMAP.md · docs/TESTING.md · 벤치마크 사이트.

Documentation

📚 공식 문서 사이트: https://ohah.github.io/zntc

주요 가이드:

기여자용 내부 문서 (저장소 내):

Packages

패키지 역할
@zntc/core NAPI .node 바인딩 + Node / Bun CLI (zntc) + transpile / bundle / lightningcss
@zntc/web dev server + HMR overlay + postcss / sass pipeline + dev controller
@zntc/vite-plugin Vite 의 esbuild transform 을 ZNTC 로 교체 (@zntc/core 만 사용)
@zntc/rspack-loader Rspack / Webpack 의 TS/JSX/Flow loader (swc-loader / esbuild-loader 대체)
@zntc/react-native RN preset + Metro 호환 dev server + Reanimated worklets / Flow / Hermes
@zntc/init npx @zntc/init — 신규 프로젝트 scaffold + 기존 RN CLI 앱 overlay
@zntc/wasm WASM 빌드 (브라우저 playground / Deno / Workers)
@zntc/server private — protocol / WS frame / watcher / HMR channel (web 의 dist 에 inline, 사용자 install 불필요)

Status

Phase 1–6 전반 완료 — 렉서 / 파서 / 세만틱 / 트랜스포머 / 코드젠 / 번들러 / Dev 서버 / HMR.

  • Test262: 50,504 / 50,504 (100%), 0 fail
  • npm 패키지 스모크: 144 / 144 통과 (esbuild / rolldown / rspack 비교)
  • RN core (react-native 0.74) 410 개 @flow 파일 회귀 통과

미해결 이슈와 백로그는 docs/ROADMAP.md · docs/BACKLOG.md · GitHub Issues.

Contributing

ZNTC 의 핵심은 Zig 로 작성되어 있습니다. 소스에서 빌드하려면 Zig 0.15.2 가 필요합니다 (mise 권장).

git clone https://github.com/ohah/zntc.git
cd zntc
mise install

# 빌드
zig build                          # zntc CLI + lib (Debug)
zig build -Doptimize=ReleaseFast   # 성능 측정용
zig build run -- src/index.ts      # CLI 직접 실행

# 테스트
zig build test                     # Zig 유닛 / 통합 테스트
zig build test262-run              # Test262 50,504건 실행
zig build napi                     # @zntc/core 용 NAPI .node
zig build wasm                     # transpile-only WASM
zig build wasm-bundler             # bundler 포함 WASM (wasm32-wasi + threads)
zig build schema                   # BuildOptions JSON 스키마 자동 생성

JS 사이드 테스트:

cd tests/integration && bun test       # CLI / NAPI 통합 테스트
cd tests/e2e && bun test               # Playwright E2E
cd tests/benchmark && bun run smoke.ts # 144 패키지 빌드+실행 vs esbuild/rolldown/rspack

기여 워크플로 — CLAUDE.md: feature branch → PR → merge. main 직접 push 금지. PR 제목은 feat(lexer): add numeric literal tokenization 형식, 본문 한국어.

References

  • Bun JS Parser (Zig, MIT) — 파서 / 렉서 / SIMD
  • oxc (Rust, MIT) — 트랜스포머 / Reference flags
  • SWC (Rust, Apache-2.0) — 다운레벨 비교
  • esbuild (Go, MIT) — 번들러 아키텍처 / 호환
  • Rolldown (Rust, MIT) — Rollup 호환 / Vite 통합
  • Hermes (C++, MIT) — Flow 파서 임베딩 + RN 런타임
  • Metro (JS, MIT) — React Native 번들러 호환
  • TypeScript (TS, Apache-2.0) — 다운레벨 / decorator 케이스
  • Test262 — TC39 정합성 50,504건

License

MIT

About

A high-performance JavaScript/TypeScript transpiler written in Zig

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors