# shixinhuang99/czkawka-tauri architecture

> Architecture diagram of the GitHub repository shixinhuang99/czkawka-tauri, 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/shixinhuang99/czkawka-tauri
- Repository: https://github.com/shixinhuang99/czkawka-tauri

## Overview

CzkawkaTauri is a desktop frontend for finding and managing unwanted or similar files. Users configure scan directories and options, run a selected scan, review results, then perform file operations or save results. The backend exposes scan and action commands through Tauri and formats scan progress; the UI provides the workspace and result-oriented views. The README documents the product scope, while some UI-to-command wiring and unsampled scan implementations are not shown, so those links are omitted.

Main entry points: [`tauri/src/main.rs`](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/main.rs) (Command router), [`ui/src/app.tsx`](https://github.com/shixinhuang99/czkawka-tauri/blob/main/ui/src/app.tsx) (App workspace), [`ui/src/main.tsx`](https://github.com/shixinhuang99/czkawka-tauri/blob/main/ui/src/main.tsx) (UI bootstrap), [`tauri/src/settings.rs`](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/settings.rs) (Scan settings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_frontend["App workspace<br/>[app.tsx]"]
  node_frontend_entry["UI bootstrap<br/>[main.tsx]"]
end

subgraph group_runtime["Tauri runtime"]
  node_settings["Scan settings<br/>[settings.rs]"]
  node_progress["Progress formatter<br/>[progress.rs]"]
  node_state["App scan state<br/>[state.rs]"]
  node_command_router["Command router<br/>[main.rs]"]
end

subgraph group_scans["File scans"]
  node_duplicate_scan["Duplicate scan<br/>[duplicate_files.rs]"]
  node_music_scan["Music similarity"]
  node_image_scan["Similar images<br/>[similar_images.rs]"]
  node_video_scan["Similar videos<br/>[similar_videos.rs]"]
  node_broken_scan["Broken files<br/>[broken_files.rs]"]
  node_empty_folders["Empty folders<br/>[empty_folders.rs]"]
  node_empty_files["Empty files<br/>[empty_files.rs]"]
  node_big_files["Big files<br/>[big_files.rs]"]
  node_temporary_files["Temporary files<br/>[temporary_files.rs]"]
  node_invalid_symlinks["Invalid symlinks"]
  node_bad_extensions["Bad extensions<br/>[bad_extensions.rs]"]
end

subgraph group_actions["File actions"]
  node_delete["Delete files<br/>[delete_files.rs]"]
  node_move["Move files<br/>[move_files.rs]"]
  node_save["Save results<br/>[save_result.rs]"]
  node_rename["Rename extensions<br/>[rename_ext.rs]"]
end

node_user(("Desktop user"))

node_user -->|"uses"| node_frontend
node_frontend_entry -->|"renders"| node_frontend
node_command_router -->|"dispatches"| node_duplicate_scan
node_command_router -->|"dispatches"| node_music_scan
node_command_router -->|"dispatches"| node_image_scan
node_command_router -->|"dispatches"| node_video_scan
node_command_router -->|"dispatches"| node_broken_scan
node_command_router -->|"dispatches"| node_empty_folders
node_command_router -->|"dispatches"| node_empty_files
node_command_router -->|"dispatches"| node_big_files
node_command_router -->|"dispatches"| node_temporary_files
node_command_router -->|"dispatches"| node_invalid_symlinks
node_command_router -->|"dispatches"| node_bad_extensions
node_command_router -->|"dispatches"| node_delete
node_command_router -->|"dispatches"| node_move
node_command_router -->|"dispatches"| node_save
node_command_router -->|"dispatches"| node_rename
node_command_router -->|"formats progress"| node_progress
node_command_router -->|"manages state"| node_state
node_command_router -->|"provides defaults"| node_settings

click node_frontend "https://github.com/shixinhuang99/czkawka-tauri/blob/main/ui/src/app.tsx"
click node_frontend_entry "https://github.com/shixinhuang99/czkawka-tauri/blob/main/ui/src/main.tsx"
click node_settings "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/settings.rs"
click node_progress "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/progress.rs"
click node_state "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/state.rs"
click node_duplicate_scan "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/duplicate_files.rs"
click node_music_scan "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/music_duplicates.rs"
click node_image_scan "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/similar_images.rs"
click node_video_scan "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/similar_videos.rs"
click node_broken_scan "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/broken_files.rs"
click node_empty_folders "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/empty_folders.rs"
click node_empty_files "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/empty_files.rs"
click node_big_files "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/big_files.rs"
click node_temporary_files "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/temporary_files.rs"
click node_invalid_symlinks "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/invalid_symlinks.rs"
click node_bad_extensions "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/bad_extensions.rs"
click node_delete "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/delete_files.rs"
click node_move "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/move_files.rs"
click node_save "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/save_result.rs"
click node_rename "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/rename_ext.rs"
click node_command_router "https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/main.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_frontend,node_frontend_entry,node_user toneBlue
class node_settings,node_progress,node_state,node_command_router toneAmber
class node_duplicate_scan,node_music_scan,node_image_scan,node_video_scan,node_broken_scan,node_empty_folders,node_empty_files,node_big_files,node_temporary_files,node_invalid_symlinks,node_bad_extensions toneMint
class node_delete,node_move,node_save,node_rename toneRose
```

## Components

### Desktop interface

- [App workspace](https://github.com/shixinhuang99/czkawka-tauri/blob/main/ui/src/app.tsx): `ui/src/app.tsx`
- [UI bootstrap](https://github.com/shixinhuang99/czkawka-tauri/blob/main/ui/src/main.tsx): `ui/src/main.tsx`

### Tauri runtime

- [Scan settings](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/settings.rs): `tauri/src/settings.rs`
- [Progress formatter](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/progress.rs): `tauri/src/progress.rs`
- [App scan state](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/state.rs): `tauri/src/state.rs`
- [Command router](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/main.rs): `tauri/src/main.rs`

### File scans

- [Duplicate scan](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/duplicate_files.rs): `tauri/src/duplicate_files.rs`
- [Music similarity](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/music_duplicates.rs): `tauri/src/music_duplicates.rs`
- [Similar images](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/similar_images.rs): `tauri/src/similar_images.rs`
- [Similar videos](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/similar_videos.rs): `tauri/src/similar_videos.rs`
- [Broken files](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/broken_files.rs): `tauri/src/broken_files.rs`
- [Empty folders](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/empty_folders.rs): `tauri/src/empty_folders.rs`
- [Empty files](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/empty_files.rs): `tauri/src/empty_files.rs`
- [Big files](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/big_files.rs): `tauri/src/big_files.rs`
- [Temporary files](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/temporary_files.rs): `tauri/src/temporary_files.rs`
- [Invalid symlinks](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/invalid_symlinks.rs): `tauri/src/invalid_symlinks.rs`
- [Bad extensions](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/bad_extensions.rs): `tauri/src/bad_extensions.rs`

### File actions

- [Delete files](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/delete_files.rs): `tauri/src/delete_files.rs`
- [Move files](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/move_files.rs): `tauri/src/move_files.rs`
- [Save results](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/save_result.rs): `tauri/src/save_result.rs`
- [Rename extensions](https://github.com/shixinhuang99/czkawka-tauri/blob/main/tauri/src/rename_ext.rs): `tauri/src/rename_ext.rs`

### Other components

- **Desktop user**

## Connections

- Desktop user → App workspace: uses (evidence: `README.md`)
- UI bootstrap → App workspace: renders (evidence: `ui/src/main.tsx`)
- Command router → Duplicate scan: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Music similarity: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Similar images: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Similar videos: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Broken files: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Empty folders: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Empty files: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Big files: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Temporary files: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Invalid symlinks: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Bad extensions: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Delete files: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Move files: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Save results: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Rename extensions: dispatches (evidence: `tauri/src/main.rs`)
- Command router → Progress formatter: formats progress (evidence: `tauri/src/main.rs`)
- Command router → App scan state: manages state (evidence: `tauri/src/main.rs`)
- Command router → Scan settings: provides defaults (evidence: `tauri/src/main.rs`)
