A Go package for downloading files with progress monitoring, auto-resume, checksum validation, and concurrent batch downloads.
Grab is a Go package for downloading files from the internet with advanced features like progress monitoring, auto-resume, and checksum validation. It solves the problem of reliably downloading large files or batches of files with control over concurrency and bandwidth.
Go developers who need to implement robust file downloading in their applications, such as those building tools for package managers, ISO downloaders, or batch file processors.
Developers choose Grab for its combination of concurrent downloads, auto-resume capabilities, and validation features, all with sane defaults that mimic common web clients while avoiding unnecessary state files.
A download manager package for Go
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports concurrent downloading of multiple files, improving efficiency for large-scale operations like package repositories or ISO libraries, as shown in the batch downloads feature.
Automatically resumes incomplete downloads on subsequent attempts, mimicking tools like cURL and wget, which is ideal for immutable remote files.
Validates downloaded files using checksums to ensure data integrity, with extensible hash algorithms for custom validation needs.
Allows application of rate limiters to control download bandwidth, preventing server overload and managing network resources effectively.
The stateless design can lead to corrupted downloads if local or remote files are modified outside of Grab, requiring immutable files or disabled resume, as admitted in the design trade-offs.
Primarily designed for HTTP downloads, lacking built-in support for other protocols, which may necessitate extra work for non-HTTP use cases.
For straightforward single-file downloads, Grab might introduce unnecessary complexity compared to using Go's standard net/http package directly.