Skip to content

Repository files navigation

FetchDock

English | 简体中文 | 한국어 | 日本語

A local-first desktop downloader and study workspace for videos, courses, music, books, browser captures, and plugin workflows.

FetchDock is for people whose learning and media workflow is split across browser tabs, course platforms, chat channels, download folders, and command-line tools. It brings capture, queueing, metadata, local libraries, and review tools into one desktop app while keeping user data on the local machine by default.

Status: FetchDock is in active development. The repository contains a working local desktop milestone, but some integrations, packaging gates, and real-service validation matrices are still pending.

Why FetchDock

Downloading is rarely just downloading.

  • Links, cookies, filenames, subtitles, metadata, and output folders often end up managed in different tools.
  • yt-dlp, FFmpeg, and gallery-dl are powerful, but their options, dependencies, and logs are easier to trust when they are visible in one local workspace.
  • Courses, videos, PDFs, music, notes, and browser captures usually need organization after the file lands.
  • Private media workflows should not require uploading links, file paths, cookies, diagnostics, or learning history to a remote service.

FetchDock aims to turn that scattered workflow into a local desktop control center.

Highlights

  • Unified capture: paste URLs, import batches, or send page and media candidates from the browser extension bridge.
  • Local download queue: track queued, active, paused, completed, failed, canceled, and archived tasks with logs, progress, retry metadata, and output actions.
  • Media toolchain: inspect metadata, thumbnails, subtitles, chapters, comments, live chat sidecars, FFmpeg clips, waveform peaks, and subtitle workshop data.
  • Dependency control: review tool status, manual paths, managed Windows installs for supported tools, and clear failure messages.
  • Cookie workspace: manage local Cookie buckets, imports, URL matching, health checks, and redacted task logs.
  • Learning libraries: keep local course manifests, reading previews, music scans, timestamped notes, Pomodoro sessions, daily goals, and graph summaries together.
  • Browser handoff: use the Chrome/Firefox extension scaffold with a local loopback bridge and blocked-host settings.
  • Plugin-ready shell: install and review local plugin manifests, settings, data folders, navigation entries, preflight checks, and activity logs.

Current Build

The current repository contains a Tauri 2 + Svelte desktop app with Rust backend commands, SQLite-backed local state, a browser extension scaffold, packaging scripts, and engineering docs.

Working local subsets include:

  • Direct-file HTTP(S) downloads with .part resume behavior, rate limiting, proxy options, retry metadata, logs, and output actions.
  • yt-dlp media task execution with quality, audio extraction, clip ranges, subtitle options, SponsorBlock flags, metadata, Cookie bucket support, and custom argument planning.
  • gallery-dl image/gallery task routing into task-scoped output folders.
  • Platform and route classification metadata for common video, social, gallery, direct-file, playlist, profile, live, clip, and webpage intents.
  • Settings sections for downloads, network, cookies, browser extension, channels, plugins, dependencies, appearance, advanced review tools, and scoped AI/Whisper configuration.
  • Local course, Telegram, Bilibili, channel, torrent/magnet, P2P, reading, music, and learning data stores with metadata-first queueing and review actions.
  • CLI commands for local task management, settings import/export, diagnostics, platform matrices, metadata tools, cookies, channels, courses, library, music, plugins, and release evidence.

Still pending:

  • Full release packaging, signing, final license/notice review, and packaged-app smoke tests.
  • Real-service validation matrices for every platform and account state.
  • Full browser-store extension validation.
  • Telegram MTProto login, sync, and media download.
  • Full torrent/magnet engine and seeding.
  • Complete reader/player experiences beyond current local previews.
  • Dynamic plugin host loading, signing, isolation, and remote marketplace policy.
  • Full test, build, clippy, and release gate completion.

Development

Requirements:

  • Node.js 24 or compatible modern Node.js.
  • npm 11 or compatible npm.
  • Rust stable toolchain.
  • Tauri 2 prerequisites for your platform.
  • On Windows, Visual Studio Build Tools with the Visual C++ toolchain must provide cl.exe/link.exe; this workspace can also use the locally extracted Windows SDK path described in docs/BUILD.md.

Fast feature-work checks:

npm run verify:fast
npm run typecheck
$env:PATH = "$env:USERPROFILE\.cargo\bin;$env:PATH"
cargo fmt --manifest-path src-tauri/Cargo.toml
cargo check --manifest-path src-tauri/Cargo.toml
npm run verify:project-boundary
npm run verify:release-packaging

Optional real-media smoke, kept out of the regular fast path:

npm run verify:media-clip -- -FfmpegPath "E:\Software\FFMPEG\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe"

Full Windows gate for final verification:

npm run verify:windows -- -WindowsSdkRoot "E:\Data\Own\Entrepreneurship\FetchDock\build-tools\winsdk-26100-extract\Windows Kits\10"
.\scripts\verify-windows.ps1 -WindowsSdkRoot "E:\Data\Own\Entrepreneurship\FetchDock\build-tools\winsdk-26100-extract\Windows Kits\10"

Portable package manifest check after a successful Windows build/staging:

npm run package:windows-portable
npm run verify:windows-portable

This validates the staged portable marker, data folders, manifest, SHA-256 rows, and byte counts. It is not a signing or runtime smoke substitute.

Browser Extension

The unpacked extension lives in browser-extension/.

Local extension checks and review package:

npm run verify:browser-extension
npm run package:browser-extension
fetchdock extension-package-summary --human
fetchdock extension-release-safety --human
fetchdock export-extension-release-safety ./extension-release-safety.json
  • Chrome: open Extensions, enable Developer mode, and load browser-extension/ as an unpacked extension.
  • Firefox: load the same folder temporarily from about:debugging.
  • The extension first tries POST http://127.0.0.1:17654/v1/extension/download for page, link, and media handoff.
  • If the bridge is unavailable and fallback is enabled, it opens fetchdock://capture?url=...&kind=....

Pairing automation, end-to-end browser validation, authorization storage hardening, HLS grouping matrix checks, store signing, and release submission are not complete yet.

Documentation

About

Local-first desktop downloader and study workspace for videos, courses, music, books, browser handoff, and plugins.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages