<div align="center">
  <img src="src/assets/app-icon.png" alt="Firelink" width="112" height="112" />

  # Firelink

  **A fast, focused desktop download manager powered by Rust and Tauri.**

  [![Version](https://img.shields.io/badge/version-0.7.3-6f42c1?style=flat-square)](https://github.com/nimbold/Firelink/releases)
  [![Platform](https://img.shields.io/badge/platform-macOS-111111?style=flat-square&logo=apple)](#project-status)
  [![Tauri](https://img.shields.io/badge/Tauri-2-24C8DB?style=flat-square&logo=tauri&logoColor=white)](https://tauri.app/)
  [![Rust](https://img.shields.io/badge/Rust-backend-000000?style=flat-square&logo=rust)](https://www.rust-lang.org/)
  [![License](https://img.shields.io/github/license/nimbold/Firelink?style=flat-square)](LICENSE)
  [![CI](https://img.shields.io/github/actions/workflow/status/nimbold/Firelink/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/nimbold/Firelink/actions/workflows/ci.yml)

  [Features](#features) · [Install](#installation) · [Development](#development) · [Project status](#project-status)
</div>

Firelink brings segmented downloads, media extraction, scheduling, and browser
integration into one native-feeling desktop application. The current app uses a
Rust backend with a React and TypeScript interface, replacing the original
SwiftUI implementation.

## Features

- **Fast transfers** with segmented downloading powered by aria2
- **Media downloads** through yt-dlp, FFmpeg, and Deno
- **Persistent queues** with configurable concurrency and speed limits
- **Download scheduling** with optional post-queue system actions
- **Pause, resume, retry, and duplicate-file handling**
- **Smart organization** with categories and configurable destinations
- **Browser integration** through the Firelink Companion extension
- **Secure local handoff** using authenticated extension pairing
- **System integration** including tray controls, notifications, and sleep prevention
- **Built-in update checks** backed by GitHub Releases

## Installation

> [!IMPORTANT]
> The Rust and Tauri application is still completing release packaging. The
> current `v0.7.3` macOS asset on GitHub Releases belongs to the archived SwiftUI
> implementation.

For now, run the maintained application from source using the development
instructions below. New packaged builds will be published through
[GitHub Releases](https://github.com/nimbold/Firelink/releases) once the
migration is complete.

Firelink is currently developed and tested on macOS. Production bundles include
the media engines, so packaged releases will not require separate aria2, yt-dlp,
FFmpeg, or Deno installations.

### Browser Extension

Install [Firelink Companion for Firefox](https://addons.mozilla.org/en-US/firefox/addon/firelink-companion/)
to send browser downloads directly to Firelink. Pair the extension from
**Settings → Integrations** using the generated local token.

## Project Status

The migration from SwiftUI to Rust, Tauri, React, and TypeScript is in its final
stage. The new application is the maintained implementation at the repository
root.

| Target | Status |
| --- | --- |
| macOS | Active development and automated testing |
| Windows | Core architecture prepared; packaging and validation pending |
| Linux | Core architecture prepared; packaging and validation pending |
| Legacy SwiftUI app | Archived in [`legacy/swift`](legacy/swift) |

See the [changelog](CHANGELOG.md) for release history and recent work.

## Development

### Requirements

- Node.js 22 or newer
- npm
- Rust and Cargo
- [Tauri 2 platform prerequisites](https://v2.tauri.app/start/prerequisites/)

Clone the repository with its browser-extension submodule:

```sh
git clone --recurse-submodules https://github.com/nimbold/Firelink.git
cd Firelink
```

Install dependencies and launch the desktop app:

```sh
npm install
npm run tauri dev
```

Run the frontend build and backend tests:

```sh
npm run build
cd src-tauri
cargo test --all-targets
```

Create a production bundle:

```sh
npm run tauri build
```

Native media executables and runtime files are expected in
`src-tauri/binaries` when running or packaging the application locally.

## Repository Structure

```text
.
├── src/                  React and TypeScript interface
├── src-tauri/            Rust backend and Tauri configuration
├── Extensions/Firefox/   Firelink Companion submodule
└── legacy/swift/         Archived SwiftUI application
```

## Technology

- [Tauri 2](https://tauri.app/) for the desktop runtime
- [Rust](https://www.rust-lang.org/) and [Tokio](https://tokio.rs/) for native application logic
- [React](https://react.dev/) and [TypeScript](https://www.typescriptlang.org/) for the interface
- [Zustand](https://zustand-demo.pmnd.rs/) for frontend state
- [SQLite](https://www.sqlite.org/) for persistent application data
- [aria2](https://aria2.github.io/), [yt-dlp](https://github.com/yt-dlp/yt-dlp),
  [FFmpeg](https://ffmpeg.org/), and [Deno](https://deno.com/) for download and media processing

## License

Firelink is available under the [MIT License](LICENSE).
