# bigtreetech/bigtreetech_mms architecture

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

- Interactive diagram: https://gitdiagram.com/bigtreetech/bigtreetech_mms
- Repository: https://github.com/bigtreetech/bigtreetech_mms

## Overview

BIGTREETECH MMS is a Klipper-based multi-material filament system, with a KlipperScreen interface and a Moonraker component. The principal workflow is slot selection and status display in KlipperScreen, through its MMS controller, to Klipper commands and the system’s slot, motion, and swap logic. The map also includes configuration, printer adapters, hardware, and the documented UI panels. Some subsystem links are omitted or marked unverified because the available excerpts do not show their runtime wiring.

Main entry points: [`klippy/extras/mms/mms.py`](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/mms.py) (MMS Command Core), [`KlipperScreen/vivid/controllers/mms.py`](https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/controllers/mms.py) (MMS Controller), [`KlipperScreen/vivid/panels/main.py`](https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/panels/main.py) (Main Panel), [`klippy/extras/mms/adapters`](https://github.com/bigtreetech/bigtreetech_mms/tree/master/klippy/extras/mms/adapters) (Klipper Adapters)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_screen["KlipperScreen UI"]
  node_main_panel["Main Panel<br/>[main.py]"]
  node_preprint_panel["Preprint Panel<br/>[preprint.py]"]
  node_slot_panel["Slot Panel<br/>[slot.py]"]
  node_ui_controller["MMS Controller<br/>[mms.py]"]
  node_ui_config["Screen Config<br/>[manager.py]"]
  node_vivid_config["Config Values<br/>[vivid_config.py]"]
  node_ui_widgets["UI Widgets"]
end

subgraph group_klipper["Klipper MMS"]
  node_mms_core["MMS Command Core<br/>[mms.py]"]
  node_mms_config["MMS Config<br/>[config.py]"]
  node_task["Async Tasks<br/>[task.py]"]
end

subgraph group_motion["Filament Operations"]
  node_delivery["Filament Delivery<br/>[delivery.py]"]
  node_swap["Filament Swap<br/>[swap.py]"]
  node_charge["Filament Charging<br/>[charge.py]"]
  node_purge["Filament Purging<br/>[purge.py]"]
  node_spool["Endless Spool<br/>[endless_spool.py]"]
  node_pause_resume["Pause and Resume<br/>[pause.py]"]
end

subgraph group_integration["Printer Integration"]
  node_adapters["Klipper Adapters"]
  node_moonraker_server["Moonraker MMS Server<br/>[mms_server.py]"]
end

subgraph group_hardware["Hardware and State"]
  node_slot_model["Slot Model<br/>[slot.py]"]
  node_buffer["Buffer Management<br/>[buffer.py]"]
  node_slot_pins["Slot Pin Sensors<br/>[slot_pin.py]"]
  node_hardware_button["Button Hardware<br/>[button.py]"]
  node_hardware_stepper["Stepper Hardware<br/>[stepper.py]"]
end

node_operator(("Printer Operator"))
node_moonraker(("Moonraker"))

node_operator -->|"operates"| node_main_panel
node_main_panel -->|"sends commands"| node_ui_controller
node_preprint_panel -->|"uses controller"| node_ui_controller
node_slot_panel -->|"uses controller"| node_ui_controller
node_main_panel -->|"renders with"| node_ui_widgets
node_preprint_panel -->|"renders with"| node_ui_widgets
node_slot_panel -->|"renders with"| node_ui_widgets
node_main_panel -->|"reads settings"| node_ui_config
node_ui_config -->|"loads values"| node_vivid_config
node_ui_controller -->|"requests status"| node_moonraker
node_ui_controller -.->|"sends Klipper commands"| node_mms_core
node_mms_core -->|"reads configuration"| node_mms_config
node_mms_core -->|"manages slots"| node_slot_model
node_mms_core -->|"uses buffer"| node_buffer
node_mms_core -->|"schedules work"| node_task
node_mms_core -->|"dispatches delivery"| node_delivery
node_mms_core -->|"configures spool handling"| node_spool
node_mms_core -->|"uses pause handling"| node_pause_resume
node_slot_model -->|"uses pin state"| node_slot_pins
node_slot_pins -->|"registers callbacks"| node_hardware_button
node_mms_core -->|"uses stepper"| node_hardware_stepper
node_mms_core -->|"uses printer adapters"| node_adapters
node_delivery -->|"uses printer adapters"| node_adapters
node_charge -->|"uses printer adapters"| node_adapters
node_purge -->|"uses printer adapters"| node_adapters
node_mms_core -.->|"dispatches charging"| node_charge
node_mms_core -.->|"dispatches swaps"| node_swap
node_moonraker -.->|"hosts component"| node_moonraker_server

click node_main_panel "https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/panels/main.py"
click node_preprint_panel "https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/panels/preprint.py"
click node_slot_panel "https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/panels/slot.py"
click node_ui_controller "https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/controllers/mms.py"
click node_ui_config "https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/config/manager.py"
click node_vivid_config "https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/config/vivid_config.py"
click node_ui_widgets "https://github.com/bigtreetech/bigtreetech_mms/tree/master/KlipperScreen/vivid/components"
click node_mms_core "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/mms.py"
click node_mms_config "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/core/config.py"
click node_slot_model "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/core/slot.py"
click node_buffer "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/core/buffer.py"
click node_task "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/core/task.py"
click node_delivery "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/motion/delivery.py"
click node_swap "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/swap/swap.py"
click node_charge "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/swap/charge.py"
click node_purge "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/swap/purge.py"
click node_spool "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/motion/endless_spool.py"
click node_pause_resume "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/motion/pause.py"
click node_slot_pins "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/core/slot_pin.py"
click node_hardware_button "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/hardware/button.py"
click node_hardware_stepper "https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/hardware/stepper.py"
click node_adapters "https://github.com/bigtreetech/bigtreetech_mms/tree/master/klippy/extras/mms/adapters"
click node_moonraker_server "https://github.com/bigtreetech/bigtreetech_mms/blob/master/moonraker/components/mms_server.py"

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_main_panel,node_preprint_panel,node_slot_panel,node_ui_controller,node_ui_config,node_vivid_config,node_ui_widgets toneBlue
class node_mms_core,node_mms_config,node_task toneAmber
class node_delivery,node_swap,node_charge,node_purge,node_spool,node_pause_resume toneMint
class node_adapters,node_moonraker_server toneRose
class node_slot_model,node_buffer,node_slot_pins,node_hardware_button,node_hardware_stepper,node_operator,node_moonraker toneIndigo
```

## Components

### KlipperScreen UI

- [Main Panel](https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/panels/main.py): `KlipperScreen/vivid/panels/main.py`
- [Preprint Panel](https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/panels/preprint.py): `KlipperScreen/vivid/panels/preprint.py`
- [Slot Panel](https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/panels/slot.py): `KlipperScreen/vivid/panels/slot.py`
- [MMS Controller](https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/controllers/mms.py): `KlipperScreen/vivid/controllers/mms.py`
- [Screen Config](https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/config/manager.py): `KlipperScreen/vivid/config/manager.py`
- [Config Values](https://github.com/bigtreetech/bigtreetech_mms/blob/master/KlipperScreen/vivid/config/vivid_config.py): `KlipperScreen/vivid/config/vivid_config.py`
- [UI Widgets](https://github.com/bigtreetech/bigtreetech_mms/tree/master/KlipperScreen/vivid/components): `KlipperScreen/vivid/components`

### Klipper MMS

- [MMS Command Core](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/mms.py): `klippy/extras/mms/mms.py`
- [MMS Config](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/core/config.py): `klippy/extras/mms/core/config.py`
- [Async Tasks](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/core/task.py): `klippy/extras/mms/core/task.py`

### Filament Operations

- [Filament Delivery](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/motion/delivery.py): `klippy/extras/mms/motion/delivery.py`
- [Filament Swap](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/swap/swap.py): `klippy/extras/mms/swap/swap.py`
- [Filament Charging](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/swap/charge.py): `klippy/extras/mms/swap/charge.py`
- [Filament Purging](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/swap/purge.py): `klippy/extras/mms/swap/purge.py`
- [Endless Spool](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/motion/endless_spool.py): `klippy/extras/mms/motion/endless_spool.py`
- [Pause and Resume](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/motion/pause.py): `klippy/extras/mms/motion/pause.py`

### Printer Integration

- [Klipper Adapters](https://github.com/bigtreetech/bigtreetech_mms/tree/master/klippy/extras/mms/adapters): `klippy/extras/mms/adapters`
- [Moonraker MMS Server](https://github.com/bigtreetech/bigtreetech_mms/blob/master/moonraker/components/mms_server.py): `moonraker/components/mms_server.py`

### Hardware and State

- [Slot Model](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/core/slot.py): `klippy/extras/mms/core/slot.py`
- [Buffer Management](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/core/buffer.py): `klippy/extras/mms/core/buffer.py`
- [Slot Pin Sensors](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/core/slot_pin.py): `klippy/extras/mms/core/slot_pin.py`
- [Button Hardware](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/hardware/button.py): `klippy/extras/mms/hardware/button.py`
- [Stepper Hardware](https://github.com/bigtreetech/bigtreetech_mms/blob/master/klippy/extras/mms/hardware/stepper.py): `klippy/extras/mms/hardware/stepper.py`

### Other components

- **Printer Operator**
- **Moonraker**

## Connections

- Printer Operator → Main Panel: operates (evidence: `KlipperScreen/vivid/panels/main.py`)
- Main Panel → MMS Controller: sends commands (evidence: `KlipperScreen/vivid/panels/main.py`)
- Preprint Panel → MMS Controller: uses controller (evidence: `KlipperScreen/vivid/panels/preprint.py`)
- Slot Panel → MMS Controller: uses controller (evidence: `KlipperScreen/vivid/panels/slot.py`)
- Main Panel → UI Widgets: renders with (evidence: `KlipperScreen/vivid/panels/main.py`)
- Preprint Panel → UI Widgets: renders with (evidence: `KlipperScreen/vivid/panels/preprint.py`)
- Slot Panel → UI Widgets: renders with (evidence: `KlipperScreen/vivid/panels/slot.py`)
- Main Panel → Screen Config: reads settings (evidence: `KlipperScreen/vivid/panels/main.py`)
- Screen Config → Config Values: loads values (evidence: `KlipperScreen/vivid/config/manager.py`)
- MMS Controller → Moonraker: requests status (evidence: `KlipperScreen/vivid/controllers/mms.py`)
- MMS Controller → MMS Command Core: sends Klipper commands
- MMS Command Core → MMS Config: reads configuration (evidence: `klippy/extras/mms/mms.py`)
- MMS Command Core → Slot Model: manages slots (evidence: `klippy/extras/mms/mms.py`)
- MMS Command Core → Buffer Management: uses buffer (evidence: `klippy/extras/mms/mms.py`)
- MMS Command Core → Async Tasks: schedules work (evidence: `klippy/extras/mms/mms.py`)
- MMS Command Core → Filament Delivery: dispatches delivery (evidence: `klippy/extras/mms/mms.py`)
- MMS Command Core → Endless Spool: configures spool handling (evidence: `klippy/extras/mms/mms.py`)
- MMS Command Core → Pause and Resume: uses pause handling (evidence: `klippy/extras/mms/mms.py`)
- Slot Model → Slot Pin Sensors: uses pin state (evidence: `klippy/extras/mms/core/slot.py`)
- Slot Pin Sensors → Button Hardware: registers callbacks (evidence: `klippy/extras/mms/core/slot_pin.py`)
- MMS Command Core → Stepper Hardware: uses stepper (evidence: `klippy/extras/mms/mms.py`)
- MMS Command Core → Klipper Adapters: uses printer adapters (evidence: `klippy/extras/mms/mms.py`)
- Filament Delivery → Klipper Adapters: uses printer adapters (evidence: `klippy/extras/mms/motion/delivery.py`)
- Filament Charging → Klipper Adapters: uses printer adapters (evidence: `klippy/extras/mms/swap/charge.py`)
- Filament Purging → Klipper Adapters: uses printer adapters (evidence: `klippy/extras/mms/swap/purge.py`)
- MMS Command Core → Filament Charging: dispatches charging
- MMS Command Core → Filament Swap: dispatches swaps
- Moonraker → Moonraker MMS Server: hosts component
