⚠ BREAKING CHANGES
- the workspace package names and the SDK's CLI name changed.
- the database, config, temp and container paths are renamed (migrated automatically on start, except custom bind mounts onto /etc/amigo/plugins, which must now target /etc/krake/plugins).
- the build-time keys are read only as KRAKE_REGISTRY_PUBKEY_HEX and KRAKE_UPDATE_PUBKEY_HEX, and the signing script only takes KRAKE_UPDATE_SIGNING_KEY. The workflows map them from the unchanged AMIGO_* repository variables and secret.
- the crates and their library paths are renamed.
- name the desktop executable Krake
- the desktop app has a new bundle identifier.
- the container image has a new name.
- the binaries and release archives have new names.
Features
- /spec-verify updates spec status and acceptance criteria (3e7c924)
- 10 UX features — tab badge, relative time, sort, delete confirm, system theme, compact view, bandwidth limit, context menu, notifications, progress ring (a347048)
- add /spec-fix skill + update CLAUDE.md with all 5 skills (97c13c6)
- add automated release management with release-please (fcbe87f)
- add automated release management with release-please (ce29bd6)
- add captcha UI, webhook settings, and notification frontend (8fa6a38)
- add chunk persistence and resumable chunked downloads (8ef2ca5)
- add crypto, captcha manager, notifications, and webhook system (ee40ee1)
- add Docker support with container management script and update docker-compose configuration (ecc0a58)
- add integration tests and wire Extractor crate as URL resolver (b92e40b)
- add ProtocolBackend trait and activate HLS/DASH backends (4f42a39)
- add retry config UI in Settings page (7567d85)
- add skip() to test harness for network-dependent tests (67b3148)
- add spec-driven development skills (/spec, /verify, /feature) (78aa88d)
- add spec-driven development skills (/spec, /verify, /feature) (6c84cc7)
- add title and duration fields to DownloadInfo (fb236c1)
- add URL resolver middleware for plugins and extractors (66b3987)
- add Usenet UI — server management + NZB downloads pages (0916355)
- add YouTube integration tests and fix plugin test runner (55e7739)
- add YouTube integration tests and fix plugin test runner (ea6ea43)
- cache bandwidth limit and add config validation (2732062)
- cli: amigo-dl login / remote subcommands for device pairing (82aaa56)
- complete visual redesign of amigo-downloader web-ui with Cyberpunk Arcade theme and integrated audit fixes (63824eb)
- confirm plugin network access on install and update (2563fad)
- convert all plugins to TypeScript, smart generic-http link finder (80233fc)
- core/config: extend ServerConfig for setup-wizard flow (037c32c)
- core/storage: sessions, api_tokens, pairing_requests tables (5bdf810)
- cut initial v0.1.0 release (4ac4bdb)
- cut initial v0.1.0 release (236c2a0)
- cyberpunk arcade redesign with 60:30:10 neon balance (83dc68c)
- docker, docs: opt-in Docker defaults + reverse-proxy / Tailscale guide (659f47f)
- ETA, copy URL, keyboard nav, search, batch ops, speed graph (8a3a684)
- extend plugin Host API + activate post-processing pipeline (1c2a927)
- feature toggles for RSS feeds and server stats (261ccdb)
- file icons, connection status, collapsible sidebar, i18n, DnD, favicon badge, aria-live, retry (ecd607b)
- harden Docker deployment (docker-security spec) (0e0bfa2)
- i18n system with JSON locale files and auto language detection (906bcd8)
- implement real light mode theme (e69e7aa)
- implement Usenet feature with server management and UI updates (4e160a2)
- implement Usenet feature with server management and UI updates (b7c442e)
- integrate bandwidth limiting and extract retry utility (d2675f9)
- integrate Tauri into workspace (tauri-workspace-integration spec) (07f89da)
- library-based extraction, selective PAR2, NZB metadata wiring (5c55ade)
- local index cache, category folders, plugin suggestion API (0e6f96d)
- make /spec skill collaborative and interactive (4fe55ca)
- make retry options configurable via config.toml (a34e02b)
- nightly CI pipeline — CLI binaries, Docker multi-arch, Tauri installers (35923a2)
- nightly versioning with date-stamped tags and releases (fc1bd84)
- NZBGet API credentials + fix 6 more bugs (6aa486b)
- NZBGet-compatible JSON-RPC API for Sonarr/Radarr integration (5b01cbd)
- PAR2/unrar config toggles, RSS background poller, NZB watch folder (52b94cd)
- plugin spec test runner with test/assert/assertEqual/assertNotNull (5cac74c)
- plugin strategy foundation — generic extractor, multi-hoster priority, protocol hints (ff71b5f)
- plugin strategy foundation — generic extractor, multi-hoster priority, protocol hints (78d57da)
- plugin-runtime: Ed25519-signed plugin registry index (audit #31) (300cfd5)
- plugin-runtime: expose the plugin host API as
krake (302ed27)
- plugin-runtime: QuickJS as a WebAssembly guest module (AC-01) (48ce491)
- plugin-runtime: run every plugin in a Wasm instance (AC-01 to AC-06, AC-08) (eea66fe)
- plugin-runtime: run every plugin in a WebAssembly instance; #99 leftovers (4c9de86)
- plugin-runtime: run plugin JavaScript in an out-of-process host (331b413)
- plugin-runtime: run plugin JavaScript in an out-of-process host (0bd109c)
- plugin-runtime: SSRF blocklist on plugin HTTP calls (2e7acf9)
- plugin-runtime: Wasm executor for plugin JavaScript (AC-02 to AC-13, AC-15 to AC-17) (82955de)
- plugin-sdk/account: AccountConfig, Session, AccountStatus plumbed through definePlugin (d9b2e54)
- plugin-sdk/browser: Browser with redirects, cookies, referer, clone (d6bb96a)
- plugin-sdk/browser: case-insensitive Headers (f043f0a)
- plugin-sdk/browser: CookieJar with RFC-6265-style domain matching (dc39b4b)
- plugin-sdk/captcha: captcha namespace with auto-detection and host bridge (51f9637)
- plugin-sdk/cli: amigo-plugin CLI with new/validate/test subcommands (4048ee4)
- plugin-sdk/container: RSDF, CCF, DLC parsers + detect() (16fadc8)
- plugin-sdk/errors: PluginError, ErrorCode, factories with never-return typing (652aa55)
- plugin-sdk/extraction: regex, json, encoding, html helpers (76f4dbe)
- plugin-sdk/form: Form extraction + Page.getForm + Browser.submitForm (413ebab)
- plugin-sdk/host: define host-api request/response types (b831ccb)
- plugin-sdk/host: HostApi interface + injection hooks (16e52fe)
- plugin-sdk/host: MockHostApi with request recording and error injection (1e30a5b)
- plugin-sdk/host: Phase 1 tests + drop node-only deps from mock (17b15fc)
- plugin-sdk/javascript: run/unpack wrappers with permission gate (a9b8e9d)
- plugin-sdk/media: HLS master+media, DASH, variant selection helpers (829f0dc)
- plugin-sdk/plugin: shared types, PluginContext, definePlugin, defineDecrypter (65220e8)
- plugin-sdk/utility: parseSize, parseDuration, parseDate, formatFilename (629b5dd)
- plugin-sdk: introduce @amigo/plugin-sdk (plan + implementation) (12fb9fc)
- plugins test always enables verbose/debug logging (4713026)
- plugins: declare apiVersion and permissions.domains (5b2489f)
- rename CLI binary to amigo-dl and enhance direct download functionality (74a8088)
- resolve() returns DownloadPackage with grouped downloads (d8e257e)
- server statistics UI behind feature toggle (ca53033)
- server/auth: cookie + api-token auth, setup-guard, proxy-aware IP (d2db4d4)
- server: add bulk download endpoints and fix the retry action (c4cb317)
- server: add POST /api/v1/downloads/container for DLC import (b7c4c7d)
- server: background plugin auto-update task (opt-in) (2f0fa57)
- server: bind to loopback by default, add bearer-token auth, tighten CORS (a09d19c)
- server: bind to loopback by default, add bearer-token auth, tighten CORS (e8ded1c)
- server: device-pairing endpoints + headless setup from env vars (05e427b)
- server: live setup_complete + end-to-end auth flow tests (fc37062)
- server: name the session cookie krake_session (e3d6980)
- server: send X-Krake-* webhook headers (8e578ce)
- server: setup wizard + login/logout/me endpoints (ef137fa)
- site: add marketing site skeleton + pnpm workspace refactor (b60f139)
- stream progress over WebSocket and add URL-based routing (f4a8199)
- suggest plugin installation when URL matches registry (f116473)
- tauri: register the krake:// deep-link scheme (18bb697)
- tauri: use the Kr pixel monogram as the app icon (ad0a94d)
- TUI output modes, multi-hoster plugins, XFS plugin, host-API extensions (4cdc898)
- ui: add accessible primitives to @amigo/ui (ee41e07)
- ui: one accent, the brand lime, instead of six palettes (519a2a4)
- ui: split accent tokens by role and self-host Inter (4d7d8c8)
- ui: use the Kr pixel monogram as favicon, PWA and in-app logo (0547a9e)
- Usenet protocol dispatch, categories, duplicates, queue reorder (d106dc2)
- VS Code dark mode, unified side panel, plus button in header (361e4b8)
- VS Code dark mode, unified side panel, plus button in header (6f3871b)
- web-ui: "Command Deck" UI/UX redesign — palette, mobile nav, motion, i18n & a11y (d46b593)
- web-ui: bring the off-system screens into the design system (5ec52bf)
- web-ui: command palette, mobile nav, header status bar, motion system (9579b07)
- web-ui: download rows lay out by their own width, denser phone list (b5a0ab7)
- web-ui: drop the colour palette setting (41e284f)
- web-ui: i18n completion, focus traps, undo, settings a11y (148f82a)
- web-ui: make the history page usable (4df456d)
- web-ui: offline empty state, plugin enable/disable toggle (46fbea3)
- web-ui: setup wizard, login page, pairing modal, auth gate (271b9ed)
- web-ui: show a download's host instead of its full URL (4ea25aa)
- web-ui: unify the download list and make it keyboard-operable (ea86852)
- web-ui: wire up the plugin marketplace (39924fd)
- wire captcha, webhook, and notification endpoints end-to-end (3008952)
Bug Fixes
- /spec-fix updates affected specs when fix changes spec'd behavior (c8374a9)
- adapt to rand 0.10 API changes (232fc7a)
- add libclang-dev to Docker build for rquickjs bindgen (396ba06)
- add protobuf-compiler and Cargo.lock for CI builds (fd22ab0)
- add protobuf-compiler and Cargo.lock for CI builds (b3f3104)
- address all Copilot review comments on PR #15 (655ef30)
- address Copilot review — bound login RL map, persist full reorder set (11080c8)
- address Copilot review comments on PR #14 (46a2342)
- address Copilot review comments on PR #19 (a0d2095)
- address Copilot review comments on PR #19 (250e874)
- address Copilot review comments on PR #21 (af1016f)
- address HIGH-severity security tickets (#29, #30, #32) (65da865)
- address PR #72 review — .sig asset, owner cache bound, blank secret (d84fa17)
- bugs, dead code, misleading stubs, and UX gaps across backend and web-ui (db7525f)
- bugs, dead code, misleading stubs, and UX gaps across backend and web-ui (c3215d6)
- change default port from 8080 to 1516 to avoid servarr conflicts (c82a140)
- CI failures — suppress lib dead_code warnings, fix Docker image tags (4785154)
- CI pipeline failures from Tauri workspace integration (2428a39)
- ci: build cleanly on the current stable toolchain; clarify signer naming (66af253)
- ci: bump versions without release-please's rust strategy (3bf9f35)
- ci: bump versions without release-please's rust strategy (0ea62c7)
- ci: grant packages:write to release-please caller workflow (b8288e6)
- ci: grant packages:write to release-please caller workflow (0939968)
- ci: green main again: rustix 1.1.6 for cargo audit, release PR auto-merge without squash (cb5d890)
- ci: migrate web-ui, plugin-sdk, and docker build to pnpm (b2402e9)
- cli: drop unused cancel sender in direct download path (528fb44)
- cli: satisfy clippy::manual_checked_ops for download progress (0568acc)
- code review audit — bugs, dead code, and missing integrations (0c51df1)
- code review audit — bugs, dead code, and missing integrations (b879ce0)
- code-review cleanup — security, download-engine correctness, plugins, web-ui (29fbb1c)
- copy web-ui dist to correct path in Docker build (b82c2eb)
- core,plugin-runtime: address PR review on segment streaming & cache (02ee1a8)
- core/chunk: kill the underflow in ChunkPlan::split (6618743)
- core/coordinator: bigger event buffer, share progress channel across retries (9e36ef8)
- core/http: fsync downloaded files before declaring success (928e9cf)
- core/nntp: hostname validation, IO timeouts, explicit TLS verify (f5c792b)
- core/postprocess: block ZIP-Slip via symlink entries (aee87db)
- core: a paused download keeps the progress it had reached (e4cf217)
- core: address Copilot review on #58 (481149a)
- core: allow cancellation during retry and harden speed calc (1aa2de1)
- core: bound WAL growth with autocheckpoint (4e81121), closes #38
- core: cancel the in-flight task before retrying a download (a47edfd)
- core: close TOCTOU race in add_download_with_options (#53) (470f921)
- core: close TOCTOU race in add_download_with_options (#53) (eb75821)
- core: enforce retry base_delay floor to prevent hot-loop (2da7773), closes #37
- core: log completed downloads in the history (0d1e692)
- core: mark a download as retrying during the backoff, not during the retry (0ff59bf)
- core: migrate rand usage to the 0.9 API (6fc5363)
- core: record filename and size of plain HTTP downloads, fail fast on 4xx (4b08fd9)
- core: repair Usenet binary path, bandwidth hang, chunk corruption, pause (fbb5c2b)
- core: require checksum for self-update, guard 7z/RAR/tar against zip-slip (f82fbd8)
- core: robustness fixes across NZB, DASH, config, chunking, NNTP, coordinator (402d46d)
- core: tear down progress reporter and sibling chunk tasks on chunk failure (ca3df34)
- core: upgrade rusqlite to 0.41 for the libsqlite3-sys advisory (f273800)
- core: verify reassembled chunk size before rename (b2fe9fb), closes #34
- correct addToast argument order across all pages (ad8b015)
- critical security and logic bugs across codebase (9af9e16)
- critical security and logic bugs across codebase (a8a0185)
- deps: make rand 0.10 bump compile (openssl/tar cargo group update) (43c62ee)
- deps: make tauri 2.11.1 + rand 0.9 bump (PR #61) build green (a1d14b1)
- deps: override fast-uri to >=3.1.2 to clear pnpm audit (f949c25)
- deps: override svelte/ws/devalue to clear pnpm audit (01b410f)
- deps: pin vulnerable transitive npm deps via pnpm overrides (1645049)
- deps: replace sevenz-rust with sevenz-rust2 and bump vulnerable crates (292bcda)
- deps: resolve cargo and pnpm audit advisories (7270e69)
- deps: resolve cargo and pnpm audit advisories (5ddf08a)
- deps: resolve cargo-audit advisories (anyhow bump + quick-xml ignores) (fa990a8)
- deps: update hyper and the Tauri updater for open advisories (f5c586c)
- docker: add entrypoint with PUID/PGID and volume checks (3088a0d), closes #42
- don't check off acceptance criteria in spec files (6d6b526)
- extractors/youtube: TTL + LRU on player-JS cache, deadline on QuickJS (ee69510)
- harden coordinator, resume, extraction, plugin updates, JSON parsing (2ec8b78)
- make webhook signing mandatory (#29) (40844ff)
- multiple bugs across core, plugins, web-ui, and docker (ae75e59)
- multiple bugs across core, plugins, web-ui, and docker (f451bf9)
- multiple bugs across core, plugins, web-ui, and docker (689eae8)
- multiple bugs across core, plugins, web-ui, and docker (9d110d8)
- nightly build missing server binary and broken artifact upload (51d09b5)
- nightly build missing server binary and broken artifact upload (d6c920a)
- path-traversal, resume corruption, zip-bomb, plugin updates, JSON parsing (88964a6)
- plugin sandbox hardening (#78, #80–#85) + green dependency audits (supersedes #86) (351f9d8)
- plugin-runtime: address review findings on the plugin host (f9ed787)
- plugin-runtime: cap regex / HTML / base64 inputs (d8c0982)
- plugin-runtime: collapse redirect match arm (clippy 1.96 collapsible_match) (f75868b)
- plugin-runtime: enforce per-plugin storage quota (a9d6db8)
- plugin-runtime: enforce resolve/postProcess timeouts via interrupt handler (f0bc0bb)
- plugin-runtime: harden the plugin sandbox boundary (b528714)
- plugin-runtime: inject registry Ed25519 pubkey at compile time (e2a2d48)
- plugin-runtime: isolate plugin storage by declared id, harden HTTP (7157bcd)
- plugin-runtime: per-plugin cookie jars (4aff9a2)
- plugin-runtime: settle a Promise returned by resolve() (b329343)
- plugin-runtime: show a thrown non-Error value as its string form (60f6e46)
- plugin-runtime: validate registry candidates before they reach disk (10ffee3)
- plugin-runtime: Wasm executor reports a missing return value like the native engine (AC-06, AC-07) (808d29c)
- plugin-sdk: address Copilot review comments (b12dd32)
- plugins: correct link pairing, honor XFS wait, validate keys before store (14d010e)
- plugins: strip anchor tags to a fixed point (CodeQL: incomplete sanitization) (c38d71f)
- prevent panic on malformed NZB with missing </file> closing tag (f6f62f2)
- queue stall, non-atomic history, regex perf, test masking (e019ebe)
- re-enable Click'n'Load in Tauri via amigo-server crate (d305615)
- re-sync agent skills (acceptance-criteria headings in any case) (0801589)
- re-sync agent skills (commit gate, spec-build completion) (634c469)
- resolve all CI clippy warnings and unused import errors (e8d2026)
- resolve all CI pipeline failures (clippy, svelte-check, warnings) (196c98f)
- resolve clippy redundant_closure warning in ZIP extraction (53e8cbb)
- resolve clippy redundant_closure warning in ZIP extraction (5037c1c)
- resolve nightly build errors — missing icons, clippy warnings, and release-build stub (beb08a0)
- resolve nightly build failures across all platforms (53e4461)
- resolve nightly build failures across all platforms (804810a)
- resolve nightly build failures across macOS, aarch64-linux, and … (93be711)
- resolve nightly build failures across macOS, aarch64-linux, and Tauri installers (8be1cda)
- resolve pre-existing clippy warnings in server crate (a4eb6b3)
- restore libclang-dev in Docker for rquickjs (plugin-runtime) (f852009)
- scope WebSocket download events per owner (#32) (d28e98b)
- sdk,core: correct container detection ordering and DLC docs (F1/P4) (5eda1ea)
- server: apply baseline security headers to every response (f2e6b5d)
- server: avoid Instant underflow in feedback rate limiter (6179539)
- server: cap upload body size for /downloads/nzb and /downloads/container (050481c)
- server: close NZBGet JSON-RPC auth bypass (868d3c7)
- server: mark session cookies Secure over HTTPS, clear both on logout (2fff42f)
- server: mark session cookies Secure over HTTPS, clear both on logout (f213cfb)
- server: no duplicate NZBGet history entries, history delete removes the archive entry (1d16e73)
- server: persist webhooks to config and keep the dispatcher in sync (SV3) (c62ec08)
- server: redact secrets in GET /api/v1/config (dc8113d)
- server: report live progress of running downloads over REST (0d826e4)
- server: scrub secrets from feedback before submitting (dfb6a5d), closes #36
- server: SSRF guard for webhook + RSS outbound URLs (517f40d)
- server: SSRF-guard download paths, rate-limit login, close IP-block gaps (2699954)
- server: URL allowlist + body cap on Click'n'Load endpoints (96d5ac5)
- site: make
npx wrangler deploy work from workspace root (1ea6512)
- site: make
npx wrangler deploy work from workspace root (a72ec46)
- site: move wrangler.jsonc into site/ for Workers Builds (bcad54d)
- tests: address Copilot review on PR #60 (1623015)
- UI polish — hover states, focus styling, empty states, dead code cleanup (3ace985)
- ui: full-height pause icon, muted knob on a switched-off toggle (f4be71a)
- updater: install release archives and sign them for self-update (8852168)
- updater: install release archives and sign them for self-update (72bdffd)
- URL decoding corruption, XML parser panics, timer leaks, DnD bug (c734193)
- use cross tool for aarch64 in release-build + add Tauri signing pubkey (ed9a95a)
- verify Ed25519 signature on core self-update (#30) (94be21f)
- web-ui: add a layer manager and fix the broken drag and captcha trap (1fce7cd)
- web-ui: address Copilot review on #65 (cc0d961)
- web-ui: cleanup popstate listener via onMount lifecycle (9088dc7)
- web-ui: correct byte formatting units and clamp magnitude index (d718b59)
- web-ui: guard shortcuts in inputs, wire reorder + report, i18n, ws proxy (93ff487)
- web-ui: keyboard-operable context menu (5e2efd8)
- web-ui: name the saved file in the completion notification (115febb)
- web-ui: read WebSocket events from the flat server payload (45d554a)
- web-ui: readable download rows: file name, failure reason, phone layout (065d5a7)
- web-ui: safe context-menu delete, in-flight action guards, i18n coverage (95a005d)
- web-ui: shortcut hints as key caps, no doubled stats, dependent toggles (ea5497f)
- web-ui: show download progress, names and failure reasons; one accent; denser Downloads screen (6b6a4fb)
- wrap env var mutations in unsafe blocks for Rust 2024 edition (3463281)
- Zip Slip path traversal + tar absolute path extraction (7f7c112)
Performance Improvements
- build: add tuned release profile (fat LTO, codegen-units=1, strip) (ef5e3f3)
- build: set panic = "abort" for the release profile (f71fb82)
- core,server: buffer download writes and stream chunk reassembly (203bb3a)
- core: stream HLS/DASH segments to disk instead of buffering in RAM (27e32e5)
- core: tune SQLite pragmas, cache statements, batch chunk inserts (74446d7)
- deps: trim tokio feature set and drop it from extractors (12291c5)
- extractors,server: hoist hot-path regexes to LazyLock statics (5efda97)
- extractors: store cached player JS as Arc<str> (f39f8d9)
- plugin-runtime: cache compiled regexes; harden base64 and JS interop (3279558)
- plugin-runtime: cache SWC transpilation and registry URL regexes (cc91feb)
- web-ui: code-split pages and isolate the Svelte vendor chunk (ad02aad)
- whole-repo performance optimization (build, core, extractors, plugins, web-ui) (bc95f03)
Code Refactoring
- move amigo-named data paths to krake (1f67687)
- name the desktop executable Krake (3f68392)
- rename the AMIGO_* environment variables to KRAKE_* (98c4d19)
- rename the app to Krake (5a7f26c)
- rename the binaries to krake, krake-server and krake-plugin-host (b2d1b7b)
- rename the workspace crates to krake-* (1aa1559)
Build System
- move the npm workspace packages to the @amigo-labs scope (57646c3)
- publish the container image as ghcr.io/amigo-labs/krake (3929364)