docs/overview
zenit 개발 매뉴얼
Zig로 진정한 네이티브 macOS 데스크톱 UI를 만듭니다. zenit은 창, GPU 렌더링, 텍스트, 입력기, 접근성을 하나의 명확한 UI 모델로 묶습니다. 이 매뉴얼은 첫 창부터 유지보수 가능한 프로덕션 앱까지 안내합니다.
5분 만에 시작하기
$zig build run
0.15.2Zig 버전
Metal현재 GPU 백엔드
2 tiers공개 API: ui.X 및 ui.<group>.X
const std = @import("std");
const ui = @import("ui");
const App = @import("zenit_app").App;
fn mountUi(cx: *ui.Cx, _: *ui.Scope) anyerror!*ui.Node {
return ui.text(cx, "Hello, zenit!", .{
.font_size = cx.tokens.font_size.xxxl,
.color = cx.tokens.color.fg_primary,
});
}
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const app = try App.init(gpa.allocator(), .{
.window = .{ .title = "Hello" },
});
defer app.deinit();
try app.runWith(mountUi);
}학습 경로
순서대로 한 번 따라가면 약 45분, zenit 앱을 혼자 개발하는 데 필요한 전체 멘탈 모델을 갖추게 됩니다.
01첫 창 실행하기의존성을 연결하고 UI를 마운트한 뒤 빌드하고 실행합니다.10 min →02노드와 레이아웃box, stack, text로 화면을 구성합니다.12 min →03데이터 기반 UISignal, Memo, Effect의 협업.12 min →04스타일 체계 만들기Token, 이름 있는 스타일, Recipe.11 min →
사용하게 될 아키텍처
앱은 안정적인 공개 계층에만 의존하고, 플랫폼과 렌더링은 zenit이 맡습니다.
zenit.attach(dep, exe)는 실행 파일에 ui와 zenit_app 두 모듈 임포트만 추가한 뒤, 네이티브 브리지를 컴파일하고 시스템 프레임워크를 링크합니다. 내부 모듈은 빌드 그래프에 아예 없습니다. “쓰지 말자는 약속”이 아니라 “쓸 수 없는” 것입니다.API 모음 그 이상
이 세 가지는 런타임, 텍스트 스택, 도구 전반에 걸쳐 있으며, 각각 실행 가능한 데모와 실제 창 증거로 뒷받침됩니다.
DATA FLOWSignal 정밀 업데이트가상 트리 재구성도, 트리 전체 diff도 없습니다. 의존성은 구독한 노드로 바로 전달됩니다.애니메이션 보기 →TEXT ENGINEUnicode 17 + IMEUAX #9 양방향 텍스트, UAX #29 자소 경계, 그리고 preedit / commit 종단 간 입력 경로.적합성 데이터 보기 →TOOLING눈으로 확인하는 실제 창 E2E의미 기반 노드 탐색, 가상 커서, Retina PNG 캡처, drawable에서 바로 녹화한 MP4.녹화 보기 →
세 가지 개발 원칙
이 원칙을 따르면 zenit이 빠르게 발전하는 동안에도 코드를 명확하게 유지할 수 있습니다.
01
공개 계층에서만 임포트
ui.*, ui.<group>.*, zenit_app.App를 사용하고, 내부 디렉터리에는 절대 손대지 마십시오.
02
데이터가 UI를 결정하게 하기
지속 상태는 Signal 또는 바인딩 상태에 두고, 파생 값은 Memo로, 부수 효과는 Effect로 처리합니다.
03
Token 우선
색상, 글자 크기, 간격, 모서리 반경은 테마에서 가져옵니다. 스케일을 벗어나야 할 때는 ui.arb로 명시합니다.