Ahmed Abdelaziz
Back to projects
EasyDownload screenshot

EasyDownload

A local-first desktop media downloader built with Electron, React, and TypeScript. Paste a video URL, pick a quality, and download directly to your device — with queue, pause/resume, conversion, and history, powered by bundled yt-dlp and FFmpeg.

electronreacttypescriptyt-dlpffmpegzodelectron-vitevitest

August 2026

A clean desktop app for saving online videos and audio to your device — no cloud, no account, no setup.

Paste a link, see the available qualities in plain language, pick one, and watch the download finish with pause, retry, conversion — and history that survives restarts.


Overview

EasyDownload is a cross-platform desktop app (Windows, macOS, Linux) for keeping media offline. You paste a video link, the app shows title, thumbnail, and qualities like "1080p MP4", you choose one, and the file lands in your chosen folder.

Everything runs on your device. The heavy lifting — downloading and media processing — uses bundled yt-dlp and FFmpeg, so you never install or configure them.

The Problem

Saving videos is awkward for most people:

  • Web download sites upload your link to a third-party server, limit size, and show ads.
  • Command-line tools are powerful but intimidating for non-technical users.
  • Manual downloads have no queue, no progress you can trust, and no history.

The Solution

EasyDownload puts a friendly interface on proven tools and manages the whole flow:

  1. Inspect — shows title, thumbnail, duration, and every quality as a clear choice.
  2. Download — queue with live progress (percent, speed, ETA), pause/resume, cancel, retry.
  3. Organize — day-grouped history (Today / Yesterday / date), inspection memory, per-item actions.
  4. Process — convert to MP4/MKV or extract audio (MP3/AAC/Opus/FLAC) after download.

Local-first

No cloud, no database — just small JSON files on your computer.

Key Features

  • Inspect before you commit — see every format labeled like "720p MP4" before spending bandwidth.
  • Queue you control — run 1–10 downloads at once; pausing one starts the next.
  • Retry that remembers — failed downloads can be retried with their original settings, even after an app restart.
  • No wasted bytes — duplicate downloads of the same video + quality are rejected; partial files are cleaned up on cancel.
  • Convert & extract — turn a finished video into MP4/MKV or pull its audio.
  • History that remembers — completed, failed, and cancelled items survive restarts; delete one or clear all.

User Experience

Home → Downloads → History → Settings, inside a collapsible sidebar.

Each download shows a clear badge (queued, downloading, paused, completed, …) and section counts update live. Missing thumbnails show a placeholder, empty sections show a helpful message.

Architecture at a Glance

Three small layers, one rule: the interface never touches the file system.

  • Interface — React UI, nothing else.
  • Bridge — typed window.mediaDownloader API, the only door to the core.
  • Core — queue, inspection, conversions, and file handling; talks to yt-dlp/FFmpeg via spawn(args[]).

See Design Docs → Architecture for the full diagram and data flow.

Tech Stack

TechRole
Electron + React + TypeScriptDesktop shell and UI
yt-dlp + FFmpegInspection, download, conversion (bundled)
zodValidate every IPC payload
electron-vite, VitestBuild and tests
JSON filesHistory and settings in the OS user-data folder

371 tests (unit, integration, renderer) run offline with mocked executables.

What This Project Shows

Product sense — turns a common, privacy-sensitive task into one screen: no ads, no server, just "paste → pick → done."

Engineering care — a small, auditable bridge between UI and OS, a state-machine download manager with race-condition guards and regression tests, safe argument arrays, self-healing persistence, and honest documentation of what's not built (playlists, auto-retry, sandbox hardening).

Dive deeper

Open Design Docs above for the full picture: Architecture, Functional Requirements, and Architecture Decisions — kept short, visual, and verified against the source code.

  • Docs: docs/REQUIREMENTS.md, docs/ARCHITECTURE.md, docs/ADR/ in the repository
  • No live demo — this is a desktop app by design