# flashyreese/reeses-sodium-options architecture

> Architecture diagram of the GitHub repository flashyreese/reeses-sodium-options, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/flashyreese/reeses-sodium-options
- Repository: https://github.com/flashyreese/reeses-sodium-options

## Overview

Reese’s Sodium Options is a client-side replacement/options interface for Sodium. The main user workflow is opening the video-options screen, browsing tabbed option pages or searching, selecting and changing an option, then saving configuration. The tree also shows option-row actions, UI state, themes, Sodium mixins, and optional controller support. The README identifies the product but gives few runtime details; relationships below rely on the sampled source where available, so unsampled subsystem wiring is kept conservative.

Main entry points: [`common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/SodiumVideoOptionsScreen.java`](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/SodiumVideoOptionsScreen.java) (Video options screen), [`common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/search/OptionSearch.java`](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/search/OptionSearch.java) (Option search), [`common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/search/SearchTextFieldWidget.java`](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/search/SearchTextFieldWidget.java) (Search field), [`common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/tab/TabFrame.java`](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/tab/TabFrame.java) (Tab frame)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_screen["Options screen"]
  node_screen_main["Video options screen"]
  node_tab_frame["Tab frame<br/>[TabFrame.java]"]
  node_option_rows["Option rows"]
  node_actions["Option actions"]
  node_ui_state["Screen UI state"]
end

subgraph group_search["Option search"]
  node_search_field["Search field"]
  node_option_search["Option search<br/>[OptionSearch.java]"]
  node_search_index["Search index<br/>[SearchIndex.java]"]
  node_search_session["Search session<br/>[SearchSession.java]"]
  node_search_results["Search results"]
end

subgraph group_integration["Sodium integration"]
  node_mixin_gui["Sodium GUI mixin"]
  node_mixin_option["Sodium option mixin<br/>[MixinOption.java]"]
  node_config["Mod configuration"]
  node_controlify["Controlify support"]
end

subgraph group_ui["UI infrastructure"]
  node_themes["GUI themes<br/>[GuiThemes.java]"]
end

node_player(("Player"))
node_minecraft["Minecraft client"]
node_sodium["Sodium options"]
node_config_file[("Configuration storage")]

node_player -->|"opens"| node_screen_main
node_screen_main -->|"displays tabs"| node_tab_frame
node_screen_main -->|"updates state"| node_ui_state
node_tab_frame -->|"shows options"| node_option_rows
node_search_field -->|"queries"| node_option_search
node_option_search -->|"builds index"| node_search_index
node_option_search -->|"starts session"| node_search_session
node_search_session -->|"returns matches"| node_search_results
node_search_field -->|"updates results"| node_ui_state
node_screen_main -->|"writes settings"| node_config_file
node_screen_main -->|"uses options"| node_sodium
node_mixin_gui -.->|"hooks GUI"| node_screen_main
node_mixin_option -.->|"extends options"| node_sodium
node_screen_main -->|"renders with"| node_themes
node_controlify -.->|"adapts input"| node_search_field
node_option_rows -->|"hosts actions"| node_actions
node_option_search -->|"reads limits"| node_config
node_screen_main -->|"uses client"| node_minecraft

click node_screen_main "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/SodiumVideoOptionsScreen.java"
click node_tab_frame "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/tab/TabFrame.java"
click node_option_rows "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/option/OptionRowFactory.java"
click node_actions "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/option/action/OptionActionButtonController.java"
click node_ui_state "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/state/OptionsScreenUiState.java"
click node_search_field "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/search/SearchTextFieldWidget.java"
click node_option_search "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/search/OptionSearch.java"
click node_search_index "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/search/SearchIndex.java"
click node_search_session "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/search/SearchSession.java"
click node_search_results "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/state/SearchResultEntry.java"
click node_mixin_gui "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/mixin/sodium/MixinSodiumOptionsGUI.java"
click node_mixin_option "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/mixin/sodium/MixinOption.java"
click node_config "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/config/ReeseSodiumOptionsConfig.java"
click node_controlify "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/controlify/ReeseSodiumOptionsControlifyEntrypoint.java"
click node_themes "https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/theme/GuiThemes.java"

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_screen_main,node_tab_frame,node_option_rows,node_actions,node_ui_state,node_minecraft toneBlue
class node_search_field,node_option_search,node_search_index,node_search_session,node_search_results,node_config_file toneAmber
class node_mixin_gui,node_mixin_option,node_config,node_controlify toneMint
class node_themes toneRose
class node_player,node_sodium toneIndigo
```

## Components

### Options screen

- [Video options screen](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/SodiumVideoOptionsScreen.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/SodiumVideoOptionsScreen.java`
- [Tab frame](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/tab/TabFrame.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/tab/TabFrame.java`
- [Option rows](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/option/OptionRowFactory.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/option/OptionRowFactory.java`
- [Option actions](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/option/action/OptionActionButtonController.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/frame/option/action/OptionActionButtonController.java`
- [Screen UI state](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/state/OptionsScreenUiState.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/state/OptionsScreenUiState.java`

### Option search

- [Search field](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/search/SearchTextFieldWidget.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/search/SearchTextFieldWidget.java`
- [Option search](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/search/OptionSearch.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/search/OptionSearch.java`
- [Search index](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/search/SearchIndex.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/search/SearchIndex.java`
- [Search session](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/search/SearchSession.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/search/SearchSession.java`
- [Search results](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/state/SearchResultEntry.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/state/SearchResultEntry.java`

### Sodium integration

- [Sodium GUI mixin](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/mixin/sodium/MixinSodiumOptionsGUI.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/mixin/sodium/MixinSodiumOptionsGUI.java`
- [Sodium option mixin](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/mixin/sodium/MixinOption.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/mixin/sodium/MixinOption.java`
- [Mod configuration](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/config/ReeseSodiumOptionsConfig.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/config/ReeseSodiumOptionsConfig.java`
- [Controlify support](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/controlify/ReeseSodiumOptionsControlifyEntrypoint.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/controlify/ReeseSodiumOptionsControlifyEntrypoint.java`

### UI infrastructure

- [GUI themes](https://github.com/flashyreese/reeses-sodium-options/blob/26.3/dev/common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/theme/GuiThemes.java): `common/src/main/java/me/flashyreese/mods/reeses_sodium_options/client/gui/theme/GuiThemes.java`

### Other components

- **Player**
- **Minecraft client**
- **Sodium options**
- **Configuration storage**

## Connections

- Player → Video options screen: opens
- Video options screen → Tab frame: displays tabs
- Video options screen → Screen UI state: updates state
- Tab frame → Option rows: shows options
- Search field → Option search: queries
- Option search → Search index: builds index
- Option search → Search session: starts session
- Search session → Search results: returns matches
- Search field → Screen UI state: updates results
- Video options screen → Configuration storage: writes settings
- Video options screen → Sodium options: uses options
- Sodium GUI mixin → Video options screen: hooks GUI
- Sodium option mixin → Sodium options: extends options
- Video options screen → GUI themes: renders with
- Controlify support → Search field: adapts input
- Option rows → Option actions: hosts actions
- Option search → Mod configuration: reads limits
- Video options screen → Minecraft client: uses client
