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 component releases and builds .deb packages for PikaOS.

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), libghostty-vt-dev-git (terminal), 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-dock: application dock with magnification
  • otter-hypr: Hyprland layout and titlebar companion
Otter Assistant packages (otter-assist, otter-assistant, otter-assist-data) ship in otter-shell-extras.

Next steps