# houseabsolute/ubi architecture

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

- Interactive diagram: https://gitdiagram.com/houseabsolute/ubi
- Repository: https://github.com/houseabsolute/ubi

## Overview

UBI is a Rust library and CLI for downloading and installing single-file release binaries. A user supplies a project or direct asset URL and install options; the library fetches release assets, selects one for the target platform, downloads it, and installs or extracts the executable. The graph preserves forge-provider adapters and the platform/archive handling layers. README and excerpts support the main workflow; the CLI-to-library handoff and some unsampled internal connections are not shown, so those links are marked unverified or omitted.

Main entry points: [`ubi/src/ubi.rs`](https://github.com/houseabsolute/ubi/blob/master/ubi/src/ubi.rs) (Install workflow), [`ubi/src/forge.rs`](https://github.com/houseabsolute/ubi/blob/master/ubi/src/forge.rs) (Forge dispatch and API), [`ubi/src/installer.rs`](https://github.com/houseabsolute/ubi/blob/master/ubi/src/installer.rs) (Executable installer), [`ubi/src/extension.rs`](https://github.com/houseabsolute/ubi/blob/master/ubi/src/extension.rs) (Asset format detection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User entry"]
  node_cli["UBI CLI<br/>[main.rs]"]
  node_builder["Configuration builder<br/>[builder.rs]"]
  node_core["Install workflow<br/>[ubi.rs]"]
end

subgraph group_release["Release discovery"]
  node_forge["Forge dispatch and API<br/>[forge.rs]"]
  node_github["GitHub adapter<br/>[github.rs]"]
  node_gitlab["GitLab adapter<br/>[gitlab.rs]"]
  node_forgejo["Forgejo adapter<br/>[forgejo.rs]"]
end

subgraph group_selection["Asset selection"]
  node_picker["Release asset picker<br/>[picker.rs]"]
  node_extensions["Asset format detection<br/>[extension.rs]"]
  node_architecture["CPU architecture matching<br/>[arch.rs]"]
  node_operating_system["OS matching<br/>[os.rs]"]
end

subgraph group_install["Download and install"]
  node_download["Asset download<br/>[ubi.rs]"]
  node_installer["Executable installer<br/>[installer.rs]"]
  node_archive["Archive readers<br/>[archive.rs]"]
end

node_user(("User"))
node_forge_services{{"Release forge services"}}
node_filesystem[("Install filesystem")]

node_user -->|"provides options"| node_cli
node_user -->|"configures library"| node_builder
node_cli -.->|"configures"| node_builder
node_builder -->|"builds instance"| node_core
node_core -->|"fetches releases"| node_forge
node_forge -->|"dispatches to"| node_github
node_forge -->|"dispatches to"| node_gitlab
node_forge -->|"dispatches to"| node_forgejo
node_forge -->|"requests release data"| node_forge_services
node_core -->|"selects asset"| node_picker
node_picker -->|"checks formats"| node_extensions
node_picker -->|"matches platform names"| node_architecture
node_extensions -->|"uses architecture patterns"| node_architecture
node_extensions -->|"uses OS patterns"| node_operating_system
node_core -->|"downloads asset"| node_download
node_core -->|"installs download"| node_installer
node_installer -->|"classifies asset"| node_extensions
node_installer -->|"reads archive entries"| node_archive
node_installer -->|"writes executable"| node_filesystem
node_download -->|"downloads asset bytes"| node_forge_services

click node_cli "https://github.com/houseabsolute/ubi/blob/master/ubi-cli/src/main.rs"
click node_builder "https://github.com/houseabsolute/ubi/blob/master/ubi/src/builder.rs"
click node_core "https://github.com/houseabsolute/ubi/blob/master/ubi/src/ubi.rs"
click node_forge "https://github.com/houseabsolute/ubi/blob/master/ubi/src/forge.rs"
click node_github "https://github.com/houseabsolute/ubi/blob/master/ubi/src/github.rs"
click node_gitlab "https://github.com/houseabsolute/ubi/blob/master/ubi/src/gitlab.rs"
click node_forgejo "https://github.com/houseabsolute/ubi/blob/master/ubi/src/forgejo.rs"
click node_picker "https://github.com/houseabsolute/ubi/blob/master/ubi/src/picker.rs"
click node_extensions "https://github.com/houseabsolute/ubi/blob/master/ubi/src/extension.rs"
click node_architecture "https://github.com/houseabsolute/ubi/blob/master/ubi/src/arch.rs"
click node_operating_system "https://github.com/houseabsolute/ubi/blob/master/ubi/src/os.rs"
click node_download "https://github.com/houseabsolute/ubi/blob/master/ubi/src/ubi.rs"
click node_installer "https://github.com/houseabsolute/ubi/blob/master/ubi/src/installer.rs"
click node_archive "https://github.com/houseabsolute/ubi/blob/master/ubi/src/archive.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_cli,node_builder,node_core,node_user toneBlue
class node_forge,node_github,node_gitlab,node_forgejo,node_filesystem toneAmber
class node_picker,node_extensions,node_architecture,node_operating_system toneMint
class node_download,node_installer,node_archive toneRose
class node_forge_services toneIndigo
```

## Components

### User entry

- [UBI CLI](https://github.com/houseabsolute/ubi/blob/master/ubi-cli/src/main.rs): `ubi-cli/src/main.rs`
- [Configuration builder](https://github.com/houseabsolute/ubi/blob/master/ubi/src/builder.rs): `ubi/src/builder.rs`
- [Install workflow](https://github.com/houseabsolute/ubi/blob/master/ubi/src/ubi.rs): `ubi/src/ubi.rs`

### Release discovery

- [Forge dispatch and API](https://github.com/houseabsolute/ubi/blob/master/ubi/src/forge.rs): `ubi/src/forge.rs`
- [GitHub adapter](https://github.com/houseabsolute/ubi/blob/master/ubi/src/github.rs): `ubi/src/github.rs`
- [GitLab adapter](https://github.com/houseabsolute/ubi/blob/master/ubi/src/gitlab.rs): `ubi/src/gitlab.rs`
- [Forgejo adapter](https://github.com/houseabsolute/ubi/blob/master/ubi/src/forgejo.rs): `ubi/src/forgejo.rs`

### Asset selection

- [Release asset picker](https://github.com/houseabsolute/ubi/blob/master/ubi/src/picker.rs): `ubi/src/picker.rs`
- [Asset format detection](https://github.com/houseabsolute/ubi/blob/master/ubi/src/extension.rs): `ubi/src/extension.rs`
- [CPU architecture matching](https://github.com/houseabsolute/ubi/blob/master/ubi/src/arch.rs): `ubi/src/arch.rs`
- [OS matching](https://github.com/houseabsolute/ubi/blob/master/ubi/src/os.rs): `ubi/src/os.rs`

### Download and install

- [Asset download](https://github.com/houseabsolute/ubi/blob/master/ubi/src/ubi.rs): `ubi/src/ubi.rs`
- [Executable installer](https://github.com/houseabsolute/ubi/blob/master/ubi/src/installer.rs): `ubi/src/installer.rs`
- [Archive readers](https://github.com/houseabsolute/ubi/blob/master/ubi/src/archive.rs): `ubi/src/archive.rs`

### Other components

- **User**
- **Release forge services**
- **Install filesystem**

## Connections

- User → UBI CLI: provides options (evidence: `README.md`)
- User → Configuration builder: configures library
- UBI CLI → Configuration builder: configures
- Configuration builder → Install workflow: builds instance (evidence: `ubi/src/builder.rs`)
- Install workflow → Forge dispatch and API: fetches releases (evidence: `ubi/src/ubi.rs`)
- Forge dispatch and API → GitHub adapter: dispatches to (evidence: `ubi/src/forge.rs`)
- Forge dispatch and API → GitLab adapter: dispatches to (evidence: `ubi/src/forge.rs`)
- Forge dispatch and API → Forgejo adapter: dispatches to (evidence: `ubi/src/forge.rs`)
- Forge dispatch and API → Release forge services: requests release data (evidence: `ubi/src/forge.rs`)
- Install workflow → Release asset picker: selects asset (evidence: `ubi/src/ubi.rs`)
- Release asset picker → Asset format detection: checks formats (evidence: `ubi/src/picker.rs`)
- Release asset picker → CPU architecture matching: matches platform names (evidence: `ubi/src/picker.rs`)
- Asset format detection → CPU architecture matching: uses architecture patterns (evidence: `ubi/src/extension.rs`)
- Asset format detection → OS matching: uses OS patterns (evidence: `ubi/src/extension.rs`)
- Install workflow → Asset download: downloads asset (evidence: `ubi/src/ubi.rs`)
- Install workflow → Executable installer: installs download (evidence: `ubi/src/ubi.rs`)
- Executable installer → Asset format detection: classifies asset (evidence: `ubi/src/installer.rs`)
- Executable installer → Archive readers: reads archive entries (evidence: `ubi/src/installer.rs`)
- Executable installer → Install filesystem: writes executable (evidence: `ubi/src/installer.rs`)
- Asset download → Release forge services: downloads asset bytes (evidence: `ubi/src/ubi.rs`)
