# yassine-jemi01/yspm architecture

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

- Interactive diagram: https://gitdiagram.com/yassine-jemi01/yspm
- Repository: https://github.com/yassine-jemi01/yspm

## Overview

yspm is a Linux system package manager. Its principal workflow starts at the CLI, resolves package requests, obtains and verifies package artifacts, stages and validates them, commits filesystem changes, runs hooks and service/trigger actions, and saves installed state. The map also preserves documented capabilities whose implementation was not sampled; those connections are documented rather than inferred from unseen code.

Main entry points: [`internal/manager/manager.go`](https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/manager.go) (Package manager), [`cmd/yspm/main.go`](https://github.com/yassine-jemi01/yspm/blob/main/cmd/yspm/main.go) (Command CLI), [`internal/repo/repo.go`](https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/repo.go) (Repository index), [`internal/manager/local.go`](https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/local.go) (Local package install)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI and orchestration"]
  node_cli["Command CLI<br/>[main.go]"]
  node_manager["Package manager<br/>[manager.go]"]
end

subgraph group_packages["Packages and repositories"]
  node_repository["Repository index<br/>[repo.go]"]
  node_release["Stable releases<br/>[release.go]"]
  node_artifact["Package formats<br/>[package.go]"]
  node_legacy["HardcoreLinux support<br/>[hardcore.go]"]
  node_audit["Security audit"]
  node_build["Package building<br/>[package.go]"]
  node_repo_admin["Repository administration"]
end

subgraph group_transactions["Install transactions"]
  node_resolver["Dependency resolver<br/>[manager.go]"]
  node_transactions["Transaction lifecycle<br/>[manager.go]"]
  node_local["Local package install<br/>[local.go]"]
end

subgraph group_system["System integration"]
  node_hooks["Package hooks<br/>[manager.go]"]
  node_services["Services and triggers<br/>[service.go]"]
  node_snapshots["Btrfs snapshots<br/>[snapshot.go]"]
end

subgraph group_state["State and compatibility"]
  node_config["Paths and settings<br/>[config.go]"]
  node_model["Package and transaction data<br/>[model.go]"]
  node_database[("Installed state<br/>[store.go]")]
  node_lock["Operation lock<br/>[lock.go]"]
end

node_user(("Operator"))
node_remote["Package repository"]
node_external_services["Init systems and tools"]

node_user -->|"runs commands"| node_cli
node_cli -->|"dispatches operations"| node_manager
node_manager -->|"selects paths"| node_config
node_manager -->|"loads index"| node_repository
node_manager -->|"reads and writes"| node_database
node_manager -->|"resolves requests"| node_resolver
node_resolver -->|"uses package metadata"| node_model
node_repository -->|"fetches metadata"| node_remote
node_repository -->|"validates release"| node_release
node_manager -->|"runs install and upgrade"| node_transactions
node_transactions -->|"downloads artifacts"| node_repository
node_transactions -->|"stages packages"| node_artifact
node_transactions -->|"runs lifecycle hooks"| node_hooks
node_transactions -->|"applies services and triggers"| node_services
node_transactions -->|"saves package state"| node_database
node_cli -->|"installs local packages"| node_local
node_local -->|"reads package archives"| node_artifact
node_local -->|"saves installed state"| node_database
node_local -->|"applies services and triggers"| node_services
node_manager -->|"imports legacy packages"| node_legacy
node_cli -->|"dispatches snapshot commands"| node_snapshots
node_snapshots -->|"stores snapshot records"| node_database
node_snapshots -->|"runs Btrfs operations"| node_external_services
node_services -->|"invokes init tools"| node_external_services
node_cli -->|"dispatches audit"| node_audit
node_cli -->|"builds packages"| node_build
node_cli -->|"indexes and signs metadata"| node_repo_admin
node_transactions -->|"locks state changes"| node_lock
node_manager -->|"uses package and transaction data"| node_model
node_repository -->|"parses index data"| node_model

click node_cli "https://github.com/yassine-jemi01/yspm/blob/main/cmd/yspm/main.go"
click node_manager "https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/manager.go"
click node_config "https://github.com/yassine-jemi01/yspm/blob/main/internal/config/config.go"
click node_resolver "https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/manager.go"
click node_repository "https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/repo.go"
click node_release "https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/release.go"
click node_artifact "https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/package.go"
click node_legacy "https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/hardcore.go"
click node_transactions "https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/manager.go"
click node_local "https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/local.go"
click node_hooks "https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/manager.go"
click node_services "https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/service.go"
click node_snapshots "https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/snapshot.go"
click node_audit "https://github.com/yassine-jemi01/yspm/tree/main/internal/manager"
click node_build "https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/package.go"
click node_repo_admin "https://github.com/yassine-jemi01/yspm/tree/main/internal/repo"
click node_model "https://github.com/yassine-jemi01/yspm/blob/main/internal/model/model.go"
click node_database "https://github.com/yassine-jemi01/yspm/blob/main/internal/store/store.go"
click node_lock "https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/lock.go"

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_manager toneBlue
class node_repository,node_release,node_artifact,node_legacy,node_audit,node_build,node_repo_admin toneAmber
class node_resolver,node_transactions,node_local toneMint
class node_hooks,node_services,node_snapshots toneRose
class node_config,node_model,node_database,node_lock,node_user,node_remote,node_external_services toneIndigo
```

## Components

### CLI and orchestration

- [Command CLI](https://github.com/yassine-jemi01/yspm/blob/main/cmd/yspm/main.go): `cmd/yspm/main.go`
- [Package manager](https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/manager.go): `internal/manager/manager.go`

### Packages and repositories

- [Repository index](https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/repo.go): `internal/repo/repo.go`
- [Stable releases](https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/release.go): `internal/repo/release.go`
- [Package formats](https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/package.go): `internal/repo/package.go`
- [HardcoreLinux support](https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/hardcore.go): `internal/repo/hardcore.go`
- [Security audit](https://github.com/yassine-jemi01/yspm/tree/main/internal/manager): `internal/manager`
- [Package building](https://github.com/yassine-jemi01/yspm/blob/main/internal/repo/package.go): `internal/repo/package.go`
- [Repository administration](https://github.com/yassine-jemi01/yspm/tree/main/internal/repo): `internal/repo`

### Install transactions

- [Dependency resolver](https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/manager.go): `internal/manager/manager.go`
- [Transaction lifecycle](https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/manager.go): `internal/manager/manager.go`
- [Local package install](https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/local.go): `internal/manager/local.go`

### System integration

- [Package hooks](https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/manager.go): `internal/manager/manager.go`
- [Services and triggers](https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/service.go): `internal/manager/service.go`
- [Btrfs snapshots](https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/snapshot.go): `internal/manager/snapshot.go`

### State and compatibility

- [Paths and settings](https://github.com/yassine-jemi01/yspm/blob/main/internal/config/config.go): `internal/config/config.go`
- [Package and transaction data](https://github.com/yassine-jemi01/yspm/blob/main/internal/model/model.go): `internal/model/model.go`
- [Installed state](https://github.com/yassine-jemi01/yspm/blob/main/internal/store/store.go): `internal/store/store.go`
- [Operation lock](https://github.com/yassine-jemi01/yspm/blob/main/internal/manager/lock.go): `internal/manager/lock.go`

### Other components

- **Operator**
- **Package repository**
- **Init systems and tools**

## Connections

- Operator → Command CLI: runs commands (evidence: `README.md`)
- Command CLI → Package manager: dispatches operations (evidence: `cmd/yspm/main.go`)
- Package manager → Paths and settings: selects paths (evidence: `internal/manager/manager.go`)
- Package manager → Repository index: loads index (evidence: `internal/manager/manager.go`)
- Package manager → Installed state: reads and writes (evidence: `internal/manager/manager.go`)
- Package manager → Dependency resolver: resolves requests (evidence: `README.md`)
- Dependency resolver → Package and transaction data: uses package metadata (evidence: `internal/manager/manager.go`)
- Repository index → Package repository: fetches metadata (evidence: `internal/repo/repo.go`)
- Repository index → Stable releases: validates release (evidence: `internal/repo/repo.go`)
- Package manager → Transaction lifecycle: runs install and upgrade (evidence: `internal/manager/manager.go`)
- Transaction lifecycle → Repository index: downloads artifacts (evidence: `README.md`)
- Transaction lifecycle → Package formats: stages packages (evidence: `README.md`)
- Transaction lifecycle → Package hooks: runs lifecycle hooks (evidence: `README.md`)
- Transaction lifecycle → Services and triggers: applies services and triggers (evidence: `README.md`)
- Transaction lifecycle → Installed state: saves package state (evidence: `README.md`)
- Command CLI → Local package install: installs local packages (evidence: `cmd/yspm/main.go`)
- Local package install → Package formats: reads package archives (evidence: `internal/manager/local.go`)
- Local package install → Installed state: saves installed state (evidence: `internal/manager/local.go`)
- Local package install → Services and triggers: applies services and triggers (evidence: `internal/manager/local.go`)
- Package manager → HardcoreLinux support: imports legacy packages
- Command CLI → Btrfs snapshots: dispatches snapshot commands (evidence: `cmd/yspm/main.go`)
- Btrfs snapshots → Installed state: stores snapshot records (evidence: `internal/manager/snapshot.go`)
- Btrfs snapshots → Init systems and tools: runs Btrfs operations (evidence: `internal/manager/snapshot.go`)
- Services and triggers → Init systems and tools: invokes init tools (evidence: `internal/manager/service.go`)
- Command CLI → Security audit: dispatches audit (evidence: `README.md`)
- Command CLI → Package building: builds packages (evidence: `README.md`)
- Command CLI → Repository administration: indexes and signs metadata (evidence: `README.md`)
- Transaction lifecycle → Operation lock: locks state changes (evidence: `README.md`)
- Package manager → Package and transaction data: uses package and transaction data (evidence: `internal/manager/manager.go`)
- Repository index → Package and transaction data: parses index data (evidence: `internal/repo/repo.go`)
