Prerequisites
Install Zig 0.16.0 and system dependencies:| Component | Extra packages |
|---|---|
| otter-term | libghostty-vt-dev-git |
| otter-rec | libavcodec-dev, libavformat-dev, libavutil-dev, libswscale-dev, libdrm-dev, libegl-dev, libgles-dev |
| otter-lock, otter-greeter, otter-polkit | libpam0g-dev |
Basic build
build.zig.zon files (../otter-render, etc.) when you build from the monorepo checkout.
Build options
Common flags across apps:| Flag | Effect |
|---|---|
-Doptimize=ReleaseFast | Release build |
-Dcpu=x86_64_v3 | PikaOS packaging default (AVX2) |
-Denable_dbus=false | Remove D-Bus widgets (battery, MPRIS, tray) |
-Denable_pipewire=false | Remove PipeWire audio |
-Denable_pam=false | Remove PAM auth (lock/greeter) |
-Dc_allocator=jemalloc | Use jemalloc as C allocator |
-Dc_allocator=mimalloc | Use mimalloc as C allocator |
Packaging (otter-zenith)
PikaOS packages come from otter-zenith:dpkg-buildpackage. End users install with pikman install otter-shell. They do not need Zig.
Benchmarks
Per-component git workflow
Each component is its own repo. From inside a component directory:App structure convention
Most apps use this layout:| File | Purpose |
|---|---|
src/main.zig | Entry point, Wayland event loop |
src/config.zig | Config schema and parsing |
src/draw.zig | Surface Description frame and rendering |
GeneralPurposeAllocator. One-shot overlays (launcher, logout) use ArenaAllocator.
