mangofetch-plugin-sdk 0.7.4

SDK for building MangoFetch plugins
Documentation


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.

The suite includes three frontends:

  1. mangofetch-gui: A hardware-accelerated desktop application powered by egui. It uses the MonolithUI design system and provides persistent logs and telemetry.
  2. mangofetch tui: A terminal dashboard built with ratatui. It supports mouse interaction, modal dialogs, and multiple color palettes.
  3. mangofetch cli: A scriptable command-line interface for batch processing.

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.


Using as a Rust Library (mangofetch-core)

Integrate mangofetch-core directly into Discord bots, web servers, or custom applications.

Add it to Cargo.toml:

[dependencies]

mangofetch-core = { git = "https://github.com/julesklord/mangofetch" }

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.

CLI/TUI Installation

Via Cargo (Recommended)

Install the CLI to your system path:

cargo install mangofetch

From Source

git clone https://github.com/julesklord/mangofetch.git

cd mangofetch

cargo build --release

Run

mangofetch <command> <link>

Set MANGOFETCH_OFFLINE=1 to run tests without downloading external tools:

export MANGOFETCH_OFFLINE=1

cargo test -p mangofetch-core

mangofetch tui


Technical Architecture

The modular design separates the core engine from the user interfaces.

graph TD
    User([Terminal / App User]) -->|CLI / Events| Frontend(CLI / Bot / Custom GUI)

    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: A terminal frontend using clap and 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.

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 for details.

Command Alias Description
mangofetch download <url> mango d Download a single link.
mangofetch download-multiple mango dm Process links from a file.
mangofetch info <url> 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 — Inspired the original engine logic.
  • 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