Skip to content

Releases: bodaay/HuggingFaceModelDownloader

v3.0.4

11 Apr 18:14

Choose a tag to compare

What's Changed in v3.0.4

Bug-fix release tackling eight open issues reported against v3.0.3. Focused on download correctness, webui responsiveness, storage flexibility, and analyzer coverage for new quant formats. Every fix ships with regression tests; go test -race ./... is now fully green across every package.

Bug Fixes

  • Resumable downloads actually resume now (#70) — downloadSingle and each downloadMultipart part goroutine now open .part files with O_RDWR|O_CREATE (no truncate), stat the existing size, and issue Range: bytes=pos-end requests from that offset. Interrupted downloads resume correctly on rerun, and within-process retries after a flaky-connection cut no longer lose bytes. Previously every Ctrl+C silently re-fetched from zero and single-file downloads literally had no resume code path at all.

  • Unsloth Dynamic quant variants correctly labeled (#72) — the GGUF quant regex now supports Q{2..8}_K_XL / _XXL suffixes and IQ1_S / IQ1_M. Previously on repos like unsloth/Qwen3-30B-A3B-GGUF the regex silently collapsed six UD-Q*_K_XL files into Q2_K..Q8_K labels that collided with the real plain-K quants, and missed the two IQ1 files entirely. All 25 GGUF files in that repo now label correctly. Added quality/description map entries for Q2_K_L, Q2..8_K_XL, IQ1_S/M, IQ2_M, IQ3_XXS.

  • Multimodal GGUF repos auto-bundle the vision encoder (#76) — analyzeGGUF now partitions .gguf files into LLM quants vs mmproj vision encoders. A vision_encoder SelectableItem is emitted as Recommended by default, so the recommended CLI command for a multimodal repo becomes e.g. -F q4_k_m,mmproj-f16 for unsloth/gemma-3-4b-it-GGUF. Downloading a single quant now pulls in the matching projector automatically, matching LM Studio's behavior.

  • Progress no longer oscillates on slow/flaky connections (#75) — the multipart progress ticker now stops cleanly before assembly via an explicit done channel + WaitGroup, and an explicit final full-size reading is emitted after all parts complete. Root cause: the ticker kept stating part files while assembly was deleting them, emitting downloaded=0 events that made the UI appear stuck at 2.4% ↔ 2.5% for hours on slow links. Combined with the #70 fix above, flaky downloads of multi-GB files now converge cleanly.

  • Pause no longer claims the file is 100% done — fixed a regression in the #75 tail path where downloadMultipart on cancellation would fall past its errCh drain (cancelled goroutines return silently via sleepCtx without pushing errors) and emit a bogus downloaded == total event followed by assembly over an incomplete part set — corrupting the final file and deleting the very partial bytes the next resume was supposed to continue from. Now bails out with ctx.Err() immediately after the ticker shutdown. Regression test in TestDownloadMultipart_CancelMidStreamDoesNotClaim100.

  • Web UI no longer floods the browser with updates (#62) — two-layer fix:

    • Server-side 250ms per-job WebSocket broadcast coalescer in front of BroadcastJob. Progress events arriving inside the window collapse to a single flush of the latest state; terminal status changes (completed/failed/cancelled/paused) bypass the gate so pause/cancel transitions still feel instant.
    • Frontend renderJobs no longer does container.innerHTML = jobs.map(...).join('') on every tick. Per-job DOM elements are cached and updated in place — progress bar width and stats text change, but the card node, the action buttons, and their event listeners stay stable. Hover states persist and Pause/Cancel buttons are clickable during an active download.
  • Dismissed jobs stay dismissed across refresh (#68) — new POST /api/jobs/{id}/dismiss endpoint permanently removes a terminal-state job from the manager. Frontend dismissJob now calls the server before removing from local state, so page reloads and WebSocket reconnects don't repopulate it. Attempts to dismiss queued or running jobs return 409. The primary per-file-deletion ask in the same issue is tracked separately.

  • JobManager returns snapshots — data race fixedCreateJob, GetJob, ListJobs, and the internal WebSocket broadcast path all now return/forward cloned Job snapshots via a new cloneJobLocked helper. Previously the HTTP JSON encoder and the WS broadcaster would read Job fields while runJob was mutating them on a separate goroutine. go test -race ./... is now fully green across every package for the first time.

Features

  • --local-dir <path> CLI flag (#71, #73) — new flag mirroring huggingface-cli download --local-dir. Downloads real files into the chosen directory instead of the HF cache's blobs+symlinks layout. Right choice for feeding weights to llama.cpp / ollama, Windows users without Developer Mode, and NFS/SMB/USB transfers. Equivalent to the existing --legacy -o <path> form — both spellings are permanent and interchangeable, and --legacy is no longer marked for removal.

  • Installer defaults to ~/.local/bin — no more sudo prompt (#69) — the one-liner bash <(curl -sSL https://g.bodaay.io/hfd) install now picks a user-local install path in this order:

    1. ~/.local/bin if already in PATH
    2. ~/bin if already in PATH
    3. /usr/local/bin if writable
    4. Fallback to ~/.local/bin with a printed export PATH= line
      Explicit targets like install /usr/local/bin still work and still use sudo where needed. Root users still get /usr/local/bin by default.

Documentation

  • README now has a prominent Storage Modes section documenting both HF-cache-default and flat-file --local-dir modes as first-class, permanent options with when-to-use-which guidance.
  • docs/CLI.md and docs/V3_FEATURES.md updated to reflect the un-deprecated --legacy / --output flags and the new --local-dir spelling.

Test Infrastructure

  • TestAPI_Health no longer pins to a stale hardcoded version string.
  • TestJobManager_CreateJob no longer races its TempDir cleanup against in-flight runJob goroutines — new JobManager.WaitAll(timeout) lets the test block on actual goroutine exit before cleanup runs.

Full Changelog: v3.0.3...v3.0.4

v3.0.3

30 Jan 18:59

Choose a tag to compare

What's Changed in v3.0.3

Features

  • add GitHub Actions for releases and Docker, update to v3.0.0 (b1cf225)
  • add revision picker for multi-branch repos and improve web UI (183603c)
  • add modern web UI with analyze, cache browser, and authentication (Phase 3.9) (2bdad97)
  • add detailed Transformers model analysis (Phase 3.3) (1170f50)
  • add smart downloader analyzer for HuggingFace repositories (9c2b5c6)
  • add list, info, and mirror commands (0253046)
  • implement HuggingFace cache structure and manifest support (e2bd0c8)

Bug Fixes

  • load cache-dir from config file for all commands (5d7960f)
  • gracefully skip symlinks on Windows (downloads still work) (179e80b)
  • use correct HuggingFace repo name in examples (TheBloke/Mistral-7B-Instruct-v0.2-GGUF) (5a8ac93)
  • use 'install' command instead of -i flag to avoid conflict with CLI's -i (interactive) (0d0b5c9)
  • don't save binary to current directory unless -i flag is used (154f542)
  • update Dockerfile to Go 1.24 for go.mod compatibility (673445d)
  • align release workflow with installer script, reorder Quick Start (29db31b)
  • WebSocket message handling for Jobs page (c16f3c0)
  • use HuggingFace cache structure for web downloads (v3 mode) (fb4bcb3)
  • minor improvements to cache structure and rebuild (d71b6ee)

Documentation

  • update installer commands (-i → install, -w → serve) (959f368)
  • add GitHub Actions status badges, update Go version to 1.24 (91ee5a2)
  • add v3.0.0 release notes (bcc6648)
  • add web UI auth example to Quick Start (63ccc14)
  • remove unverifiable speed claims from README (0bf2bd7)
  • overhaul README for v3 with screenshots and feature highlights (d821b1d)

Other Changes

  • removed duplicate mirror sync (55370ee)

Full Changelog: v2.3.4-final...v3.0.3

v3.0.1 - Bug Fixes

30 Jan 11:34

Choose a tag to compare

Bug Fixes

  • Windows Support: Gracefully skip symlinks on Windows (downloads still work, friendly view skipped)
  • Installer Script: Changed -i to install command to avoid conflict with CLI's -i (interactive mode)
  • Example Repos: Fixed incorrect model names in documentation (TheBloke/Mistral-7B-GGUFTheBloke/Mistral-7B-Instruct-v0.2-GGUF)
  • Dockerfile: Updated to Go 1.24 for compatibility with go.mod

Documentation

  • Added Windows note about symlink limitations
  • Updated README with correct install and serve commands
  • Added GitHub Actions status badges

Full Changelog: v3.0.0...v3.0.1

v3.0.0 - The HuggingFace-Native Release

30 Jan 11:11

Choose a tag to compare

Release Notes - v3.0.0

Release Date: January 2026
The HuggingFace-Native Release

Highlights

Version 3.0.0 is a major release that brings full HuggingFace CLI compatibility. Your downloads are now stored in the standard HuggingFace cache structure, making them instantly accessible to Transformers, Diffusers, and any other HuggingFace-based tools.


New Features

HuggingFace Cache Structure (Default)

Downloads now go directly to ~/.cache/huggingface/hub/ - the same location used by huggingface_hub, Transformers, and other HuggingFace tools.

# Download a model - it's immediately available to Transformers
hfdownloader download microsoft/DialoGPT-medium

# Use it directly in Python - no copying needed!
from transformers import AutoModel
model = AutoModel.from_pretrained("microsoft/DialoGPT-medium")

Dual-Layer Storage

Get the best of both worlds:

  • HuggingFace cache: Content-addressable blobs for deduplication
  • Human-readable symlinks: Easy file browsing at ~/.cache/huggingface/hub/models--{owner}--{repo}/snapshots/{revision}/

Multi-Revision Support

Download specific branches, tags, or commits:

# Download a specific branch
hfdownloader download TheBloke/Mistral-7B-GGUF --revision main

# Download a specific tag
hfdownloader download owner/repo --revision v1.0.0

Model Analysis

Understand models before downloading with the new analyze command:

hfdownloader analyze microsoft/DialoGPT-medium

Shows:

  • Model architecture and framework
  • File types and sizes
  • Quantization formats available
  • Recommended filters for your use case

Enhanced Web UI

  • Revision picker - Select branches/tags from a dropdown
  • Model analysis - Analyze before downloading
  • Cache browser - Explore your local HuggingFace cache
  • Authentication - Secure your web server with --auth-user and --auth-pass

Web Authentication

Secure your web server when exposing to networks:

hfdownloader serve --auth-user admin --auth-pass secret

Legacy Mode

Still need the old flat directory structure? Use --legacy:

hfdownloader download TheBloke/Mistral-7B-GGUF --legacy -o ./models

Docker

Docker images are now automatically published to GitHub Container Registry:

# Pull the image
docker pull ghcr.io/bodaay/huggingfacemodeldownloader:3.0.0

# Run with HuggingFace cache mount
docker run --rm -p 8080:8080 \
  -v ~/.cache/huggingface:/home/hfdownloader/.cache/huggingface \
  ghcr.io/bodaay/huggingfacemodeldownloader:3.0.0 serve

Quick Start

# Analyze a model (no download)
bash <(curl -sSL https://g.bodaay.io/hfd) analyze TheBloke/Mistral-7B-GGUF

# Download Q4_K_M quantization only
bash <(curl -sSL https://g.bodaay.io/hfd) download TheBloke/Mistral-7B-GGUF:q4_k_m

# Start web UI with authentication
bash <(curl -sSL https://g.bodaay.io/hfd) serve --auth-user admin --auth-pass secret

# Install permanently
bash <(curl -sSL https://g.bodaay.io/hfd) -i

Migration from V2

V3 uses a different storage structure by default. Your V2 downloads remain intact.

Option 1: Keep using legacy mode for existing workflows

hfdownloader download owner/repo --legacy -o ./models

Option 2: Re-download to HuggingFace cache (recommended)

# New downloads go to ~/.cache/huggingface/hub/ by default
hfdownloader download owner/repo

Breaking Changes

  • Default storage location changed: Downloads now go to ~/.cache/huggingface/hub/ instead of ./Models/
  • Directory structure changed: Uses HuggingFace blob/symlink structure instead of flat files
  • -o flag behavior changed: In V3 mode, sets HF_HOME; in legacy mode, sets direct output path

Full Changelog

New Features

  • HuggingFace cache structure as default storage
  • analyze command for model inspection
  • --revision flag for multi-branch downloads
  • Web UI revision picker
  • Web UI cache browser
  • Web UI authentication (--auth-user, --auth-pass)
  • GitHub Actions for automated releases
  • GitHub Container Registry for Docker images

Improvements

  • Dual-layer storage (blobs + symlinks)
  • Better progress display
  • Improved error messages

Legacy Support

  • --legacy flag for V2-style flat directory structure
  • Existing V2 workflows continue to work


Full Changelog: v2.3.3...v3.0.0

Release 2.3.4

13 Jan 16:52

Choose a tag to compare

Updated Build script and binaries to avoid false positive virues detection for windows builds

Release 2.3.3

01 Jan 12:28

Choose a tag to compare

🐛 Bug Fixes

Fixed: TUI/Web UI showing incorrect total file size

  • Issue: Total download size would start at 8GB, then jump to 35GB, then 214GB during download
  • Cause: plan_item events were emitted incrementally during download loop, not upfront
  • Fix: All plan_item events are now emitted immediately after scanning, before downloads start

Fixed: Settings not taking effect in Web UI

  • Issue: Changing settings (connections, max-active, retries, etc.) had no effect on downloads
  • Cause: Settings were hardcoded in multiple places; serve command was missing flags
  • Fix:
    • Added MultipartThreshold, Verify, Retries fields to server Config
    • Added --multipart-threshold, --verify, --retries flags to serve command
    • Web UI now fetches settings from server on page load (authoritative source)

Fixed: Plan API missing Excludes and Endpoint

  • Issue: Preview/plan requests didn't respect exclude patterns or custom endpoint
  • Fix: Added Excludes, AppendFilterSubdir to job and Endpoint to settings in plan handler

Release 2.3.1

31 Dec 18:28

Choose a tag to compare

Release Notes - v2.3.1

Release Date: December 31, 2025

🎉 Community Features

This release incorporates contributions and suggestions from the community:

✨ New Features

🚫 Exclude Patterns (--exclude, -E)

Exclude specific files from downloads. Thanks to @jeroenkroese (#41)!

# Exclude markdown and ONNX files
hfdownloader download TheBloke/Mistral-7B-GGUF -E .md,onnx

# Exclude full precision models
hfdownloader download owner/repo -E fp16,fp32

🌍 Custom Endpoint (--endpoint)

Use HuggingFace mirrors or enterprise endpoints. Thanks to @windtail (#38)!

# Use China mirror
hfdownloader download owner/repo --endpoint https://hf-mirror.com

# Use enterprise endpoint
hfdownloader serve --endpoint https://your-enterprise.com/hf

🐳 Docker Support

Run hfdownloader in containers. Thanks to @cdeving (#50)!

# Build Docker image
docker build -t hfdownloader .

# Run CLI in container
docker run --rm -v ./models:/data hfdownloader download TheBloke/Mistral-7B-GGUF -o /data

# Run web server in container
docker run --rm -p 8080:8080 -v ./models:/data hfdownloader serve --models-dir /data/Models

📋 Changes

  • Added --exclude / -E flag to CLI download command
  • Added --endpoint flag to both download and serve commands
  • Added Excludes field to Job struct
  • Added Endpoint field to Settings struct
  • Created Dockerfile with multi-stage build
  • Updated API to support excludes in download requests
  • Updated settings endpoint to include custom endpoint config
  • Web UI: Added "Exclude" input field to Model and Dataset download forms
  • Web UI: Updated version display to v2.3.1

🙏 Acknowledgments

Special thanks to the community members whose PRs inspired these features:

Contributor PR Feature
@jeroenkroese #41 Exclude file patterns
@windtail #38 Custom HuggingFace endpoint
@cdeving #50 Docker support

Also thanks to the community for bug reports and PRs that helped identify issues in v2.3.0:

  • URL escaping fix (related to #60)
  • TUI speed improvements (related to #59)
  • API 400 fixes (related to #58)

Release Notes - v2.3.0

Release Date: December 31, 2025

🎉 Highlights

This is a major release introducing a brand new Web UI, complete project restructuring, and numerous bug fixes. The project has been reorganized into a clean, modular architecture following Go best practices.


✨ New Features

🌐 Web Interface

  • Beautiful Terminal-Noir themed Web UI for managing downloads
  • Real-time progress updates via WebSocket
  • Separate pages for downloading Models and Datasets
  • Per-file progress bars with live status updates
  • Settings management (connections, retries, verification mode)
  • Job deduplication - prevents duplicate downloads of the same repo

🚀 One-Liner Web Mode

Start the web UI instantly with:

bash <(curl -sSL https://g.bodaay.io/hfd) -w

Automatically opens your browser to http://localhost:8080

🔧 New CLI Commands

  • hfdownloader serve - Start the web server
  • hfdownloader version - Show version information
  • hfdownloader config - Manage configuration

📦 Reusable Go Package

The downloader is now available as an importable package:

import "github.com/bodaay/HuggingFaceModelDownloader/pkg/hfdownloader"

🐛 Bug Fixes

Fixed: "error: tree API failed: 400 Bad Request"

  • Repository paths with slashes (e.g., Qwen/Qwen3-0.6B) were being incorrectly URL-escaped
  • Now correctly handles repo IDs without double-escaping the slash

Fixed: TUI Speed/ETA Display Jumping Around

  • Implemented Exponential Moving Average (EMA) for smooth speed calculations
  • Added minimum time interval (50ms) before recalculating speed
  • Both per-file and overall speeds are now stable and readable

Fixed: TUI Total File Size Fluctuating

  • File totals no longer get overwritten with incorrect values during progress updates
  • Now only updates total if a valid value is provided

Fixed: Downloads Appearing Stuck

  • Removed blocking HEAD requests during repository scanning
  • Large repos (90+ files) now start downloading within seconds instead of minutes
  • Assumed LFS files support range requests (they always do on HuggingFace)

Fixed: Web UI Progress Not Updating

  • Added progressReader wrapper for real-time progress during single-file downloads
  • Progress events now use correct Downloaded field (cumulative bytes)
  • UI throttled to 10fps to prevent DOM thrashing

🏗️ Architecture Changes

Project Structure

The codebase has been completely reorganized:

├── cmd/hfdownloader/     # CLI entry point
├── internal/
│   ├── cli/              # CLI commands (Cobra)
│   ├── server/           # Web server & API
│   ├── tui/              # Terminal UI
│   └── assets/           # Embedded web assets
├── pkg/hfdownloader/     # Reusable download library
└── scripts/              # Installation scripts

Security Improvements

  • Output path is server-controlled - Cannot be changed via API or Web UI
  • Separate directories for models (./Models/) and datasets (./Datasets/)
  • Token is never logged or exposed in API responses

Testing

  • Comprehensive unit tests for JobManager, API handlers, and WebSocket
  • Integration tests for end-to-end download flows
  • Test coverage for job deduplication and cancellation

📊 Performance Improvements

Improvement Before After
Large repo scan (90+ files) 5+ minutes ~2 seconds
Progress update frequency 1 second 200ms
Speed display stability Jumpy/erratic Smooth (EMA)
Web UI responsiveness Laggy Throttled 10fps

🔄 Breaking Changes

  • Main package moved from hfdownloader/ to pkg/hfdownloader/
  • CLI now uses Cobra commands instead of flags-only
  • main.go replaced with cmd/hfdownloader/main.go
  • Old makefile replaced with build.sh

📥 Installation

One-Liner (Recommended)

# Install to /usr/local/bin
bash <(curl -sSL https://g.bodaay.io/hfd) -i

# Start Web UI
bash <(curl -sSL https://g.bodaay.io/hfd) -w

# Download a model directly
bash <(curl -sSL https://g.bodaay.io/hfd) download TheBloke/Mistral-7B-GGUF

From Source

git clone https://github.com/bodaay/HuggingFaceModelDownloader
cd HuggingFaceModelDownloader
go build -o hfdownloader ./cmd/hfdownloader

📋 Full Changelog

New Files:

  • cmd/hfdownloader/main.go - New CLI entry point
  • internal/server/* - Complete web server implementation
  • internal/assets/* - Embedded web UI (HTML/CSS/JS)
  • pkg/hfdownloader/* - Modular download library
  • build.sh - Cross-platform build script

Modified:

  • scripts/gist_gethfd.sh - Added -w flag for web mode
  • README.md - Updated documentation with web UI info
  • go.mod - Added new dependencies (Cobra, Gorilla WebSocket)

Removed:

  • hfdownloader/ - Moved to pkg/hfdownloader/
  • main.go - Replaced by cmd/hfdownloader/main.go
  • makefile - Replaced by build.sh

Release 2.3.0

31 Dec 16:56

Choose a tag to compare

Release Notes - v2.3.0

Release Date: December 31, 2024

🎉 Highlights

This is a major release introducing a brand new Web UI, complete project restructuring, and numerous bug fixes. The project has been reorganized into a clean, modular architecture following Go best practices.


✨ New Features

🌐 Web Interface

  • Beautiful Terminal-Noir themed Web UI for managing downloads
  • Real-time progress updates via WebSocket
  • Separate pages for downloading Models and Datasets
  • Per-file progress bars with live status updates
  • Settings management (connections, retries, verification mode)
  • Job deduplication - prevents duplicate downloads of the same repo

🚀 One-Liner Web Mode

Start the web UI instantly with:

bash <(curl -sSL https://g.bodaay.io/hfd) -w

Automatically opens your browser to http://localhost:8080

🔧 New CLI Commands

  • hfdownloader serve - Start the web server
  • hfdownloader version - Show version information
  • hfdownloader config - Manage configuration

📦 Reusable Go Package

The downloader is now available as an importable package:

import "github.com/bodaay/HuggingFaceModelDownloader/pkg/hfdownloader"

🐛 Bug Fixes

Fixed: "error: tree API failed: 400 Bad Request"

  • Repository paths with slashes (e.g., Qwen/Qwen3-0.6B) were being incorrectly URL-escaped
  • Now correctly handles repo IDs without double-escaping the slash

Fixed: TUI Speed/ETA Display Jumping Around

  • Implemented Exponential Moving Average (EMA) for smooth speed calculations
  • Added minimum time interval (50ms) before recalculating speed
  • Both per-file and overall speeds are now stable and readable

Fixed: TUI Total File Size Fluctuating

  • File totals no longer get overwritten with incorrect values during progress updates
  • Now only updates total if a valid value is provided

Fixed: Downloads Appearing Stuck

  • Removed blocking HEAD requests during repository scanning
  • Large repos (90+ files) now start downloading within seconds instead of minutes
  • Assumed LFS files support range requests (they always do on HuggingFace)

Fixed: Web UI Progress Not Updating

  • Added progressReader wrapper for real-time progress during single-file downloads
  • Progress events now use correct Downloaded field (cumulative bytes)
  • UI throttled to 10fps to prevent DOM thrashing

🏗️ Architecture Changes

Project Structure

The codebase has been completely reorganized:

├── cmd/hfdownloader/     # CLI entry point
├── internal/
│   ├── cli/              # CLI commands (Cobra)
│   ├── server/           # Web server & API
│   ├── tui/              # Terminal UI
│   └── assets/           # Embedded web assets
├── pkg/hfdownloader/     # Reusable download library
└── scripts/              # Installation scripts

Security Improvements

  • Output path is server-controlled - Cannot be changed via API or Web UI
  • Separate directories for models (./Models/) and datasets (./Datasets/)
  • Token is never logged or exposed in API responses

Testing

  • Comprehensive unit tests for JobManager, API handlers, and WebSocket
  • Integration tests for end-to-end download flows
  • Test coverage for job deduplication and cancellation

📊 Performance Improvements

Improvement Before After
Large repo scan (90+ files) 5+ minutes ~2 seconds
Progress update frequency 1 second 200ms
Speed display stability Jumpy/erratic Smooth (EMA)
Web UI responsiveness Laggy Throttled 10fps

🔄 Breaking Changes

  • Main package moved from hfdownloader/ to pkg/hfdownloader/
  • CLI now uses Cobra commands instead of flags-only
  • main.go replaced with cmd/hfdownloader/main.go
  • Old makefile replaced with build.sh

📥 Installation

One-Liner (Recommended)

# Install to /usr/local/bin
bash <(curl -sSL https://g.bodaay.io/hfd) -i

# Start Web UI
bash <(curl -sSL https://g.bodaay.io/hfd) -w

# Download a model directly
bash <(curl -sSL https://g.bodaay.io/hfd) download TheBloke/Mistral-7B-GGUF

From Source

git clone https://github.com/bodaay/HuggingFaceModelDownloader
cd HuggingFaceModelDownloader
go build -o hfdownloader ./cmd/hfdownloader

🙏 Acknowledgments

Thanks to the community for bug reports and PRs that helped identify issues:

  • URL escaping fix (related to #60)
  • TUI speed improvements (related to #59)
  • API 400 fixes (related to #58)

📋 Full Changelog

New Files:

  • cmd/hfdownloader/main.go - New CLI entry point
  • internal/server/* - Complete web server implementation
  • internal/assets/* - Embedded web UI (HTML/CSS/JS)
  • pkg/hfdownloader/* - Modular download library
  • build.sh - Cross-platform build script

Modified:

  • scripts/gist_gethfd.sh - Added -w flag for web mode
  • README.md - Updated documentation with web UI info
  • go.mod - Added new dependencies (Cobra, Gorilla WebSocket)

Removed:

  • hfdownloader/ - Moved to pkg/hfdownloader/
  • main.go - Replaced by cmd/hfdownloader/main.go
  • makefile - Replaced by build.sh

Release 2.0.0

05 Sep 16:52

Choose a tag to compare

Cleaner mental model (one download command, sensible defaults).

Filesystem‑only resume—reliable and transparent; no “state” files to corrupt.

JSON events and a TUI that looks great everywhere.

Strong cancellation story for real‑world, long‑running downloads.

Release 1.4.2

26 Oct 03:00

Choose a tag to compare

Forced cgo_enabled=0