mirror of
https://github.com/nimbold/Firelink.git
synced 2026-08-25 18:17:21 +00:00
chore(release): prepare Firelink 1.0.0
This commit is contained in:
@@ -140,10 +140,17 @@ jobs:
|
|||||||
needs: build
|
needs: build
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
|
- uses: actions/checkout@v7
|
||||||
- uses: actions/download-artifact@v8
|
- uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
path: release-assets
|
path: release-assets
|
||||||
merge-multiple: true
|
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
|
- name: Generate checksums
|
||||||
run: |
|
run: |
|
||||||
cd release-assets
|
cd release-assets
|
||||||
@@ -151,4 +158,4 @@ jobs:
|
|||||||
- uses: softprops/action-gh-release@v3
|
- uses: softprops/action-gh-release@v3
|
||||||
with:
|
with:
|
||||||
files: release-assets/**
|
files: release-assets/**
|
||||||
generate_release_notes: true
|
body_path: release_notes.md
|
||||||
|
|||||||
+32
-8
@@ -1,19 +1,43 @@
|
|||||||
# Changelog
|
# 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/),
|
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).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [Unreleased]
|
## [1.0.0] - 2026-07-04
|
||||||
|
|
||||||
### Changed
|
### Highlights
|
||||||
- Promote the Rust, Tauri, React, and TypeScript application to the repository root.
|
- Firelink is now a cross-platform desktop download manager built with Rust, Tauri, React, and TypeScript.
|
||||||
- Archive the original SwiftUI implementation under `legacy/swift`.
|
- macOS, Windows, and Linux release builds are prepared through native GitHub Actions runners.
|
||||||
- Refresh project documentation, package metadata, CI, and the in-app About section for the current architecture and migration status.
|
- The older macOS-only Swift app has been removed from the active product and replaced by the new desktop app.
|
||||||
|
|
||||||
### Removed
|
### New
|
||||||
- Delete obsolete template assets, scratch files, duplicate icon exports, and unused backend helpers.
|
- 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
|
## [0.7.3] - 2026-06-11
|
||||||
|
|
||||||
|
|||||||
+1
-1
Submodule Extensions/Firefox updated: 71d26efc34...42b28fa4f6
@@ -3,81 +3,93 @@
|
|||||||
|
|
||||||
# Firelink
|
# Firelink
|
||||||
|
|
||||||
**A fast, focused desktop download manager powered by Rust and Tauri.**
|
**A fast, focused desktop download manager for macOS, Windows, and Linux.**
|
||||||
|
|
||||||
[](https://github.com/nimbold/Firelink/releases)
|
[](https://github.com/nimbold/Firelink/releases)
|
||||||
[](#project-status)
|
[](#platforms)
|
||||||
[](#project-status)
|
[](#platforms)
|
||||||
[](#project-status)
|
[](#platforms)
|
||||||
[](https://tauri.app/)
|
[](https://tauri.app/)
|
||||||
[](https://www.rust-lang.org/)
|
[](https://www.rust-lang.org/)
|
||||||
|
[](https://react.dev/)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
[](https://github.com/nimbold/Firelink/actions/workflows/ci.yml)
|
[](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)
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="Screenshots/Dark%20theme%20-%20main.png" width="24%" alt="Dark Theme Main Window" />
|
<img src="Screenshots/Dark%20theme%20-%20main.png" width="24%" alt="Firelink dark theme main window" />
|
||||||
<img src="Screenshots/Dark%20theme%20-%20add%20window.png" width="24%" alt="Dark Theme Add Window" />
|
<img src="Screenshots/Dark%20theme%20-%20add%20window.png" width="24%" alt="Firelink dark theme add window" />
|
||||||
<img src="Screenshots/Light%20theme%20-%20main.png" width="24%" alt="Light Theme Main Window" />
|
<img src="Screenshots/Light%20theme%20-%20main.png" width="24%" alt="Firelink light theme main window" />
|
||||||
<img src="Screenshots/Light%20theme%20-%20add%20window.png" width="24%" alt="Light Theme Add Window" />
|
<img src="Screenshots/Light%20theme%20-%20add%20window.png" width="24%" alt="Firelink light theme add window" />
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><b>View More Screenshots</b></summary>
|
<summary><b>View more screenshots</b></summary>
|
||||||
<br/>
|
<br/>
|
||||||
<img src="Screenshots/Dark%20theme%20-%20settings.png" width="24%" alt="Dark Theme Settings" />
|
<img src="Screenshots/Dark%20theme%20-%20settings.png" width="32%" alt="Firelink dark theme settings" />
|
||||||
<img src="Screenshots/Light%20theme%20-%20settings.png" width="24%" alt="Light Theme Settings" />
|
<img src="Screenshots/Light%20theme%20-%20settings.png" width="32%" alt="Firelink light theme settings" />
|
||||||
</details>
|
</details>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br/>
|
## 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
|
## Features
|
||||||
|
|
||||||
- **Fast transfers** with segmented downloading powered by aria2
|
- **Fast segmented downloads** powered by aria2 with configurable connections, retries, and speed limits.
|
||||||
- **Media downloads** through yt-dlp, FFmpeg, and Deno
|
- **Media extraction** with yt-dlp, FFmpeg, and Deno for video/audio links and richer format selection.
|
||||||
- **Persistent queues** with configurable concurrency and speed limits
|
- **A real Add window** for manual, extension-captured, and media downloads, including metadata, duplicate handling, and save-location choices before downloads start.
|
||||||
- **Download scheduling** with optional post-queue system actions
|
- **Persistent queue management** with safe concurrency limits, pause/resume, retry, redownload, sorting, multi-select, and bulk controls.
|
||||||
- **Pause, resume, retry, and duplicate-file handling**
|
- **Download scheduling** with start/stop windows, speed-limiter tools, and optional post-queue actions.
|
||||||
- **Smart organization** with categories and configurable destinations
|
- **Smart organization** through categories, default folders, per-download overrides, and open/reveal/trash actions.
|
||||||
- **Browser integration** through the Firelink Companion extension
|
- **Private browser handoff** through authenticated local pairing with replay protection and desktop-server proof checks.
|
||||||
- **Secure local handoff** using authenticated extension pairing
|
- **Native desktop integration** including tray controls, notifications, completion sounds, sleep prevention, and OS keychain support where available.
|
||||||
- **System integration** including tray controls, notifications, and sleep prevention
|
- **Diagnostics built in** with engine health checks, structured logs, and packaged-engine verification.
|
||||||
- **Built-in update checks** backed by GitHub Releases
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
> [!IMPORTANT]
|
Download the latest desktop build from [GitHub Releases](https://github.com/nimbold/Firelink/releases).
|
||||||
> 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.
|
|
||||||
|
|
||||||
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
|
<div align="center">
|
||||||
|
<a href="https://addons.mozilla.org/en-US/firefox/addon/firelink-companion/"><img src="https://img.shields.io/badge/Install%20Firelink%20Companion-Firefox-FF7139?style=for-the-badge&logo=firefox-browser&logoColor=white" alt="Install Firelink Companion on Firefox" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
[](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 |
|
| Target | Status |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| **macOS arm64** | Fully supported. Automated build, engine validation, and unsigned DMG packaging complete. |
|
| **macOS arm64** | Supported. Automated native build, engine validation, packaged launch smoke test, and unsigned DMG packaging. |
|
||||||
| **Windows x64** | Fully supported. Native CI and NSIS packaging configured. |
|
| **Windows x64** | Supported. Native GitHub Actions build, engine validation, silent installer smoke test, and NSIS packaging. |
|
||||||
| **Linux x64** | Fully supported. Native CI and AppImage packaging configured. |
|
| **Linux x64** | Supported. Native GitHub Actions build, engine validation, AppImage repackaging, and xvfb launch smoke test. |
|
||||||
|
|
||||||
See the [changelog](CHANGELOG.md) for release history and recent work.
|
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
@@ -102,9 +114,11 @@ npm install
|
|||||||
npm run tauri dev
|
npm run tauri dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Run the frontend build and backend tests:
|
Run the core checks:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
node --test scripts/*.node-test.js
|
||||||
|
npm test -- --run
|
||||||
npm run build
|
npm run build
|
||||||
cd src-tauri
|
cd src-tauri
|
||||||
cargo test --all-targets
|
cargo test --all-targets
|
||||||
@@ -130,21 +144,28 @@ Build staging includes only the current target. See `engines.lock.json`, `engine
|
|||||||
```text
|
```text
|
||||||
.
|
.
|
||||||
├── src/ React and TypeScript interface
|
├── 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
|
└── 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
|
## 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
|
- **[Tauri 2](https://tauri.app/)** for the lightweight desktop runtime
|
||||||
- **[Rust](https://www.rust-lang.org/)** and **[Tokio](https://tokio.rs/)** for high-performance native application logic
|
- **[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 responsive user interface
|
- **[React](https://react.dev/)** and **[TypeScript](https://www.typescriptlang.org/)** for the interface
|
||||||
- **[Zustand](https://zustand-demo.pmnd.rs/)** for simplified frontend state management
|
- **[Zustand](https://zustand-demo.pmnd.rs/)** for frontend state management
|
||||||
- **[SQLite](https://www.sqlite.org/)** for reliable, persistent application data
|
- **[SQLite](https://www.sqlite.org/)** for persistent local data
|
||||||
- **[aria2](https://aria2.github.io/)** for blazing fast segmented downloading
|
- **[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 unmatched media extraction and processing capabilities
|
- **[yt-dlp](https://github.com/yt-dlp/yt-dlp)**, **[FFmpeg](https://ffmpeg.org/)**, and **[Deno](https://deno.com/)** for media extraction and processing
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "firelink",
|
"name": "firelink",
|
||||||
"version": "0.7.3",
|
"version": "1.0.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "firelink",
|
"name": "firelink",
|
||||||
"version": "0.7.3",
|
"version": "1.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@formkit/auto-animate": "^0.9.0",
|
"@formkit/auto-animate": "^0.9.0",
|
||||||
|
|||||||
+3
-2
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "firelink",
|
"name": "firelink",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.7.3",
|
"version": "1.0.0",
|
||||||
"description": "A fast desktop download manager powered by Rust, Tauri, React, and TypeScript.",
|
"description": "A fast cross-platform desktop download manager powered by Rust, Tauri, React, aria2, and yt-dlp.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"homepage": "https://github.com/nimbold/Firelink",
|
"homepage": "https://github.com/nimbold/Firelink",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -20,6 +20,7 @@
|
|||||||
"typescript",
|
"typescript",
|
||||||
"aria2",
|
"aria2",
|
||||||
"yt-dlp",
|
"yt-dlp",
|
||||||
|
"ffmpeg",
|
||||||
"desktop"
|
"desktop"
|
||||||
],
|
],
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|||||||
Generated
+1
-1
@@ -1310,7 +1310,7 @@ checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "firelink"
|
name = "firelink"
|
||||||
version = "0.7.3"
|
version = "1.0.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"axum",
|
"axum",
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "firelink"
|
name = "firelink"
|
||||||
version = "0.7.3"
|
version = "1.0.0"
|
||||||
description = "A fast desktop download manager powered by Rust and Tauri"
|
description = "A fast cross-platform desktop download manager powered by Rust and Tauri"
|
||||||
authors = ["NimBold"]
|
authors = ["NimBold"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://github.com/nimbold/Firelink"
|
repository = "https://github.com/nimbold/Firelink"
|
||||||
homepage = "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"]
|
categories = ["network-programming"]
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://schema.tauri.app/config/2",
|
"$schema": "https://schema.tauri.app/config/2",
|
||||||
"productName": "Firelink",
|
"productName": "Firelink",
|
||||||
"version": "0.7.3",
|
"version": "1.0.0",
|
||||||
"identifier": "com.nimbold.firelink",
|
"identifier": "com.nimbold.firelink",
|
||||||
"build": {
|
"build": {
|
||||||
"beforeDevCommand": "node scripts/stage-engines.js && npm run dev",
|
"beforeDevCommand": "node scripts/stage-engines.js && npm run dev",
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ const [engineStatus, setEngineStatus] = useState<EngineStatusItem[] | null>(null
|
|||||||
const [expandedEngine, setExpandedEngine] = useState<string | null>(null);
|
const [expandedEngine, setExpandedEngine] = useState<string | null>(null);
|
||||||
const [isRecheckingEngines, setIsRecheckingEngines] = useState(false);
|
const [isRecheckingEngines, setIsRecheckingEngines] = useState(false);
|
||||||
const engineRunId = useRef(0);
|
const engineRunId = useRef(0);
|
||||||
const [appVersion, setAppVersion] = useState('0.7.3');
|
const [appVersion, setAppVersion] = useState('1.0.0');
|
||||||
const [extensionServerPort, setExtensionServerPort] = useState<number | null>(null);
|
const [extensionServerPort, setExtensionServerPort] = useState<number | null>(null);
|
||||||
|
|
||||||
// Local state for adding site login
|
// Local state for adding site login
|
||||||
|
|||||||
Reference in New Issue
Block a user