# jlobblet/barotrauma-save-decompressor architecture

> Architecture diagram of the GitHub repository jlobblet/barotrauma-save-decompressor, 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/jlobblet/barotrauma-save-decompressor
- Repository: https://github.com/jlobblet/barotrauma-save-decompressor

## Overview

Barotrauma Save Decompressor provides desktop and command-line workflows for turning .save files into editable directories and compressing directories back into .save files. The desktop form collects paths through file/folder dialogs and displays operation output; the CLI parses compress/decompress commands. Both invoke a shared backend, which delegates the actual archive work to BaroLib. The README also describes editing extracted XML between operations. Backend and CLI source were sampled; UI behavior is supported by the form source and README.

Main entry points: [`Barotrauma-Save-Decompressor/Form.cs`](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor/Form.cs) (Operation form), [`Barotrauma-Save-Decompressor-Backend/CompressionUtil.cs`](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor-Backend/CompressionUtil.cs) (Compression utility), [`Barotrauma-Save-Decompressor-CLI/Program.cs`](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor-CLI/Program.cs) (CLI parser), [`Barotrauma-Save-Decompressor/Program.cs`](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor/Program.cs) (Desktop app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontends["User interfaces"]
  node_desktop["Desktop app<br/>[Program.cs]"]
  node_form["Operation form<br/>[Form.cs]"]
  node_dialogs["File dialogs<br/>[FormUtil.cs]"]
  node_writers["Output writers<br/>[Writers.cs]"]
  node_cli["CLI parser<br/>[Program.cs]"]
  node_compressverb["Compress command<br/>[CompressOptions.cs]"]
  node_decompressverb["Decompress command"]
end

subgraph group_operations["Save operations"]
  node_backend["Compression utility<br/>[CompressionUtil.cs]"]
end

subgraph group_integrations["Runtime integration"]
  node_barolib["BaroLib I/O"]
  node_files["Save files and directories"]
end

node_user(("User"))

node_user -->|"launches"| node_desktop
node_desktop -->|"opens"| node_form
node_user -->|"selects paths"| node_form
node_form -->|"opens dialogs"| node_dialogs
node_form -->|"requests operations"| node_backend
node_form -->|"redirects output"| node_writers
node_user -->|"runs commands"| node_cli
node_cli -->|"dispatches"| node_compressverb
node_cli -->|"dispatches"| node_decompressverb
node_compressverb -->|"compresses via"| node_backend
node_decompressverb -->|"decompresses via"| node_backend
node_backend -->|"calls"| node_barolib
node_barolib -->|"reads and writes"| node_files
node_user -->|"edits extracted XML"| node_files

click node_desktop "https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor/Program.cs"
click node_form "https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor/Form.cs"
click node_dialogs "https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor/FormUtil.cs"
click node_writers "https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor/Writers.cs"
click node_cli "https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor-CLI/Program.cs"
click node_compressverb "https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor-CLI/CompressOptions.cs"
click node_decompressverb "https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor-CLI/DecompressOptions.cs"
click node_backend "https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor-Backend/CompressionUtil.cs"

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_desktop,node_form,node_dialogs,node_writers,node_cli,node_compressverb,node_decompressverb,node_user toneBlue
class node_backend toneAmber
class node_barolib,node_files toneMint
```

## Components

### User interfaces

- [Desktop app](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor/Program.cs): `Barotrauma-Save-Decompressor/Program.cs`
- [Operation form](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor/Form.cs): `Barotrauma-Save-Decompressor/Form.cs`
- [File dialogs](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor/FormUtil.cs): `Barotrauma-Save-Decompressor/FormUtil.cs`
- [Output writers](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor/Writers.cs): `Barotrauma-Save-Decompressor/Writers.cs`
- [CLI parser](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor-CLI/Program.cs): `Barotrauma-Save-Decompressor-CLI/Program.cs`
- [Compress command](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor-CLI/CompressOptions.cs): `Barotrauma-Save-Decompressor-CLI/CompressOptions.cs`
- [Decompress command](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor-CLI/DecompressOptions.cs): `Barotrauma-Save-Decompressor-CLI/DecompressOptions.cs`

### Save operations

- [Compression utility](https://github.com/jlobblet/barotrauma-save-decompressor/blob/main/Barotrauma-Save-Decompressor-Backend/CompressionUtil.cs): `Barotrauma-Save-Decompressor-Backend/CompressionUtil.cs`

### Runtime integration

- **BaroLib I/O**
- **Save files and directories**

### Other components

- **User**

## Connections

- User → Desktop app: launches
- Desktop app → Operation form: opens
- User → Operation form: selects paths
- Operation form → File dialogs: opens dialogs
- Operation form → Compression utility: requests operations
- Operation form → Output writers: redirects output
- User → CLI parser: runs commands
- CLI parser → Compress command: dispatches
- CLI parser → Decompress command: dispatches
- Compress command → Compression utility: compresses via
- Decompress command → Compression utility: decompresses via
- Compression utility → BaroLib I/O: calls
- BaroLib I/O → Save files and directories: reads and writes
- User → Save files and directories: edits extracted XML
