Fast, resumable multi-connection downloads for the terminal
Built in Go with parallel range requests, resume-safe manifests, and practical tuning controls for large files.
- GitHub Pages: https://kinghacker9000.github.io/quickget/
- Local docs source:
docs/
- Parallel segmented downloads with HTTP range requests
- Reliable resume with manifest state (
.quickget.json) - Dynamic splitting (work stealing) for improved worker utilization
- Queue mode with fixed-size segments
- Automatic fallback to single-stream mode when ranges are unavailable
- Retry handling for transient network failures
- Custom headers (
-H) and configurableUser-Agent - Utilities for probing, status, cleanup, hashing, and disk tuning
go install github.com/KingHacker9000/quickget/cmd/quickget@latestOr download prebuilt binaries from:
https://github.com/KingHacker9000/quickget/releases/latest
go build ./cmd/quickget
go build ./cmd/quickget-agent
# Optional named binaries
go build -o quickget.exe ./cmd/quickget
go build -o quickget-agent.exe ./cmd/quickget-agentgo run ./cmd/quickget --helpquickget-agent is an advanced/developer component for integration and agent workflows.
Most users only need the quickget CLI.
go build -o quickget-agent.exe ./cmd/quickget-agentquickget-agent is intended for desktop/background integration scenarios.
The quickget CLI remains the primary user-facing tool for normal use.
The current agent implementation is local-only and experimental.
# Basic download
quickget.exe download https://example.com/file.iso
# Specify output file and worker count
quickget.exe download -o file.iso -n 12 https://example.com/file.iso
# Legacy shorthand (equivalent to download command)
quickget.exe -o file.iso -retries 5 https://example.com/file.isoquickget.exe download [options] <url>
quickget.exe inspect <url>
quickget.exe server-test <url>
quickget.exe status <output-file>
quickget.exe clean <output-file>
quickget.exe hash <file>
quickget.exe disk-test -o <temp-test-file>
quickget.exe tune-disk -o <temp-test-file>
quickget.exe profile [options]
| Flag | Description | Default |
|---|---|---|
-o string |
Output filename (optional; auto-detected if omitted) | auto |
-dir string |
Target directory | OS Downloads folder |
-n int |
Parallel connections | 8 |
-retries int |
Max retries per segment/chunk | 3 |
-v |
Verbose per-chunk progress output | false |
-d |
Enable dynamic splitting/work stealing | true |
-min-split-size int |
Minimum bytes before a range can be split dynamically | 33554432 |
-min-dynamic-file-size int |
Minimum file size required to allow dynamic splitting | 67108864 |
-queue-mode |
Use queue-based fixed segment processing | false |
-segment-size int |
Segment size (bytes) for queue mode | 16777216 |
-buffer-size int |
Read/write buffer size in bytes | 1048576 |
-auto-buffer |
Auto-tune buffer size for target disk | false |
-http1 |
Force HTTP/1.1 (disable HTTP/2) | true |
-max-idle-conns int |
Global max idle HTTP connections | 1024 |
-idle-timeout int |
Idle connection timeout (seconds) | 90 |
-write-disk string |
Measure write stats only for this disk/volume (example: C:) |
empty |
-user-agent string |
User-Agent header value | QuickGet/1.0 |
-H value |
Custom HTTP header (repeatable) | none |
# Dynamic mode with higher parallelism
quickget.exe download -o sample.dat -n 16 -d https://proof.ovh.net/files/1Gb.dat
# Queue mode with larger fixed segment size
quickget.exe download -o sample.dat -n 12 -queue-mode -segment-size 33554432 https://proof.ovh.net/files/1Gb.dat
# Auto-tune buffer size and print verbose progress
quickget.exe download -o sample.dat -n 8 -auto-buffer -v https://proof.ovh.net/files/1Gb.dat
# Custom User-Agent and headers
quickget.exe download -o private.bin -user-agent "Mozilla/5.0 QuickGet" -H "Authorization: Bearer TOKEN" -H "X-Client: QuickGet" https://example.com/private.binQuickGet persists progress using:
<output-file>
<output-file>.quickget.json
If a download is interrupted, rerun the same command to continue. Delete the manifest file to reset progress.
QuickGet/
|-- cmd/
| `-- quickget/
| `-- main.go # CLI entrypoint
| `-- quickget-agent/
| `-- main.go # Agent entrypoint
|-- pkg/
| `-- quickget/
| |-- agent/ # Agent server, manager, and auth
| |-- agentclient/ # Client integration helpers
| |-- api/ # Shared API request/response types
| |-- quickget.go # Public package facade
| |-- cli/
| | |-- cli.go # Command parsing and CLI dispatch
| | `-- cli_test.go
| |-- core/
| | `-- downloader.go # Download engine and orchestration
| |-- events/ # Event model and payload types
| |-- hash/
| | `-- hash.go # File hashing helpers
| |-- manifest/
| | |-- manifest.go # Resume manifest model and I/O
| | `-- manifest_test.go
| |-- probe/
| | |-- probe.go # URL/server probing utilities
| | `-- probe_test.go
| |-- progress/
| | `-- progress.go # Progress reporting helpers
| `-- tune/
| `-- tune.go # Disk/buffer tuning logic
|-- .temp/ # Local scripts and benchmark tooling
|-- downloads/ # Local test output artifacts
|-- go.mod
|-- LICENSE
`-- README.md
Related docs:
# Run unit tests
go test ./...
# Built-in profiler / benchmark tournament
quickget.exe profile --level normal --sizes 10MB,100MB,1GB --repeats 3Use the built-in profile command to benchmark queue-mode settings and produce reproducible artifacts.
# Fast pass
quickget.exe profile --level quick --sizes 100MB --repeats 2
# Default balanced search
quickget.exe profile --level normal --sizes 10MB,100MB,1GB --repeats 3
# Full matrix sweep
quickget.exe profile --level exhaustive --sizes 1GB --repeats 2Profile outputs are written to:
.quickget/profiles/YYYY-MM-DD_HH-MM-SS/
raw_results.csv
summary.csv
recommendations.json
Use --url to force a specific test endpoint. URL must support byte ranges and be large enough for selected sizes.
- Range-based parallelism depends on server support and known file size.
- If range requests are unsupported, QuickGet automatically falls back to single-stream mode.
- If
User-Agentis not provided in custom headers, QuickGet applies-user-agent.
Licensed under the MIT License. See LICENSE.