# marcr11/jasd architecture

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

- Interactive diagram: https://gitdiagram.com/marcr11/jasd
- Repository: https://github.com/marcr11/jasd

## Overview

JASD is an Electron desktop downloader. The main workflow is entering a media URL, fetching its available media or playlist information, choosing download options, then managing queued downloads and their progress until files are saved. The README also documents parallel downloads, audio-only and video formats, cookies, output-folder controls, localization, and update support. Some renderer services and IPC handlers were only partially sampled, so the graph shows documented capabilities but omits uncertain internal wiring.

Main entry points: [`src/browser/preload.js`](https://github.com/marcr11/jasd/blob/main/src/browser/preload.js) (IPC bridge), [`src/js/app.js`](https://github.com/marcr11/jasd/blob/main/src/js/app.js) (Renderer entry), [`src/js/services/settings.js`](https://github.com/marcr11/jasd/blob/main/src/js/services/settings.js) (Settings interface), [`src/browser/ipc/download.js`](https://github.com/marcr11/jasd/blob/main/src/browser/ipc/download.js) (Download handler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_renderer["Desktop interface"]
  node_window["App window<br/>[index.html]"]
  node_app["Renderer entry<br/>[app.js]"]
  node_ui_components["Views and dialogs<br/>[ui.js]"]
  node_themes["Themes<br/>[themes.js]"]
  node_i18n["Localization<br/>[i18n.js]"]
  node_locales["Language catalogs"]
end

subgraph group_download["Download workflow"]
  node_download_ui["Download controls<br/>[download.js]"]
  node_queue["Download queue<br/>[queue.js]"]
  node_download_ipc["Download handler<br/>[download.js]"]
  node_ytdlp["yt-dlp resolver<br/>[ytdlp.js]"]
end

subgraph group_main["Electron services"]
  node_bridge["IPC bridge<br/>[preload.js]"]
  node_main_process["Main process<br/>[index.js]"]
end

subgraph group_support["Preferences and support"]
  node_data_ipc["Data handlers<br/>[data.js]"]
  node_tools_ipc["Tools and updates<br/>[tools.js]"]
  node_settings_ui["Settings interface<br/>[settings.js]"]
  node_storage["JSON storage<br/>[storage.js]"]
  node_user_data[("App data files")]
end

node_user(("User"))
node_media_sites(("Media sites"))
node_media_files[("Downloaded files")]
node_ffmpeg["FFmpeg"]
node_github(("GitHub releases"))

node_user -->|"uses"| node_window
node_app -->|"renders"| node_window
node_app -->|"loads preferences"| node_bridge
node_app -->|"wires controls"| node_download_ui
node_app -->|"renders queue"| node_queue
node_app -->|"sets up"| node_settings_ui
node_app -->|"applies theme"| node_themes
node_app -->|"applies language"| node_i18n
node_download_ui -->|"requests media actions"| node_bridge
node_download_ui -->|"adds downloads"| node_queue
node_queue -->|"starts and cancels"| node_bridge
node_bridge -->|"dispatches downloads"| node_download_ipc
node_bridge -->|"dispatches data requests"| node_data_ipc
node_bridge -->|"dispatches tool requests"| node_tools_ipc
node_main_process -->|"registers handlers"| node_download_ipc
node_main_process -->|"registers handlers"| node_data_ipc
node_main_process -->|"registers handlers"| node_tools_ipc
node_download_ipc -->|"locates executable"| node_ytdlp
node_download_ipc -->|"fetches and downloads"| node_media_sites
node_download_ipc -->|"saves output"| node_media_files
node_ytdlp -.->|"uses for processing"| node_ffmpeg
node_data_ipc -->|"reads and writes"| node_storage
node_storage -->|"persists settings and queue"| node_user_data
node_tools_ipc -->|"checks releases"| node_github
node_tools_ipc -.->|"downloads updates"| node_github
node_settings_ui -->|"manages preferences"| node_bridge
node_settings_ui -->|"changes appearance"| node_themes
node_settings_ui -->|"selects language"| node_i18n
node_i18n -->|"looks up strings"| node_locales
node_settings_ui -->|"checks tools and updates"| node_tools_ipc
node_settings_ui -->|"manages cookies"| node_bridge

click node_window "https://github.com/marcr11/jasd/blob/main/src/index.html"
click node_app "https://github.com/marcr11/jasd/blob/main/src/js/app.js"
click node_download_ui "https://github.com/marcr11/jasd/blob/main/src/js/services/download.js"
click node_queue "https://github.com/marcr11/jasd/blob/main/src/js/services/queue.js"
click node_bridge "https://github.com/marcr11/jasd/blob/main/src/browser/preload.js"
click node_main_process "https://github.com/marcr11/jasd/blob/main/src/browser/index.js"
click node_download_ipc "https://github.com/marcr11/jasd/blob/main/src/browser/ipc/download.js"
click node_data_ipc "https://github.com/marcr11/jasd/blob/main/src/browser/ipc/data.js"
click node_tools_ipc "https://github.com/marcr11/jasd/blob/main/src/browser/ipc/tools.js"
click node_ytdlp "https://github.com/marcr11/jasd/blob/main/src/browser/utils/ytdlp.js"
click node_settings_ui "https://github.com/marcr11/jasd/blob/main/src/js/services/settings.js"
click node_ui_components "https://github.com/marcr11/jasd/blob/main/src/js/components/ui.js"
click node_themes "https://github.com/marcr11/jasd/blob/main/src/js/lib/themes.js"
click node_i18n "https://github.com/marcr11/jasd/blob/main/src/js/lib/i18n.js"
click node_locales "https://github.com/marcr11/jasd/tree/main/src/js/lib/locales"
click node_storage "https://github.com/marcr11/jasd/blob/main/src/browser/utils/storage.js"

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_window,node_app,node_ui_components,node_themes,node_i18n,node_locales,node_user toneBlue
class node_download_ui,node_queue,node_download_ipc,node_ytdlp,node_media_files toneAmber
class node_bridge,node_main_process toneMint
class node_data_ipc,node_tools_ipc,node_settings_ui,node_storage,node_user_data toneRose
class node_media_sites,node_ffmpeg,node_github toneIndigo
```

## Components

### Desktop interface

- [App window](https://github.com/marcr11/jasd/blob/main/src/index.html): `src/index.html`
- [Renderer entry](https://github.com/marcr11/jasd/blob/main/src/js/app.js): `src/js/app.js`
- [Views and dialogs](https://github.com/marcr11/jasd/blob/main/src/js/components/ui.js): `src/js/components/ui.js`
- [Themes](https://github.com/marcr11/jasd/blob/main/src/js/lib/themes.js): `src/js/lib/themes.js`
- [Localization](https://github.com/marcr11/jasd/blob/main/src/js/lib/i18n.js): `src/js/lib/i18n.js`
- [Language catalogs](https://github.com/marcr11/jasd/tree/main/src/js/lib/locales): `src/js/lib/locales`

### Download workflow

- [Download controls](https://github.com/marcr11/jasd/blob/main/src/js/services/download.js): `src/js/services/download.js`
- [Download queue](https://github.com/marcr11/jasd/blob/main/src/js/services/queue.js): `src/js/services/queue.js`
- [Download handler](https://github.com/marcr11/jasd/blob/main/src/browser/ipc/download.js): `src/browser/ipc/download.js`
- [yt-dlp resolver](https://github.com/marcr11/jasd/blob/main/src/browser/utils/ytdlp.js): `src/browser/utils/ytdlp.js`

### Electron services

- [IPC bridge](https://github.com/marcr11/jasd/blob/main/src/browser/preload.js): `src/browser/preload.js`
- [Main process](https://github.com/marcr11/jasd/blob/main/src/browser/index.js): `src/browser/index.js`

### Preferences and support

- [Data handlers](https://github.com/marcr11/jasd/blob/main/src/browser/ipc/data.js): `src/browser/ipc/data.js`
- [Tools and updates](https://github.com/marcr11/jasd/blob/main/src/browser/ipc/tools.js): `src/browser/ipc/tools.js`
- [Settings interface](https://github.com/marcr11/jasd/blob/main/src/js/services/settings.js): `src/js/services/settings.js`
- [JSON storage](https://github.com/marcr11/jasd/blob/main/src/browser/utils/storage.js): `src/browser/utils/storage.js`
- **App data files**

### Other components

- **User**
- **Media sites**
- **Downloaded files**
- **FFmpeg**
- **GitHub releases**

## Connections

- User → App window: uses
- Renderer entry → App window: renders
- Renderer entry → IPC bridge: loads preferences
- Renderer entry → Download controls: wires controls
- Renderer entry → Download queue: renders queue
- Renderer entry → Settings interface: sets up
- Renderer entry → Themes: applies theme
- Renderer entry → Localization: applies language
- Download controls → IPC bridge: requests media actions
- Download controls → Download queue: adds downloads
- Download queue → IPC bridge: starts and cancels
- IPC bridge → Download handler: dispatches downloads
- IPC bridge → Data handlers: dispatches data requests
- IPC bridge → Tools and updates: dispatches tool requests
- Main process → Download handler: registers handlers
- Main process → Data handlers: registers handlers
- Main process → Tools and updates: registers handlers
- Download handler → yt-dlp resolver: locates executable
- Download handler → Media sites: fetches and downloads
- Download handler → Downloaded files: saves output
- yt-dlp resolver → FFmpeg: uses for processing
- Data handlers → JSON storage: reads and writes
- JSON storage → App data files: persists settings and queue
- Tools and updates → GitHub releases: checks releases
- Tools and updates → GitHub releases: downloads updates
- Settings interface → IPC bridge: manages preferences
- Settings interface → Themes: changes appearance
- Settings interface → Localization: selects language
- Localization → Language catalogs: looks up strings
- Settings interface → Tools and updates: checks tools and updates
- Settings interface → IPC bridge: manages cookies
