MangoFetch logo

mangofetch (TUI / Core)

Fast, Tropical, Pure Rust.
The core engine SDK and interactive Terminal User Interface (TUI) frontend of the mangoSuite.

Crates.io License GPL-3.0 Built with Rust Async Tokio

---

MangoFetch in action

___ - [Overview](#overview) - [The mangoSuite](#the-mangosuite) - [Cross-Platform Compatibility](#cross-platform-compatibility) - [Using as a Rust Library (mangofetch-core)](#using-as-a-rust-library-mangofetch-core) - [TUI Installation & Run](#tui-installation--run) - [Via Cargo (Recommended)](#via-cargo-recommended) - [From Source](#from-source) - [Running the TUI](#running-the-tui) - [Technical Architecture](#technical-architecture) - [How the Engine Works](#how-the-engine-works) - [Command Reference](#command-reference) - [Acknowledgments](#acknowledgments) - [Contributing](#contributing) - [License](#license) ## Overview MangoFetch downloads media quickly across multiple platforms. It provides granular control over video and audio formats without complex configuration. The **`mangofetch-core`** engine uses Tokio and Reqwest to handle YouTube, Torrents, SoundCloud, and Instagram. It wraps `yt-dlp` and `ffmpeg` to support over 1000 platforms. This repository contains: 1. **`mangofetch` (TUI)**: The interactive terminal frontend built with `ratatui`. Launches by default and supports mouse interaction, modal dialogs, and multiple color palettes. 2. **`mangofetch-core`**: The headless download engine. 3. **`mangofetch-plugin-sdk`**: The plugin SDK for extending the engine's capabilities. ## The mangoSuite MangoFetch has been modularized into separate repositories for maximum flexibility: * **[mangofetch](https://github.com/julesklord/mangofetch)** (This repo): Core engine SDK and interactive Ratatui TUI. * **[mangofetch-cli](https://github.com/julesklord/mangofetch-cli)**: Scriptable, pure CLI frontend for headless execution and server batch jobs. * **[mangofetch-gui](https://github.com/julesklord/mangofetch-gui)**: Hardware-accelerated desktop GUI built with `egui` & `eframe`. ## Cross-Platform Compatibility MangoFetch runs natively on multiple architectures and operating systems. - **Operating Systems:** Windows (10/11), macOS (Intel and Apple Silicon), GNU/Linux, and BSD. - **Architectures:** AMD64, ARM64, and ARMv7. It operates on desktops, MacBooks, and Raspberry Pi. - **Dependency Management:** The engine detects missing binaries like `yt-dlp`, `ffmpeg`, or `aria2c`. It automatically downloads the correct standalone version for your OS. ___

MangoFetch TUI demo

--- ## Using as a Rust Library (mangofetch-core) Integrate `mangofetch-core` directly into Discord bots, web servers, or custom applications. Add it to `Cargo.toml`: ```toml [dependencies] mangofetch-core = "" ``` **Engine Capabilities:** * **Simple Telemetry:** Track progress via `tokio::sync::mpsc` channels. * **Unified Traits:** Use the `PlatformDownloader` trait for links, torrents, and videos. * **Dependency Automation:** The engine manages `yt-dlp` and `ffmpeg` binaries. * **Recovery:** The download manager handles retries and network interruptions. --- ## TUI Installation & Run ### Via Cargo (Recommended) Install the TUI to your system path: ```zsh cargo install mangofetch ``` ### From Source ```zsh git clone https://github.com/julesklord/mangofetch.git cd mangofetch cargo build --release ``` ### Running the TUI Simply run the binary without any arguments to launch the interactive TUI directly: ```zsh mangofetch ``` > [!NOTE] > You can still pass traditional CLI commands to this binary (e.g., `mangofetch check`, `mangofetch info `), but executing it empty launches the TUI immediately. Set `MANGOFETCH_OFFLINE=1` to run tests without downloading external tools: ```bash export MANGOFETCH_OFFLINE=1 cargo test -p mangofetch-core ``` --- ## Technical Architecture The modular design separates the core engine from the user interfaces. ```mermaid graph TD User([Terminal / App User]) -->|CLI / Events| Frontend(mangofetch TUI) subgraph MangoFetch Workspace Frontend -->|Dispatch & Read MPSC| Core(mangofetch-core) subgraph Core Engine Core --> Manager[Manager: Queue & Recovery] Core --> Registry[Platform Registry] Manager --> IO[Tokio Async I/O] Registry --> Ext_Native[Native Extractors] Registry --> Ext_Generic[Generic Extractor] end Frontend -.->|Dynamic Linking| SDK(mangofetch-plugin-sdk) end Ext_Generic -->|Wraps| YTDLP[yt-dlp Binary] Ext_Native -->|Muxes Audio/Video| FFmpeg[FFmpeg Binary] Ext_Native -->|BitTorrent / P2P| RQBit[librqbit] YTDLP -.-> Network((Internet)) IO -.-> Network IO --> Disk[(Local Storage)] ``` ### Core Components - **`mangofetch-core`**: Manages the download queue and platform extractors. It handles binary dependencies automatically. - **`mangofetch` (TUI)**: The interactive terminal frontend using `ratatui`. - **`mangofetch-plugin-sdk`**: A toolkit for extending features at runtime. --- ## How the Engine Works The queue processes multiple items concurrently. It isolates failures and triggers automatic retries. ```mermaid stateDiagram-v2 [*] --> Queued : Submit URL Queued --> FetchingMetadata : Worker Thread Picks Item FetchingMetadata --> Active : Media Info Resolved FetchingMetadata --> Error : Network/Parse Failure state Active { [*] --> Allocating Allocating --> Downloading : Progress Stream via MPSC Downloading --> Muxing : Audio+Video Merge (FFmpeg) Muxing --> [*] } Active --> Paused : User Pauses Paused --> Active : User Resumes Active --> Seeding : BitTorrent Complete Seeding --> Complete : Seed Goal Reached Active --> Complete : Success Active --> Error : Interruption / Connection Drop Error --> Queued : Retry Logic Triggered (Auto-Recovery) Complete --> [*] ``` ### Internal Features - **Progress Reporting:** Background channels provide updates without blocking the UI. - **Binary Provisioning:** Locates and configures `ffmpeg` and `yt-dlp`. - **Smart Parsing:** Prioritizes native extraction over external wrappers. --- ## Command Reference View the **[Official Wiki](docs/wiki/Home.md)** for details. * **[Installation Guide](docs/wiki/Installation.md)** * **[CLI Command Reference](docs/wiki/CLI-Guide.md)** * **[TUI Interactive Guide](docs/wiki/TUI-Experience.md)** * **[Technical Architecture](docs/wiki/Architecture.md)** | Command | Alias | Description | | :------------------------------- | :---- | :------------------------------------------------------ | | `mangofetch download ` | `mango d` | Download a single link. | | `mangofetch download-multiple` | `mango dm`| Process links from a file. | | `mangofetch info ` | `mango i` | View metadata without downloading. | | `mangofetch list` | `mango ls`| View current queue. | | `mangofetch clean` | `mango c` | Clear history and cache. | | `mangofetch config` | `mango cfg`| Modify limits and paths. | | `mangofetch check` | `mango ch`| Verify external tool status. | | `mangofetch update` | `mango up`| Update external binaries. | | `mangofetch logs` | `mango log`| View debug logs. | | `mangofetch about` | `mango a` | Show version and license. | --- ## Acknowledgments - **[OmniGet](https://github.com/tonhowtf/omniget)** — Inspired the original engine logic. - **[yt-dlp](https://github.com/yt-dlp/yt-dlp)** — Handles core extraction. ## Contributing Submit pull requests for features or fixes. Open an issue first for major changes. See `CONTRIBUTING.md` for details. ## License

Built by Jules and Claude.
Released under the GPL-3.0 License.