Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,19 @@ cli/ # JVM CLI entry point

Planned features not yet implemented:

1. **Web App** - Browser-based download manager UI
2. **Torrent Support** - BitTorrent protocol as a pluggable `DownloadSource`
3. **Media Downloads** - Web media extraction (like yt-dlp) as a pluggable `DownloadSource`
1. **FTP Support** - FTP/FTPS protocol as a pluggable `DownloadSource`
2. **BitTorrent Support** - BitTorrent protocol as a pluggable `DownloadSource`, with
segmented piece downloading and peer-to-peer transfers
3. **Magnet Link Support** - Magnet URI scheme for starting BitTorrent downloads without
a .torrent file (DHT/tracker-based metadata resolution)
4. **HLS Support** - HTTP Live Streaming (HLS) as a pluggable `DownloadSource`, downloading
and merging `.m3u8` playlist segments into a single media file
5. **Resource Sniffer** - Detect and extract downloadable resources (media, files) from
web pages by analyzing network requests, HTML, and embedded players
6. **Media Downloads** - Web media extraction (like yt-dlp) as a pluggable `DownloadSource`,
supporting various media sites and extractors
7. **Browser Extension** - Browser extension for intercepting and managing downloads
directly from the browser, integrating with the KDown daemon server
8. **AI Integration** - MCP server exposing KDown capabilities as tools for AI agents,
and skill-based automation (e.g., smart resource discovery, auto-categorization,
intelligent scheduling based on content type)
43 changes: 28 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,39 @@
[![JVM](https://img.shields.io/badge/JVM-11+-DB380E.svg?logo=openjdk&logoColor=white)](https://openjdk.org)
[![Built with Claude Code](https://img.shields.io/badge/Built_with-Claude_Code-6b48ff.svg?logo=anthropic&logoColor=white)](https://claude.ai/claude-code)

A Kotlin Multiplatform download manager with segmented downloads, pause/resume, queue management, speed limiting, and scheduling -- for Android, JVM, iOS, and WebAssembly.
A full-featured Kotlin Multiplatform download manager β€” run locally, remotely, or embedded in your app. Supports Android, JVM, iOS, and WebAssembly.

- **Embed it** β€” Add downloads to your Android, iOS, or Desktop app with a simple API
- **Run it as a daemon** β€” Self-hosted download server with REST API and real-time SSE events
- **Control it remotely** β€” Manage a daemon from any client (mobile app, web UI, CLI, or AI agent)
- **Extend it** β€” Pluggable architecture for custom protocols (FTP, BitTorrent, HLS, and more on the roadmap)

> **WIP:** This project is under active development. APIs may change. Contributions and feedback are welcome!

## Features

- **Multi-platform** -- Android, iOS, JVM/Desktop, and WebAssembly (WasmJs)
- **Segmented downloads** -- Split files into N concurrent segments using HTTP Range requests
- **Pause / Resume** -- True resume using byte ranges, with ETag/Last-Modified validation
- **Queue management** -- Priority-based queue with configurable concurrency limits and per-host throttling
- **Speed limiting** -- Global and per-task bandwidth throttling via token-bucket algorithm
- **Scheduling** -- Start downloads at a specific time, after a delay, or when conditions are met
- **Download conditions** -- User-defined conditions (e.g., WiFi-only) that gate download start
- **Pluggable sources** -- Extensible `DownloadSource` interface for custom protocols (HTTP built-in)
- **Persistent resume** -- Task metadata survives app restarts via pluggable `TaskStore`
- **Progress tracking** -- Aggregated progress across segments via `StateFlow`, with download speed
- **Retry with backoff** -- Configurable exponential backoff for transient errors
- **Daemon server** -- Run KDown as a background service with REST API and SSE events
- **Remote control** -- Control a daemon server from any client via `RemoteKDown`
- **Pluggable HTTP engine** -- Ships with Ktor; bring your own `HttpEngine` if needed
- **Multi-platform** `βœ…` -- Android, iOS, JVM/Desktop, and WebAssembly (WasmJs)
- **Segmented downloads** `βœ…` -- Split files into N concurrent segments using HTTP Range requests
- **Pause / Resume** `βœ…` -- True resume using byte ranges, with ETag/Last-Modified validation
- **Queue management** `βœ…` -- Priority-based queue with configurable concurrency limits and per-host throttling
- **Speed limiting** `βœ…` -- Global and per-task bandwidth throttling via token-bucket algorithm
- **Scheduling** `βœ…` -- Start downloads at a specific time, after a delay, or when conditions are met
- **Download conditions** `βœ…` -- User-defined conditions (e.g., WiFi-only) that gate download start
- **Pluggable sources** `βœ…` -- Extensible `DownloadSource` interface for custom protocols (HTTP built-in)
- **Persistent resume** `βœ…` -- Task metadata survives app restarts via pluggable `TaskStore`
- **Progress tracking** `βœ…` -- Aggregated progress across segments via `StateFlow`, with download speed
- **Retry with backoff** `βœ…` -- Configurable exponential backoff for transient errors
- **Daemon server** `βœ…` -- Run KDown as a background service with REST API and SSE events
- **Remote control** `βœ…` -- Control a daemon server from any client via `RemoteKDown`
- **Pluggable HTTP engine** `βœ…` -- Ships with Ktor; bring your own `HttpEngine` if needed
- **FTP/FTPS** `πŸ”œ` -- FTP/FTPS protocol as a pluggable download source
- **BitTorrent** `πŸ”œ` -- Segmented piece downloading and peer-to-peer transfers
- **Magnet links** `πŸ”œ` -- Magnet URI scheme with DHT/tracker-based metadata resolution
- **HLS streaming** `πŸ”œ` -- Download and merge `.m3u8` playlist segments
- **Resource sniffer** `πŸ”œ` -- Detect downloadable resources from web pages
- **Media downloads** `πŸ”œ` -- Web media extraction (like yt-dlp) with pluggable extractors
- **Browser extension** `πŸ”œ` -- Intercept and manage downloads via the daemon server
- **AI integration** `πŸ”œ` -- MCP server for AI agent tool access and skill-based automation

## Quick Start

Expand Down
Loading