# bahayavas/rice-studio architecture

> Architecture diagram of the GitHub repository bahayavas/rice-studio, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bahayavas/rice-studio
- Repository: https://github.com/bahayavas/rice-studio

## Overview

Rice Studio is a macOS window-manager and menu-bar switcher, exposed through a SwiftUI app and a `rice` CLI. Users inspect module status, choose one WM and one bar (or turn them off), and the engine stops competing modules, starts the selection, persists state, and manages the macOS menu bar. Module adapters represent the supported tools; shared process and shell layers implement their lifecycle operations. The README describes configuration editing, backups, and profiles, but several customization and profile capabilities are explicitly planned rather than present in this stage. Arrows reflect excerpts and explicit README statements; unsampled implementations are not assumed.

Main entry points: [`Sources/RiceStudio/Modules/Registry.swift`](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Registry.swift) (Module registry), [`Sources/RiceStudio/Core/Engine.swift`](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Core/Engine.swift) (Transition engine), [`Sources/RiceStudio/Core/Shell.swift`](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Core/Shell.swift) (Process and shell tools), [`Sources/RiceStudio/App/Model.swift`](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/App/Model.swift) (App model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App and CLI"]
  node_app["macOS app<br/>[main.swift]"]
  node_view["Switcher view<br/>[StageOneView.swift]"]
  node_model["App model<br/>[Model.swift]"]
  node_cli["rice CLI<br/>[CLI.swift]"]
end

subgraph group_control["Switching core"]
  node_engine["Transition engine<br/>[Engine.swift]"]
  node_registry["Module registry<br/>[Registry.swift]"]
  node_moduleapi["Module lifecycle and config<br/>[Module.swift]"]
end

subgraph group_modules["WM and bar modules"]
  node_wm["Window managers<br/>[Registry.swift]"]
  node_aerospace["AeroSpace adapter<br/>[AeroSpace.swift]"]
  node_amethyst["Amethyst adapter<br/>[Amethyst.swift]"]
  node_hyprmac["Hyprmac adapter<br/>[Hyprmac.swift]"]
  node_bars["Bar modules<br/>[Registry.swift]"]
  node_sketchybar["SketchyBar adapter<br/>[SketchyBar.swift]"]
  node_barik["Barik adapter<br/>[Barik.swift]"]
  node_ubersicht["Übersicht and simple-bar<br/>[Ubersicht.swift]"]
  node_zebar["Zebar adapter<br/>[Zebar.swift]"]
  node_borders["JankyBorders extra<br/>[Borders.swift]"]
end

subgraph group_runtime["Runtime services"]
  node_settings[("Settings and saved state<br/>[Settings.swift]")]
  node_shell["Process and shell tools<br/>[Shell.swift]"]
end

node_user(("User"))
node_macos["macOS processes and preferences"]

node_user -->|"opens"| node_app
node_user -->|"runs commands"| node_cli
node_app -->|"shows"| node_view
node_app -->|"provides state"| node_model
node_view -->|"reads and invokes"| node_model
node_model -->|"requests transitions"| node_engine
node_model -->|"reads modules"| node_registry
node_cli -->|"dispatches commands"| node_engine
node_cli -->|"queries modules"| node_registry
node_engine -->|"selects modules"| node_registry
node_engine -->|"reads and saves"| node_settings
node_engine -->|"manages menu bar"| node_macos
node_registry -->|"registers"| node_aerospace
node_registry -->|"registers"| node_amethyst
node_registry -->|"registers"| node_hyprmac
node_registry -->|"registers"| node_sketchybar
node_registry -->|"registers"| node_barik
node_registry -->|"registers"| node_ubersicht
node_registry -->|"registers"| node_zebar
node_registry -->|"registers"| node_borders
node_engine -->|"calls lifecycle"| node_moduleapi
node_moduleapi -->|"uses process tools"| node_shell
node_aerospace -->|"reloads via"| node_shell
node_sketchybar -->|"uses commands"| node_shell
node_ubersicht -->|"runs widget scripts"| node_shell
node_borders -->|"controls processes"| node_shell
node_moduleapi -->|"manages applications"| node_macos
node_wm -->|"includes adapter"| node_aerospace
node_wm -->|"includes adapter"| node_amethyst
node_wm -->|"includes adapter"| node_hyprmac
node_bars -->|"includes adapter"| node_sketchybar
node_bars -->|"includes adapter"| node_barik
node_bars -->|"includes adapter"| node_ubersicht
node_bars -->|"includes adapter"| node_zebar

click node_app "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/App/main.swift"
click node_view "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/App/StageOneView.swift"
click node_model "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/App/Model.swift"
click node_cli "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/CLI/CLI.swift"
click node_engine "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Core/Engine.swift"
click node_registry "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Registry.swift"
click node_moduleapi "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Core/Module.swift"
click node_settings "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Core/Settings.swift"
click node_shell "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Core/Shell.swift"
click node_wm "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Registry.swift"
click node_aerospace "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/AeroSpace.swift"
click node_amethyst "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Amethyst.swift"
click node_hyprmac "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Hyprmac.swift"
click node_bars "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Registry.swift"
click node_sketchybar "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/SketchyBar.swift"
click node_barik "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Barik.swift"
click node_ubersicht "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Ubersicht.swift"
click node_zebar "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Zebar.swift"
click node_borders "https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Borders.swift"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_view,node_model,node_cli,node_user toneBlue
class node_engine,node_registry,node_moduleapi toneAmber
class node_wm,node_aerospace,node_amethyst,node_hyprmac,node_bars,node_sketchybar,node_barik,node_ubersicht,node_zebar,node_borders toneMint
class node_settings,node_shell toneRose
class node_macos toneIndigo
```

## Components

### App and CLI

- [macOS app](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/App/main.swift): `Sources/RiceStudio/App/main.swift`
- [Switcher view](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/App/StageOneView.swift): `Sources/RiceStudio/App/StageOneView.swift`
- [App model](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/App/Model.swift): `Sources/RiceStudio/App/Model.swift`
- [rice CLI](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/CLI/CLI.swift): `Sources/RiceStudio/CLI/CLI.swift`

### Switching core

- [Transition engine](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Core/Engine.swift): `Sources/RiceStudio/Core/Engine.swift`
- [Module registry](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Registry.swift): `Sources/RiceStudio/Modules/Registry.swift`
- [Module lifecycle and config](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Core/Module.swift): `Sources/RiceStudio/Core/Module.swift`

### WM and bar modules

- [Window managers](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Registry.swift): `Sources/RiceStudio/Modules/Registry.swift`
- [AeroSpace adapter](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/AeroSpace.swift): `Sources/RiceStudio/Modules/AeroSpace.swift`
- [Amethyst adapter](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Amethyst.swift): `Sources/RiceStudio/Modules/Amethyst.swift`
- [Hyprmac adapter](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Hyprmac.swift): `Sources/RiceStudio/Modules/Hyprmac.swift`
- [Bar modules](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Registry.swift): `Sources/RiceStudio/Modules/Registry.swift`
- [SketchyBar adapter](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/SketchyBar.swift): `Sources/RiceStudio/Modules/SketchyBar.swift`
- [Barik adapter](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Barik.swift): `Sources/RiceStudio/Modules/Barik.swift`
- [Übersicht and simple-bar](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Ubersicht.swift): `Sources/RiceStudio/Modules/Ubersicht.swift`
- [Zebar adapter](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Zebar.swift): `Sources/RiceStudio/Modules/Zebar.swift`
- [JankyBorders extra](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Modules/Borders.swift): `Sources/RiceStudio/Modules/Borders.swift`

### Runtime services

- [Settings and saved state](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Core/Settings.swift): `Sources/RiceStudio/Core/Settings.swift`
- [Process and shell tools](https://github.com/bahayavas/rice-studio/blob/main/Sources/RiceStudio/Core/Shell.swift): `Sources/RiceStudio/Core/Shell.swift`

### Other components

- **User**
- **macOS processes and preferences**

## Connections

- User → macOS app: opens (evidence: `Sources/RiceStudio/App/main.swift`)
- User → rice CLI: runs commands (evidence: `Sources/RiceStudio/CLI/CLI.swift`)
- macOS app → Switcher view: shows (evidence: `Sources/RiceStudio/App/main.swift`)
- macOS app → App model: provides state (evidence: `Sources/RiceStudio/App/main.swift`)
- Switcher view → App model: reads and invokes (evidence: `Sources/RiceStudio/App/StageOneView.swift`)
- App model → Transition engine: requests transitions (evidence: `Sources/RiceStudio/App/Model.swift`)
- App model → Module registry: reads modules (evidence: `Sources/RiceStudio/App/Model.swift`)
- rice CLI → Transition engine: dispatches commands (evidence: `Sources/RiceStudio/CLI/CLI.swift`)
- rice CLI → Module registry: queries modules (evidence: `Sources/RiceStudio/CLI/CLI.swift`)
- Transition engine → Module registry: selects modules (evidence: `Sources/RiceStudio/Core/Engine.swift`)
- Transition engine → Settings and saved state: reads and saves (evidence: `Sources/RiceStudio/Core/Engine.swift`)
- Transition engine → macOS processes and preferences: manages menu bar (evidence: `Sources/RiceStudio/Core/Engine.swift`)
- Module registry → AeroSpace adapter: registers (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Module registry → Amethyst adapter: registers (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Module registry → Hyprmac adapter: registers (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Module registry → SketchyBar adapter: registers (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Module registry → Barik adapter: registers (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Module registry → Übersicht and simple-bar: registers (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Module registry → Zebar adapter: registers (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Module registry → JankyBorders extra: registers (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Transition engine → Module lifecycle and config: calls lifecycle (evidence: `Sources/RiceStudio/Core/Engine.swift`)
- Module lifecycle and config → Process and shell tools: uses process tools (evidence: `Sources/RiceStudio/Core/Module.swift`)
- AeroSpace adapter → Process and shell tools: reloads via (evidence: `Sources/RiceStudio/Modules/AeroSpace.swift`)
- SketchyBar adapter → Process and shell tools: uses commands (evidence: `Sources/RiceStudio/Modules/SketchyBar.swift`)
- Übersicht and simple-bar → Process and shell tools: runs widget scripts (evidence: `Sources/RiceStudio/Modules/Ubersicht.swift`)
- JankyBorders extra → Process and shell tools: controls processes (evidence: `Sources/RiceStudio/Modules/Borders.swift`)
- Module lifecycle and config → macOS processes and preferences: manages applications (evidence: `Sources/RiceStudio/Core/Module.swift`)
- Window managers → AeroSpace adapter: includes adapter (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Window managers → Amethyst adapter: includes adapter (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Window managers → Hyprmac adapter: includes adapter (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Bar modules → SketchyBar adapter: includes adapter (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Bar modules → Barik adapter: includes adapter (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Bar modules → Übersicht and simple-bar: includes adapter (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
- Bar modules → Zebar adapter: includes adapter (evidence: `Sources/RiceStudio/Modules/Registry.swift`)
