Download a large file faster from the command line by splitting it into many parallel range requests.
Resume a download that was interrupted partway through without re-downloading the completed portions.
Run a network speed test by downloading data and discarding it instead of writing to disk.
Add segmented, resumable downloading to your own Go program using piko as a library.
| uruhalushia/piko | iluvx/go-tg-api | dream-horizon-org/datagen | |
|---|---|---|---|
| Stars | 61 | 60 | 59 |
| Language | Go | Go | Go |
| Setup difficulty | easy | moderate | easy |
| Complexity | 2/5 | 3/5 | 2/5 |
| Audience | developer | developer | developer |
Figures from each repo's GitHub metadata at analysis time.
Only supports servers that allow HTTP range requests, ordinary single-stream downloads are not its use case.
piko is a small command line tool and Go library for downloading files by splitting them into segments and fetching the pieces in parallel. It can save a download to a file, throw the data away for pure speed testing, or hand the downloaded bytes back to your own code instead of writing to disk. It only handles downloads where the server supports range requests, so for a normal single stream download the README suggests using curl instead. As a command line tool, you point it at a URL and it downloads using a chosen number of parallel connections, with flags to resume an interrupted download, force HTTP/1.1 or HTTP/2, add custom headers, choose how it dials multiple resolved IP addresses, prefer IPv4 or IPv6, route through a proxy, or use a custom DNS resolver including DNS over TLS or DNS over HTTPS. Resuming works by keeping track of which byte ranges have already completed in a side file, and checking the remote file's size and its ETag or last modified value before reusing that partial data on a later run. Settings can also come from a config file in YAML, TOML, or JSON format stored in a config directory, with command line flags overriding anything set there. As a Go library, piko exposes functions to download a URL straight to a file, download a byte range into memory for your own storage or transport needs, or build a reusable client so repeated downloads skip re-checking the remote file's size each time. It also lets you build its underlying HTTP client with a specific protocol and proxy setting, or supply your own HTTP client if you need full control. Prebuilt binaries are published for macOS, Linux, Android, and Windows through GitHub Actions, alongside the option to install it directly with the Go toolchain. The project is licensed under GPL-3.0.
A command line tool and Go library that downloads files faster by splitting them into segments and fetching pieces in parallel, with resume support.
Mainly Go. The stack also includes Go.
You can use, modify, and share this freely, including commercially, but any modified version you distribute must also be open sourced under the same license.
Setup difficulty is rated easy, with roughly 5min to a first successful run.
Mainly developer.
This repo across BitVibe Labs
double-check against the repo, no cap.