Das zenit-Handbuch
Bauen Sie in Zig wirklich native macOS-Desktop-UIs. zenit vereint Fenster, GPU-Rendering, Text, Eingabemethoden und Barrierefreiheit in einem klaren UI-Modell; dieses Handbuch führt Sie vom ersten Fenster bis zur wartbaren Produktions-App.
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);
}Lernpfad
Arbeiten Sie ihn einmal der Reihe nach durch – etwa 45 Minuten – und Sie haben das komplette mentale Modell, um zenit-Apps selbstständig zu bauen.
Die Architektur, die Sie nutzen
Apps hängen nur von der stabilen öffentlichen Schicht ab; Plattform und Rendering übernimmt zenit.
zenit.attach(dep, exe) fügt Ihrem Executable genau zwei Modul-Importe hinzu – ui und zenit_app –, kompiliert dann die nativen Bridges und linkt die System-Frameworks. Interne Module sind gar nicht in Ihrem Build-Graphen: nicht „bitte nicht“, sondern „geht nicht“.Mehr als eine Sammlung von APIs
Diese drei ziehen sich durch Runtime, Text-Stack und Tooling – jeweils belegt durch eine lauffähige Demo und Nachweise im echten Fenster.
Drei Prinzipien
Halten Sie sich daran, bleibt Ihr Code klar, während sich zenit noch schnell weiterentwickelt.
Verwenden Sie ui.*, ui.<group>.* und zenit_app.App – greifen Sie nie in interne Verzeichnisse.
Persistenter Zustand liegt in Signals oder gebundenem Zustand; Abgeleitetes mit Memo, Seiteneffekte mit Effect.
Farben, Schrift, Abstände und Radien kommen aus dem Theme; wenn Sie die Skala verlassen müssen, machen Sie das mit ui.arb explizit.