Skip to content

Repository files navigation

QuickGet

CI CodeQL Release License: MIT Go Version

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.

Full Documentation

Features

  • 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 configurable User-Agent
  • Utilities for probing, status, cleanup, hashing, and disk tuning

Installation

Quick Install

go install github.com/KingHacker9000/quickget/cmd/quickget@latest

Or download prebuilt binaries from:

https://github.com/KingHacker9000/quickget/releases/latest

Build

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-agent

Run without building

go run ./cmd/quickget --help

Advanced/Developer Component: quickget-agent

quickget-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-agent

QuickGet Agent Preview

quickget-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.

Quick Start

# 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.iso

CLI Commands

quickget.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]

Download Flags

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

Examples

# 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.bin

Resume Behavior

QuickGet 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.

Repository Structure

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:

Development

# Run unit tests
go test ./...

# Built-in profiler / benchmark tournament
quickget.exe profile --level normal --sizes 10MB,100MB,1GB --repeats 3

Profiling and Benchmarking

Use 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 2

Profile 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.

Notes

  • 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-Agent is not provided in custom headers, QuickGet applies -user-agent.

License

Licensed under the MIT License. See LICENSE.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages