Skip to main content
Otter Shell is a Wayland desktop in Zig. Apps share the same libraries for rendering, Wayland, config, and desktop services.

Repository structure

The otter-shell organization has one git repo per component. The monorepo folder on disk is a checkout layout, not one repo. Commit and push per component. otter-zenith clones tagged shell releases and builds .deb packages for PikaOS. otter-gaming-utils does the same for Otter Bench against a pinned LIB_VERSION of the shell libraries.

Architecture

UI apps share one rendering path:
  1. Describe layout with otter-ui Surface Description nodes
  2. Emit draw commands into a CommandList (otter-render)
  3. Rasterize with quad_renderer to Wayland SHM buffers (otter-wayland)

Requirements

  • Zig 0.16.0: required by all Otter packages
  • System dev libraries: libwayland-dev, libfontconfig-dev, libfreetype-dev, libxkbcommon-dev
  • Optional: libpam0g-dev (lock/greeter), FFmpeg dev (recorder)
  • A wlroots-based compositor with zwlr_layer_shell_v1 for most UI apps

Config convention

Apps read ~/.config/otter-shell/<app>.conf. Shared styling is in ~/.config/otter-shell/theme.conf. See Configuration overview.

Workspace-only components

In the source tree but not packaged in otter-shell or otter-shell-extras:
  • otter-hypr: Hyprland layout and titlebar companion
  • otter-cue: desktop interaction sound library (pinned in zenith for builds; no debian/control package yet)
Otter Assistant packages (otter-assist, otter-assistant, otter-assist-data, otter-assist-model) and speech model packages ship in otter-shell-extras. otter-dock and otter-taskbar ship in the base otter-shell metapackage. Otter Bench and Otter HUD ship in otter-gaming-utils (separate from otter-shell).

Next