# hxyulin/hadris architecture

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

- Interactive diagram: https://gitdiagram.com/hxyulin/hadris
- Repository: https://github.com/hxyulin/hadris

## Overview

Hadris is a Rust storage and filesystem library ecosystem, not a single filesystem pipeline. An application can start with the umbrella or a category/format crate, then detect or open a supported format and read, create, or modify its representation over shared I/O and storage abstractions. The workspace also provides command-line tools for inspecting and authoring several formats. The README documents the broad capabilities and facade relationships; sampled source confirms representative CLI dispatch and ISO/UDF writer behavior, but not every facade’s internal wiring.

Main entry points: [`crates/optical/hadris-iso/src/lib.rs`](https://github.com/hxyulin/hadris/blob/main/crates/optical/hadris-iso/src/lib.rs) (ISO 9660), [`crates/block/hadris-block/src/lib.rs`](https://github.com/hxyulin/hadris/blob/main/crates/block/hadris-block/src/lib.rs) (Block facade), [`crates/block/hadris-fat/src/lib.rs`](https://github.com/hxyulin/hadris/blob/main/crates/block/hadris-fat/src/lib.rs) (FAT / exFAT), [`crates/optical/hadris-udf/src/lib.rs`](https://github.com/hxyulin/hadris/blob/main/crates/optical/hadris-udf/src/lib.rs) (UDF)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Shared foundations"]
  node_umbrella["Umbrella API<br/>[lib.rs]"]
  node_io["Portable I/O<br/>[lib.rs]"]
  node_storage["Storage abstractions<br/>[lib.rs]"]
  node_path["Path utilities<br/>[lib.rs]"]
end

subgraph group_block["Block storage"]
  node_blockfacade["Block facade<br/>[lib.rs]"]
  node_partition["Partition tables<br/>[lib.rs]"]
  node_fat["FAT / exFAT<br/>[lib.rs]"]
  node_ntfs["NTFS reader<br/>[lib.rs]"]
end

subgraph group_optical["Optical media"]
  node_opticalfacade["Optical facade<br/>[lib.rs]"]
  node_iso["ISO 9660<br/>[lib.rs]"]
  node_udf["UDF<br/>[lib.rs]"]
  node_cd["Hybrid disc writer<br/>[lib.rs]"]
end

subgraph group_archive["Archives"]
  node_archivefacade["Archive facade<br/>[lib.rs]"]
  node_cpio["CPIO newc<br/>[lib.rs]"]
end

subgraph group_tools["Command-line tools"]
  node_fatcli["FAT utility<br/>[app.rs]"]
  node_isocli["ISO utility<br/>[app.rs]"]
  node_udfcli["UDF utility<br/>[app.rs]"]
  node_cdcli["CD utility<br/>[main.rs]"]
  node_cpio_cli["CPIO utility<br/>[app.rs]"]
end

node_application(("Application"))

node_application -->|"uses optionally"| node_umbrella
node_application -->|"uses optionally"| node_blockfacade
node_application -->|"uses optionally"| node_opticalfacade
node_application -->|"uses optionally"| node_archivefacade
node_application -->|"uses directly"| node_fat
node_application -->|"uses directly"| node_iso
node_umbrella -->|"re-exports"| node_blockfacade
node_umbrella -->|"re-exports"| node_opticalfacade
node_umbrella -->|"re-exports"| node_archivefacade
node_blockfacade -->|"opens partitions"| node_partition
node_blockfacade -->|"opens FAT"| node_fat
node_opticalfacade -->|"detects / opens"| node_iso
node_opticalfacade -->|"detects / opens"| node_udf
node_cd -->|"composes ISO"| node_iso
node_cd -->|"composes UDF"| node_udf
node_archivefacade -->|"provides format"| node_cpio
node_fatcli -->|"reads / writes"| node_fat
node_isocli -->|"reads / writes"| node_iso
node_udfcli -->|"reads / writes"| node_udf
node_cdcli -->|"creates images"| node_cd
node_cdcli -->|"inspects ISO"| node_iso
node_cdcli -->|"inspects UDF"| node_udf
node_cpio_cli -->|"reads / writes"| node_cpio
node_fat -->|"uses I/O traits"| node_io
node_iso -->|"uses I/O traits"| node_io
node_udf -->|"uses I/O traits"| node_io
node_cpio -->|"uses I/O traits"| node_io
node_blockfacade -->|"uses storage APIs"| node_storage
node_fat -->|"uses storage APIs"| node_storage
node_iso -->|"uses path utilities"| node_path

click node_umbrella "https://github.com/hxyulin/hadris/blob/main/crates/core/hadris/src/lib.rs"
click node_io "https://github.com/hxyulin/hadris/blob/main/crates/core/hadris-io/src/lib.rs"
click node_storage "https://github.com/hxyulin/hadris/blob/main/crates/core/hadris-storage/src/lib.rs"
click node_path "https://github.com/hxyulin/hadris/blob/main/crates/core/hadris-path/src/lib.rs"
click node_blockfacade "https://github.com/hxyulin/hadris/blob/main/crates/block/hadris-block/src/lib.rs"
click node_partition "https://github.com/hxyulin/hadris/blob/main/crates/block/hadris-part/src/lib.rs"
click node_fat "https://github.com/hxyulin/hadris/blob/main/crates/block/hadris-fat/src/lib.rs"
click node_ntfs "https://github.com/hxyulin/hadris/blob/main/crates/block/hadris-ntfs/src/lib.rs"
click node_opticalfacade "https://github.com/hxyulin/hadris/blob/main/crates/optical/hadris-optical/src/lib.rs"
click node_iso "https://github.com/hxyulin/hadris/blob/main/crates/optical/hadris-iso/src/lib.rs"
click node_udf "https://github.com/hxyulin/hadris/blob/main/crates/optical/hadris-udf/src/lib.rs"
click node_cd "https://github.com/hxyulin/hadris/blob/main/crates/optical/hadris-cd/src/lib.rs"
click node_archivefacade "https://github.com/hxyulin/hadris/blob/main/crates/archive/hadris-archive/src/lib.rs"
click node_cpio "https://github.com/hxyulin/hadris/blob/main/crates/archive/hadris-cpio/src/lib.rs"
click node_fatcli "https://github.com/hxyulin/hadris/blob/main/crates/tools/hadris-fat-cli/src/app.rs"
click node_isocli "https://github.com/hxyulin/hadris/blob/main/crates/tools/hadris-iso-cli/src/app.rs"
click node_udfcli "https://github.com/hxyulin/hadris/blob/main/crates/tools/hadris-udf-cli/src/app.rs"
click node_cdcli "https://github.com/hxyulin/hadris/blob/main/crates/tools/hadris-cd-cli/src/main.rs"
click node_cpio_cli "https://github.com/hxyulin/hadris/blob/main/crates/tools/hadris-cpio-cli/src/app.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_umbrella,node_io,node_storage,node_path toneBlue
class node_blockfacade,node_partition,node_fat,node_ntfs toneAmber
class node_opticalfacade,node_iso,node_udf,node_cd toneMint
class node_archivefacade,node_cpio toneRose
class node_fatcli,node_isocli,node_udfcli,node_cdcli,node_cpio_cli,node_application toneIndigo
```

## Components

### Shared foundations

- [Umbrella API](https://github.com/hxyulin/hadris/blob/main/crates/core/hadris/src/lib.rs): `crates/core/hadris/src/lib.rs`
- [Portable I/O](https://github.com/hxyulin/hadris/blob/main/crates/core/hadris-io/src/lib.rs): `crates/core/hadris-io/src/lib.rs`
- [Storage abstractions](https://github.com/hxyulin/hadris/blob/main/crates/core/hadris-storage/src/lib.rs): `crates/core/hadris-storage/src/lib.rs`
- [Path utilities](https://github.com/hxyulin/hadris/blob/main/crates/core/hadris-path/src/lib.rs): `crates/core/hadris-path/src/lib.rs`

### Block storage

- [Block facade](https://github.com/hxyulin/hadris/blob/main/crates/block/hadris-block/src/lib.rs): `crates/block/hadris-block/src/lib.rs`
- [Partition tables](https://github.com/hxyulin/hadris/blob/main/crates/block/hadris-part/src/lib.rs): `crates/block/hadris-part/src/lib.rs`
- [FAT / exFAT](https://github.com/hxyulin/hadris/blob/main/crates/block/hadris-fat/src/lib.rs): `crates/block/hadris-fat/src/lib.rs`
- [NTFS reader](https://github.com/hxyulin/hadris/blob/main/crates/block/hadris-ntfs/src/lib.rs): `crates/block/hadris-ntfs/src/lib.rs`

### Optical media

- [Optical facade](https://github.com/hxyulin/hadris/blob/main/crates/optical/hadris-optical/src/lib.rs): `crates/optical/hadris-optical/src/lib.rs`
- [ISO 9660](https://github.com/hxyulin/hadris/blob/main/crates/optical/hadris-iso/src/lib.rs): `crates/optical/hadris-iso/src/lib.rs`
- [UDF](https://github.com/hxyulin/hadris/blob/main/crates/optical/hadris-udf/src/lib.rs): `crates/optical/hadris-udf/src/lib.rs`
- [Hybrid disc writer](https://github.com/hxyulin/hadris/blob/main/crates/optical/hadris-cd/src/lib.rs): `crates/optical/hadris-cd/src/lib.rs`

### Archives

- [Archive facade](https://github.com/hxyulin/hadris/blob/main/crates/archive/hadris-archive/src/lib.rs): `crates/archive/hadris-archive/src/lib.rs`
- [CPIO newc](https://github.com/hxyulin/hadris/blob/main/crates/archive/hadris-cpio/src/lib.rs): `crates/archive/hadris-cpio/src/lib.rs`

### Command-line tools

- [FAT utility](https://github.com/hxyulin/hadris/blob/main/crates/tools/hadris-fat-cli/src/app.rs): `crates/tools/hadris-fat-cli/src/app.rs`
- [ISO utility](https://github.com/hxyulin/hadris/blob/main/crates/tools/hadris-iso-cli/src/app.rs): `crates/tools/hadris-iso-cli/src/app.rs`
- [UDF utility](https://github.com/hxyulin/hadris/blob/main/crates/tools/hadris-udf-cli/src/app.rs): `crates/tools/hadris-udf-cli/src/app.rs`
- [CD utility](https://github.com/hxyulin/hadris/blob/main/crates/tools/hadris-cd-cli/src/main.rs): `crates/tools/hadris-cd-cli/src/main.rs`
- [CPIO utility](https://github.com/hxyulin/hadris/blob/main/crates/tools/hadris-cpio-cli/src/app.rs): `crates/tools/hadris-cpio-cli/src/app.rs`

### Other components

- **Application**

## Connections

- Application → Umbrella API: uses optionally
- Application → Block facade: uses optionally
- Application → Optical facade: uses optionally
- Application → Archive facade: uses optionally
- Application → FAT / exFAT: uses directly
- Application → ISO 9660: uses directly
- Umbrella API → Block facade: re-exports
- Umbrella API → Optical facade: re-exports
- Umbrella API → Archive facade: re-exports
- Block facade → Partition tables: opens partitions
- Block facade → FAT / exFAT: opens FAT
- Optical facade → ISO 9660: detects / opens
- Optical facade → UDF: detects / opens
- Hybrid disc writer → ISO 9660: composes ISO
- Hybrid disc writer → UDF: composes UDF
- Archive facade → CPIO newc: provides format
- FAT utility → FAT / exFAT: reads / writes
- ISO utility → ISO 9660: reads / writes
- UDF utility → UDF: reads / writes
- CD utility → Hybrid disc writer: creates images
- CD utility → ISO 9660: inspects ISO
- CD utility → UDF: inspects UDF
- CPIO utility → CPIO newc: reads / writes
- FAT / exFAT → Portable I/O: uses I/O traits
- ISO 9660 → Portable I/O: uses I/O traits
- UDF → Portable I/O: uses I/O traits
- CPIO newc → Portable I/O: uses I/O traits
- Block facade → Storage abstractions: uses storage APIs
- FAT / exFAT → Storage abstractions: uses storage APIs
- ISO 9660 → Path utilities: uses path utilities
