diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2ae5b33..02312f3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -140,10 +140,17 @@ jobs: needs: build runs-on: ubuntu-22.04 steps: + - uses: actions/checkout@v7 - uses: actions/download-artifact@v8 with: path: release-assets merge-multiple: true + - name: Extract changelog release notes + shell: bash + run: | + VERSION="${GITHUB_REF_NAME#v}" + awk '/^## \['"$VERSION"'\]/{flag=1; next} /^## \[/{if(flag) exit} flag' CHANGELOG.md > release_notes.md + test -s release_notes.md - name: Generate checksums run: | cd release-assets @@ -151,4 +158,4 @@ jobs: - uses: softprops/action-gh-release@v3 with: files: release-assets/** - generate_release_notes: true + body_path: release_notes.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 12fd9c7..c8ff89d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,19 +1,43 @@ # Changelog -All notable changes to this project will be documented in this file. +All notable changes to Firelink will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [1.0.0] - 2026-07-04 -### Changed -- Promote the Rust, Tauri, React, and TypeScript application to the repository root. -- Archive the original SwiftUI implementation under `legacy/swift`. -- Refresh project documentation, package metadata, CI, and the in-app About section for the current architecture and migration status. +### Highlights +- Firelink is now a cross-platform desktop download manager built with Rust, Tauri, React, and TypeScript. +- macOS, Windows, and Linux release builds are prepared through native GitHub Actions runners. +- The older macOS-only Swift app has been removed from the active product and replaced by the new desktop app. -### Removed -- Delete obsolete template assets, scratch files, duplicate icon exports, and unused backend helpers. +### New +- Add full browser-to-desktop integration through Firelink Companion, including signed local requests, desktop identity checks, and automatic-capture protection. +- Add a complete Add window for links captured from the browser, pasted manually, or extracted from media pages. +- Add segmented direct downloads, media downloads, queue controls, scheduling, speed limits, and duplicate handling. +- Add persistent downloads, categories, save-location settings, site logins, and safe redownload behavior. +- Add native tray controls, notifications, completion sounds, sleep prevention, file reveal/open/trash actions, and OS keychain support where available. +- Add built-in diagnostics for media engines, app logs, packaged-engine validation, and release smoke checks. + +### Improved +- Rework the main window, settings, logs, Add window, download list, toasts, context menus, and table interactions for the new desktop interface. +- Improve media extraction with better YouTube metadata loading, format filtering, size estimates, output names, progress, retries, and cleanup. +- Improve download reliability on rate-limited servers, servers with broken range support, interrupted app sessions, and queue-concurrency changes. +- Improve extension captures so browser downloads are resumed unless Firelink confirms the handoff. +- Improve cross-platform packaging by bundling target-specific aria2, yt-dlp, FFmpeg, and Deno payloads. +- Improve privacy by avoiding startup keychain prompts, redacting secrets from local persistence, and narrowing when browser cookies are forwarded. + +### Fixed +- Fix stuck queued/downloading/completed states, stale aria2 dispatches, queue shrink behavior, retry caps, scheduler actions, and post-queue system actions. +- Fix many Windows, Linux, and macOS packaging issues, including hidden helper consoles, AppImage engine handling, installer validation, and smoke-test timing. +- Fix media child-process cleanup so paused, canceled, failed, or removed downloads do not leave stray processes or partial files behind. +- Fix UI hangs, overflow, sorting, selection, animation, and contrast issues across the main list, Add window, settings, and log viewer. +- Fix security issues around local server authentication, request signing, replay protection, private IP metadata checks, path ownership, header sanitization, and command execution boundaries. + +### Notes +- This is a major release from `0.7.3`. Older Firelink Companion builds are not compatible with every 1.0 capture path; update the extension together with the desktop app. +- macOS builds are unsigned and not notarized. Windows builds are unsigned. See [RELEASE.md](RELEASE.md) for distribution details. ## [0.7.3] - 2026-06-11 diff --git a/Extensions/Firefox b/Extensions/Firefox index 71d26ef..42b28fa 160000 --- a/Extensions/Firefox +++ b/Extensions/Firefox @@ -1 +1 @@ -Subproject commit 71d26efc34bd1858d73854856d18d9dfec3fc5da +Subproject commit 42b28fa4f6352d3a412d2b3daa540512a08f1231 diff --git a/README.md b/README.md index f9645c6..0816b4b 100644 --- a/README.md +++ b/README.md @@ -3,81 +3,93 @@ # Firelink - **A fast, focused desktop download manager powered by Rust and Tauri.** + **A fast, focused desktop download manager for macOS, Windows, and Linux.** - [![Version](https://img.shields.io/badge/version-0.7.3-6f42c1?style=flat-square)](https://github.com/nimbold/Firelink/releases) - [![macOS](https://img.shields.io/badge/macOS-111111?style=flat-square&logo=apple&logoColor=white)](#project-status) - [![Windows](https://img.shields.io/badge/Windows-0078D6?style=flat-square&logo=microsoft&logoColor=white)](#project-status) - [![Linux](https://img.shields.io/badge/Linux-FCC624?style=flat-square&logo=linux&logoColor=black)](#project-status) + [![Version](https://img.shields.io/badge/version-1.0.0-6f42c1?style=flat-square)](https://github.com/nimbold/Firelink/releases) + [![macOS](https://img.shields.io/badge/macOS-111111?style=flat-square&logo=apple&logoColor=white)](#platforms) + [![Windows](https://img.shields.io/badge/Windows-0078D6?style=flat-square&logo=windows11&logoColor=white)](#platforms) + [![Linux](https://img.shields.io/badge/Linux-FCC624?style=flat-square&logo=linux&logoColor=black)](#platforms) [![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/) + [![React](https://img.shields.io/badge/React-TypeScript-61DAFB?style=flat-square&logo=react&logoColor=111111)](https://react.dev/) [![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) + [Features](#features) · [Install](#installation) · [Browser Extension](#browser-extension) · [Development](#development) · [Release Notes](CHANGELOG.md)
- Dark Theme Main Window - Dark Theme Add Window - Light Theme Main Window - Light Theme Add Window + Firelink dark theme main window + Firelink dark theme add window + Firelink light theme main window + Firelink light theme add window
- View More Screenshots + View more screenshots
- Dark Theme Settings - Light Theme Settings + Firelink dark theme settings + Firelink light theme settings
-
+## Why Firelink -Firelink brings segmented downloads, media extraction, scheduling, and browser integration into one native-feeling desktop application. The application is built with a Rust backend and a React/TypeScript interface, providing excellent cross-platform support. +Firelink is built for people who want a real desktop download manager again: fast segmented transfers, browser capture, media extraction, scheduling, recovery, and clear control over where files land. Version 1.0.0 completes the move from the earlier macOS-only Swift app to a modern Rust/Tauri application with a React and TypeScript interface. + +The app keeps the heavy work native. Downloads are coordinated by a Rust backend, accelerated with aria2, enriched with yt-dlp and FFmpeg for media workflows, and persisted locally with SQLite so queues survive restarts and app updates. ## 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 +- **Fast segmented downloads** powered by aria2 with configurable connections, retries, and speed limits. +- **Media extraction** with yt-dlp, FFmpeg, and Deno for video/audio links and richer format selection. +- **A real Add window** for manual, extension-captured, and media downloads, including metadata, duplicate handling, and save-location choices before downloads start. +- **Persistent queue management** with safe concurrency limits, pause/resume, retry, redownload, sorting, multi-select, and bulk controls. +- **Download scheduling** with start/stop windows, speed-limiter tools, and optional post-queue actions. +- **Smart organization** through categories, default folders, per-download overrides, and open/reveal/trash actions. +- **Private browser handoff** through authenticated local pairing with replay protection and desktop-server proof checks. +- **Native desktop integration** including tray controls, notifications, completion sounds, sleep prevention, and OS keychain support where available. +- **Diagnostics built in** with engine health checks, structured logs, and packaged-engine verification. ## Installation -> [!IMPORTANT] -> The cross-platform rust implementation is completing release packaging for macOS, Windows, and Linux. The current `v0.7.3` macOS asset on GitHub Releases belongs to the archived SwiftUI implementation. +Download the latest desktop build from [GitHub Releases](https://github.com/nimbold/Firelink/releases). -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 packaging CI workflow is fully ready. +| Platform | Package | Notes | +| --- | --- | --- | +| **macOS Apple silicon** | `.dmg` | Unsigned and not notarized. Open through Finder or approve once in **System Settings -> Privacy & Security**. | +| **Windows x64** | NSIS `.exe` installer | Unsigned. Windows SmartScreen may warn until code signing is added. | +| **Linux x64** | `.AppImage` | Make executable before launching if your desktop environment does not do that automatically. | -Production bundles include target-specific media engines, so packaged releases do not require separate aria2, yt-dlp, FFmpeg, Deno, Python, or package-manager installations. +Production bundles include the required media engines for the target platform. Users do not need to install aria2, yt-dlp, FFmpeg, Deno, Python, Homebrew, or a package manager for normal app usage. -macOS builds are distributed without Apple code signing or notarization. Users must approve the downloaded app through Finder or **System Settings → Privacy & Security**. Firelink does not claim Gatekeeper trust. +## Browser Extension -## 🧩 Browser Extension +
+ Install Firelink Companion on Firefox +
-[![Install on Firefox](https://img.shields.io/badge/Install%20on-Firefox-FF7139?style=flat-square&logo=firefox&logoColor=white)](https://addons.mozilla.org/en-US/firefox/addon/firelink-companion/) +Firelink Companion connects your browser to the desktop app so links and browser downloads can open in Firelink instead of disappearing into the browser's default download shelf. -Install the companion extension to send browser downloads directly to Firelink. Pair the extension from **Settings → Integrations** using the generated local token. +What it adds: -## Project Status +- **Automatic capture** for normal browser downloads, while still routing every captured link through Firelink's Add window. +- **Context-menu actions** for "Download with Firelink" and selected links. +- **Signed local requests** using the pairing token from **Settings -> Integrations**. +- **Server identity checks** so the extension only trusts the real local Firelink app. +- **Offline-safe behavior** that resumes browser downloads when Firelink is closed or rejects a handoff. +- **Protocol-aware compatibility** so older desktop builds are rejected before automatic capture can cancel a browser download. -The cross-platform audit has been successfully completed. Firelink implements robust OS-specific behaviors to ensure native integration and stability across all platforms. +Install the extension, open Firelink, then pair it from **Settings -> Integrations**. The Firefox add-on is maintained in the [Firelink-Extension](https://github.com/nimbold/Firelink-Extension) repository and is also vendored here as the `Extensions/Firefox` submodule. + +## Platforms | Target | Status | | --- | --- | -| **macOS arm64** | Fully supported. Automated build, engine validation, and unsigned DMG packaging complete. | -| **Windows x64** | Fully supported. Native CI and NSIS packaging configured. | -| **Linux x64** | Fully supported. Native CI and AppImage packaging configured. | - -See the [changelog](CHANGELOG.md) for release history and recent work. +| **macOS arm64** | Supported. Automated native build, engine validation, packaged launch smoke test, and unsigned DMG packaging. | +| **Windows x64** | Supported. Native GitHub Actions build, engine validation, silent installer smoke test, and NSIS packaging. | +| **Linux x64** | Supported. Native GitHub Actions build, engine validation, AppImage repackaging, and xvfb launch smoke test. | ## Development @@ -102,9 +114,11 @@ npm install npm run tauri dev ``` -Run the frontend build and backend tests: +Run the core checks: ```sh +node --test scripts/*.node-test.js +npm test -- --run npm run build cd src-tauri cargo test --all-targets @@ -130,21 +144,28 @@ Build staging includes only the current target. See `engines.lock.json`, `engine ```text . ├── src/ React and TypeScript interface -├── src-tauri/ Rust backend and Tauri configuration +├── src-tauri/ Rust backend, Tauri config, and native tests +├── scripts/ Engine provisioning, release, and smoke-test tooling └── Extensions/Firefox/ Firelink Companion submodule ``` +## Help and Project Status + +- Report bugs or request improvements in [GitHub Issues](https://github.com/nimbold/Firelink/issues). +- Read [CHANGELOG.md](CHANGELOG.md) for release history. +- Review [RELEASE.md](RELEASE.md) for packaging policy and release verification. + ## Technology & Credits -Firelink is made possible by these incredible open-source projects: +Firelink is made possible by these open-source projects: -- **[Tauri 2](https://tauri.app/)** for the lightweight, secure desktop runtime -- **[Rust](https://www.rust-lang.org/)** and **[Tokio](https://tokio.rs/)** for high-performance native application logic -- **[React](https://react.dev/)** and **[TypeScript](https://www.typescriptlang.org/)** for the responsive user interface -- **[Zustand](https://zustand-demo.pmnd.rs/)** for simplified frontend state management -- **[SQLite](https://www.sqlite.org/)** for reliable, persistent application data -- **[aria2](https://aria2.github.io/)** for blazing fast segmented downloading -- **[yt-dlp](https://github.com/yt-dlp/yt-dlp)**, **[FFmpeg](https://ffmpeg.org/)**, and **[Deno](https://deno.com/)** for unmatched media extraction and processing capabilities +- **[Tauri 2](https://tauri.app/)** for the lightweight 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 management +- **[SQLite](https://www.sqlite.org/)** for persistent local data +- **[aria2](https://aria2.github.io/)** for segmented downloading +- **[yt-dlp](https://github.com/yt-dlp/yt-dlp)**, **[FFmpeg](https://ffmpeg.org/)**, and **[Deno](https://deno.com/)** for media extraction and processing ## License diff --git a/package-lock.json b/package-lock.json index ce8192d..4b66aff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "firelink", - "version": "0.7.3", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "firelink", - "version": "0.7.3", + "version": "1.0.0", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.9.0", diff --git a/package.json b/package.json index caf0e65..4c0c555 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "firelink", "private": true, - "version": "0.7.3", - "description": "A fast desktop download manager powered by Rust, Tauri, React, and TypeScript.", + "version": "1.0.0", + "description": "A fast cross-platform desktop download manager powered by Rust, Tauri, React, aria2, and yt-dlp.", "license": "MIT", "homepage": "https://github.com/nimbold/Firelink", "repository": { @@ -20,6 +20,7 @@ "typescript", "aria2", "yt-dlp", + "ffmpeg", "desktop" ], "engines": { diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 02ae434..b0517b6 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1310,7 +1310,7 @@ checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "firelink" -version = "0.7.3" +version = "1.0.0" dependencies = [ "async-trait", "axum", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 73229d0..32b07d5 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,13 +1,13 @@ [package] name = "firelink" -version = "0.7.3" -description = "A fast desktop download manager powered by Rust and Tauri" +version = "1.0.0" +description = "A fast cross-platform desktop download manager powered by Rust and Tauri" authors = ["NimBold"] edition = "2021" license = "MIT" repository = "https://github.com/nimbold/Firelink" homepage = "https://github.com/nimbold/Firelink" -keywords = ["download-manager", "tauri", "aria2", "yt-dlp"] +keywords = ["download-manager", "tauri", "aria2", "yt-dlp", "ffmpeg"] categories = ["network-programming"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 637f2b8..86d7295 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Firelink", - "version": "0.7.3", + "version": "1.0.0", "identifier": "com.nimbold.firelink", "build": { "beforeDevCommand": "node scripts/stage-engines.js && npm run dev", diff --git a/src/components/SettingsView.tsx b/src/components/SettingsView.tsx index 3f3d5d3..beeaf70 100644 --- a/src/components/SettingsView.tsx +++ b/src/components/SettingsView.tsx @@ -269,7 +269,7 @@ const [engineStatus, setEngineStatus] = useState(null const [expandedEngine, setExpandedEngine] = useState(null); const [isRecheckingEngines, setIsRecheckingEngines] = useState(false); const engineRunId = useRef(0); -const [appVersion, setAppVersion] = useState('0.7.3'); +const [appVersion, setAppVersion] = useState('1.0.0'); const [extensionServerPort, setExtensionServerPort] = useState(null); // Local state for adding site login