# thetechdog/the-snap-sideloader architecture

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

- Interactive diagram: https://gitdiagram.com/thetechdog/the-snap-sideloader
- Repository: https://github.com/thetechdog/the-snap-sideloader

## Overview

The Snap Sideloader is a Java Swing client for managing snap packages from local files and decentralized third-party repositories. The main workflow starts in the store: users choose a repository, browse or search its catalog, inspect a program, then download, verify, and install a selected version; the library shows installed packages and updates. Separate branches cover repository management, recommendations, settings, and local-package management. The graph reflects README capabilities and shown calls; some UI routing and unsampled subsystem internals are documented rather than verified in excerpts.

Main entry points: [`src/main/java/org/sideloader/SnapSideloaderStore.java`](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SnapSideloaderStore.java) (Store interface), [`src/main/java/org/sideloader/DBOperator.java`](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/DBOperator.java) (Repository database access), [`src/main/java/org/sideloader/ProgramCommandWorker.java`](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramCommandWorker.java) (Install and remove), [`src/main/java/org/sideloader/ProgramOverview.java`](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramOverview.java) (Program details)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application and navigation"]
  node_main["Application startup<br/>[Main.java]"]
  node_store["Store interface"]
end

subgraph group_catalog["Repository catalog"]
  node_featured["Store homepage<br/>[FeaturedApps.java]"]
  node_search["Catalog search"]
  node_searchui["Search results"]
  node_details["Program details"]
  node_suggestions["Similar programs"]
end

subgraph group_package["Package management"]
  node_library["Installed library"]
  node_local["Local package mode"]
  node_download["Package download"]
  node_commands["Install and remove"]
end

subgraph group_config["Repositories and settings"]
  node_repo_manager["Repository manager<br/>[RepoManager.java]"]
  node_settings["Store settings"]
  node_preferences["Settings model"]
end

subgraph group_runtime["Runtime services"]
  node_catalogdb[("Repository database access<br/>[DBOperator.java]")]
  node_installed_data[("Installed-package records")]
  node_command_runner["System command runner"]
end

node_user(("User"))
node_repository[("Third-party repository")]
node_snapd["Snap system"]
node_local_file["Local snap file"]

node_user -->|"launches"| node_main
node_main -->|"opens"| node_store
node_user -->|"browses"| node_store
node_store -->|"loads homepage"| node_featured
node_featured -->|"queries"| node_catalogdb
node_store -->|"starts search"| node_search
node_search -->|"queries"| node_catalogdb
node_search -->|"creates results"| node_searchui
node_searchui -->|"opens selection"| node_store
node_store -->|"loads selection"| node_details
node_details -->|"requests suggestions"| node_suggestions
node_suggestions -->|"queries"| node_catalogdb
node_details -->|"starts download"| node_download
node_download -->|"starts install"| node_commands
node_download -->|"checks hash"| node_command_runner
node_details -->|"requests removal"| node_commands
node_commands -->|"executes command"| node_command_runner
node_commands -.->|"manages packages"| node_snapd
node_store -->|"opens library"| node_library
node_library -->|"checks updates"| node_catalogdb
node_user -->|"opens local mode"| node_local
node_local -->|"opens package"| node_local_file
node_local -->|"runs package action"| node_command_runner
node_local -.->|"installs or removes"| node_snapd
node_user -->|"manages repositories"| node_repo_manager
node_repo_manager -->|"downloads database"| node_repository
node_repo_manager -->|"saves repository list"| node_store
node_repository -.->|"supplies catalog"| node_catalogdb
node_user -->|"changes preferences"| node_settings
node_settings -->|"updates"| node_preferences
node_settings -->|"opens manager"| node_repo_manager
node_store -.->|"opens current catalog"| node_catalogdb
node_store -.->|"reads installed records"| node_installed_data
node_commands -.->|"updates installed records"| node_installed_data

