# sata1000000/c7 architecture

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

- Interactive diagram: https://gitdiagram.com/sata1000000/c7
- Repository: https://github.com/sata1000000/c7

## Overview

C7 is a desktop controller and librarian for legacy Elektron hardware, with a companion DAW plugin. The main workflow is selecting a device and MIDI port, then editing or managing device data and transferring it over MIDI/SysEx; users can also save and restore data in `.c7` files. The graph preserves the documented backup, sample, DigiPro, firmware, and Bridge capabilities. Some implementation details were not sampled, so uncertain screen-to-core wiring is omitted.

Main entry points: [`crates/c7_core/src/midi.rs`](https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/midi.rs) (MIDI transport), [`crates/c7_app/src/ui/main_window.rs`](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/main_window.rs) (Main window), [`crates/c7_app/src/ui/screens/librarian.rs`](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/librarian.rs) (Librarian), [`crates/c7_app/src/ui/screens/kit_editor.rs`](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/kit_editor.rs) (Kit editor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop app"]
  node_window["Main window<br/>[main_window.rs]"]
  node_device_selector["Device selector<br/>[device_selector.rs]"]
  node_librarian["Librarian<br/>[librarian.rs]"]
  node_kit_editor["Kit editor<br/>[kit_editor.rs]"]
  node_sound_browser["Sound browser<br/>[sound_browser.rs]"]
  node_sample_upload["Sample upload<br/>[upload_sample.rs]"]
  node_sample_receive["Sample receive<br/>[receive_sample.rs]"]
  node_digipro_upload["DigiPro upload<br/>[upload_digipro.rs]"]
  node_digipro_receive["DigiPro receive<br/>[receive_digipro.rs]"]
  node_firmware["Firmware tools<br/>[firmware_tools.rs]"]
  node_settings["Settings<br/>[settings.rs]"]
end

subgraph group_core["Device and data core"]
  node_file_format["C7 and SYX files"]
  node_midi["MIDI transport<br/>[midi.rs]"]
  node_sysex["SysEx protocol<br/>[sysex.rs]"]
  node_sds["SDS transfers<br/>[sds.rs]"]
  node_digipro["DigiPro data<br/>[digipro.rs]"]
  node_firmware_core["Firmware transfer<br/>[firmware.rs]"]
  node_device_config["Device configuration<br/>[device_config.rs]"]
end

subgraph group_bridge["C7 Bridge plugin"]
  node_bridge_plugin["Bridge plugin<br/>[plugin.rs]"]
  node_bridge_params["DAW parameters<br/>[params.rs]"]
end

subgraph group_external["External systems"]
  node_hardware(("Elektron hardware"))
  node_daw(("DAW"))
end

node_user(("User"))

node_user -->|"uses"| node_window
node_window -->|"selects device"| node_device_selector
node_window -->|"opens"| node_librarian
node_window -->|"opens"| node_kit_editor
node_kit_editor -->|"opens"| node_sound_browser
node_user -->|"starts transfer"| node_sample_upload
node_user -->|"starts transfer"| node_sample_receive
node_user -->|"starts transfer"| node_digipro_upload
node_user -->|"starts transfer"| node_digipro_receive
node_user -->|"starts update"| node_firmware
node_user -->|"configures"| node_settings
node_librarian -->|"imports and exports"| node_file_format
node_librarian -->|"transfers device data"| node_midi
node_kit_editor -->|"sends parameter changes"| node_midi
node_sample_upload -->|"uploads samples"| node_sds
node_sample_receive -->|"receives samples"| node_sds
node_digipro_upload -->|"uploads wavetables"| node_digipro
node_digipro_receive -->|"receives wavetables"| node_digipro
node_firmware -->|"sends update"| node_firmware_core
node_midi -->|"sends and receives"| node_hardware
node_bridge_plugin -->|"builds parameters"| node_bridge_params
node_daw -->|"hosts plugin"| node_bridge_plugin
node_bridge_params -->|"emits SysEx"| node_midi
node_midi -->|"controls device"| node_hardware

click node_window "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/main_window.rs"
click node_device_selector "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/device_selector.rs"
click node_librarian "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/librarian.rs"
click node_kit_editor "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/kit_editor.rs"
click node_sound_browser "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/modals/sound_browser.rs"
click node_sample_upload "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/upload_sample.rs"
click node_sample_receive "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/receive_sample.rs"
click node_digipro_upload "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/upload_digipro.rs"
click node_digipro_receive "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/receive_digipro.rs"
click node_firmware "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/firmware_tools.rs"
click node_settings "https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/modals/settings.rs"
click node_file_format "https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/c7_file_interfacing.rs"
click node_midi "https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/midi.rs"
click node_sysex "https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/sysex.rs"
click node_sds "https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/sds.rs"
click node_digipro "https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/digipro.rs"
click node_firmware_core "https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/firmware.rs"
click node_device_config "https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/device_config.rs"
click node_bridge_plugin "https://github.com/sata1000000/c7/blob/main/crates/c7_bridge/src/plugin.rs"
click node_bridge_params "https://github.com/sata1000000/c7/blob/main/crates/c7_bridge/src/params.rs"

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_window,node_device_selector,node_librarian,node_kit_editor,node_sound_browser,node_sample_upload,node_sample_receive,node_digipro_upload,node_digipro_receive,node_firmware,node_settings,node_user toneBlue
class node_file_format,node_midi,node_sysex,node_sds,node_digipro,node_firmware_core,node_device_config toneAmber
class node_bridge_plugin,node_bridge_params toneMint
class node_hardware,node_daw toneRose
```

## Components

### Desktop app

- [Main window](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/main_window.rs): `crates/c7_app/src/ui/main_window.rs`
- [Device selector](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/device_selector.rs): `crates/c7_app/src/ui/screens/device_selector.rs`
- [Librarian](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/librarian.rs): `crates/c7_app/src/ui/screens/librarian.rs`
- [Kit editor](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/kit_editor.rs): `crates/c7_app/src/ui/screens/kit_editor.rs`
- [Sound browser](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/modals/sound_browser.rs): `crates/c7_app/src/ui/modals/sound_browser.rs`
- [Sample upload](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/upload_sample.rs): `crates/c7_app/src/ui/screens/upload_sample.rs`
- [Sample receive](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/receive_sample.rs): `crates/c7_app/src/ui/screens/receive_sample.rs`
- [DigiPro upload](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/upload_digipro.rs): `crates/c7_app/src/ui/screens/upload_digipro.rs`
- [DigiPro receive](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/receive_digipro.rs): `crates/c7_app/src/ui/screens/receive_digipro.rs`
- [Firmware tools](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/screens/firmware_tools.rs): `crates/c7_app/src/ui/screens/firmware_tools.rs`
- [Settings](https://github.com/sata1000000/c7/blob/main/crates/c7_app/src/ui/modals/settings.rs): `crates/c7_app/src/ui/modals/settings.rs`

### Device and data core

- [C7 and SYX files](https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/c7_file_interfacing.rs): `crates/c7_core/src/c7_file_interfacing.rs`
- [MIDI transport](https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/midi.rs): `crates/c7_core/src/midi.rs`
- [SysEx protocol](https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/sysex.rs): `crates/c7_core/src/sysex.rs`
- [SDS transfers](https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/sds.rs): `crates/c7_core/src/sds.rs`
- [DigiPro data](https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/digipro.rs): `crates/c7_core/src/digipro.rs`
- [Firmware transfer](https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/firmware.rs): `crates/c7_core/src/firmware.rs`
- [Device configuration](https://github.com/sata1000000/c7/blob/main/crates/c7_core/src/device_config.rs): `crates/c7_core/src/device_config.rs`

### C7 Bridge plugin

- [Bridge plugin](https://github.com/sata1000000/c7/blob/main/crates/c7_bridge/src/plugin.rs): `crates/c7_bridge/src/plugin.rs`
- [DAW parameters](https://github.com/sata1000000/c7/blob/main/crates/c7_bridge/src/params.rs): `crates/c7_bridge/src/params.rs`

### External systems

- **Elektron hardware**
- **DAW**

### Other components

- **User**

## Connections

- User → Main window: uses
- Main window → Device selector: selects device
- Main window → Librarian: opens
- Main window → Kit editor: opens
- Kit editor → Sound browser: opens
- User → Sample upload: starts transfer
- User → Sample receive: starts transfer
- User → DigiPro upload: starts transfer
- User → DigiPro receive: starts transfer
- User → Firmware tools: starts update
- User → Settings: configures
- Librarian → C7 and SYX files: imports and exports
- Librarian → MIDI transport: transfers device data
- Kit editor → MIDI transport: sends parameter changes
- Sample upload → SDS transfers: uploads samples
- Sample receive → SDS transfers: receives samples
- DigiPro upload → DigiPro data: uploads wavetables
- DigiPro receive → DigiPro data: receives wavetables
- Firmware tools → Firmware transfer: sends update
- MIDI transport → Elektron hardware: sends and receives
- Bridge plugin → DAW parameters: builds parameters
- DAW → Bridge plugin: hosts plugin
- DAW parameters → MIDI transport: emits SysEx
- MIDI transport → Elektron hardware: controls device
