Skip to main content
Otter Shell apps share eleven Zig libraries. They link into binaries at build time. End users do not install them as separate packages.

Library stack

LibraryPurposeDepends on
otter-utilsBounded arrays, logging, file paths, inotifynone
otter-geoGeometry types (Point, Rect, Padding, Transform)none
otter-confComptime config parser and hot-reload watcherotter-utils
otter-renderCPU renderer, fonts, images, CommandListotter-geo, otter-utils
otter-waylandWayland client, layer shell, input, clipboardotter-geo, otter-render, otter-utils
otter-vteTerminal cell rendering primitivesotter-geo, otter-render
otter-themeShared theme tokens and 12 presetsotter-geo, otter-render, otter-conf, otter-utils
otter-config-typesTyped config structs for all appsotter-render, otter-geo, otter-conf
otter-tools-corePure-Zig helpers for small CLI toolsotter-conf, otter-utils
otter-desktopXDG icons, D-Bus, PipeWire, PAM, sysinfootter-utils
otter-uiSurface Description frame API and widgetsotter-geo, otter-render, otter-vte, otter-theme, otter-wayland, otter-utils, otter-desktop, otter-tools-core
Typical app chain: otter-ui, then otter-wayland, otter-render, otter-theme, otter-conf, otter-desktop.

Compile-time flags

FlagLibraries affectedEffect
-Denable_dbus=falseotter-desktop, otter-bar, otter-lockRemove D-Bus services
-Denable_pipewire=falseotter-desktop, otter-bar, otter-osdRemove PipeWire audio
-Denable_pam=falseotter-desktop, otter-lock, otter-greeterRemove PAM auth
-Denable_text=falseotter-renderNo font/shaping
-Dc_allocator=jemalloc|mimallocAll with C depsOverride C allocator

Source locations

Each library has its own repo under git.pika-os.com/otter-shell. Monorepo checkout layout:
otter-shell/
├── otter-conf/
├── otter-geo/
├── otter-utils/
├── otter-render/
├── otter-wayland/
├── otter-vte/
├── otter-theme/
├── otter-config-types/
├── otter-tools-core/
├── otter-desktop/
├── otter-ui/
└── otter-bar/ … (applications)
Read each component’s README.md for API examples and build instructions.