click node_main "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/Main.java"
click node_store "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SnapSideloaderStore.java"
click node_featured "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/FeaturedApps.java"
click node_search "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SearchResultsFetcher.java"
click node_searchui "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SearchResultsPanel.java"
click node_details "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramOverview.java"
click node_suggestions "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SimilarAppsFinder.java"
click node_library "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/InstalledAndUpdatesPanel.java"
click node_local "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/LocalPackageInstaller.java"
click node_download "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramDownloadWorker.java"
click node_commands "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramCommandWorker.java"
click node_repo_manager "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/RepoManager.java"
click node_settings "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramSettingsGUI.java"
click node_preferences "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramSettings.java"
click node_catalogdb "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/DBOperator.java"
click node_installed_data "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SnapSideloaderStore.java"
click node_command_runner "https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/CommandOutputter.java"

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_main,node_store,node_user toneBlue
class node_featured,node_search,node_searchui,node_details,node_suggestions,node_repository toneAmber
class node_library,node_local,node_download,node_commands toneMint
class node_repo_manager,node_settings,node_preferences toneRose
class node_catalogdb,node_installed_data,node_command_runner,node_snapd,node_local_file toneIndigo
```

## Components

### Application and navigation

- [Application startup](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/Main.java): `src/main/java/org/sideloader/Main.java`
- [Store interface](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SnapSideloaderStore.java): `src/main/java/org/sideloader/SnapSideloaderStore.java`

### Repository catalog

- [Store homepage](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/FeaturedApps.java): `src/main/java/org/sideloader/FeaturedApps.java`
- [Catalog search](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SearchResultsFetcher.java): `src/main/java/org/sideloader/SearchResultsFetcher.java`
- [Search results](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SearchResultsPanel.java): `src/main/java/org/sideloader/SearchResultsPanel.java`
- [Program details](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramOverview.java): `src/main/java/org/sideloader/ProgramOverview.java`
- [Similar programs](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SimilarAppsFinder.java): `src/main/java/org/sideloader/SimilarAppsFinder.java`

### Package management

- [Installed library](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/InstalledAndUpdatesPanel.java): `src/main/java/org/sideloader/InstalledAndUpdatesPanel.java`
- [Local package mode](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/LocalPackageInstaller.java): `src/main/java/org/sideloader/LocalPackageInstaller.java`
- [Package download](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramDownloadWorker.java): `src/main/java/org/sideloader/ProgramDownloadWorker.java`
- [Install and remove](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramCommandWorker.java): `src/main/java/org/sideloader/ProgramCommandWorker.java`

### Repositories and settings

- [Repository manager](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/RepoManager.java): `src/main/java/org/sideloader/RepoManager.java`
- [Store settings](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramSettingsGUI.java): `src/main/java/org/sideloader/ProgramSettingsGUI.java`
- [Settings model](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/ProgramSettings.java): `src/main/java/org/sideloader/ProgramSettings.java`

### Runtime services

- [Repository database access](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/DBOperator.java): `src/main/java/org/sideloader/DBOperator.java`
- [Installed-package records](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/SnapSideloaderStore.java): `src/main/java/org/sideloader/SnapSideloaderStore.java`
- [System command runner](https://github.com/thetechdog/the-snap-sideloader/blob/master/src/main/java/org/sideloader/CommandOutputter.java): `src/main/java/org/sideloader/CommandOutputter.java`

### Other components

- **User**
- **Third-party repository**
- **Snap system**
- **Local snap file**

## Connections

- User → Application startup: launches (evidence: `README.md`)
- Application startup → Store interface: opens (evidence: `src/main/java/org/sideloader/Main.java`)
- User → Store interface: browses (evidence: `README.md`)
- Store interface → Store homepage: loads homepage (evidence: `src/main/java/org/sideloader/SnapSideloaderStore.java`)
- Store homepage → Repository database access: queries (evidence: `src/main/java/org/sideloader/FeaturedAppsLoader.java`)
- Store interface → Catalog search: starts search (evidence: `src/main/java/org/sideloader/SnapSideloaderStore.java`)
- Catalog search → Repository database access: queries (evidence: `src/main/java/org/sideloader/SearchResultsFetcher.java`)
- Catalog search → Search results: creates results (evidence: `src/main/java/org/sideloader/SearchResultsFetcher.java`)
- Search results → Store interface: opens selection (evidence: `src/main/java/org/sideloader/SearchResultsPanel.java`)
- Store interface → Program details: loads selection (evidence: `src/main/java/org/sideloader/SnapSideloaderStore.java`)
- Program details → Similar programs: requests suggestions (evidence: `src/main/java/org/sideloader/ProgramOverviewLoader.java`)
- Similar programs → Repository database access: queries (evidence: `src/main/java/org/sideloader/SimilarAppsFinder.java`)
- Program details → Package download: starts download (evidence: `src/main/java/org/sideloader/ProgramOverview.java`)
- Package download → Install and remove: starts install (evidence: `src/main/java/org/sideloader/ProgramDownloadWorker.java`)
- Package download → System command runner: checks hash (evidence: `src/main/java/org/sideloader/ProgramDownloadWorker.java`)
- Program details → Install and remove: requests removal (evidence: `src/main/java/org/sideloader/ProgramOverview.java`)
- Install and remove → System command runner: executes command (evidence: `src/main/java/org/sideloader/ProgramCommandWorker.java`)
- Install and remove → Snap system: manages packages (evidence: `README.md`)
- Store interface → Installed library: opens library (evidence: `src/main/java/org/sideloader/SnapSideloaderStore.java`)
- Installed library → Repository database access: checks updates (evidence: `src/main/java/org/sideloader/InstalledAndUpdatesPanelLoader.java`)
- User → Local package mode: opens local mode (evidence: `README.md`)
- Local package mode → Local snap file: opens package (evidence: `README.md`)
- Local package mode → System command runner: runs package action (evidence: `src/main/java/org/sideloader/LocalPackageInstaller.java`)
- Local package mode → Snap system: installs or removes (evidence: `README.md`)
- User → Repository manager: manages repositories (evidence: `README.md`)
- Repository manager → Third-party repository: downloads database (evidence: `src/main/java/org/sideloader/RepoManager.java`)
- Repository manager → Store interface: saves repository list (evidence: `src/main/java/org/sideloader/RepoManager.java`)
- Third-party repository → Repository database access: supplies catalog (evidence: `README.md`)
- User → Store settings: changes preferences (evidence: `README.md`)
- Store settings → Settings model: updates (evidence: `src/main/java/org/sideloader/ProgramSettingsGUI.java`)
- Store settings → Repository manager: opens manager (evidence: `src/main/java/org/sideloader/ProgramSettingsGUI.java`)
- Store interface → Repository database access: opens current catalog (evidence: `src/main/java/org/sideloader/SnapSideloaderStore.java`)
- Store interface → Installed-package records: reads installed records (evidence: `src/main/java/org/sideloader/SnapSideloaderStore.java`)
- Install and remove → Installed-package records: updates installed records
