ToolFetch is a CLI for fetching and installing external tools from release URLs (e.g. GitHub releases) using a YAML configuration file.
It is designed for:
- setting up new developer machines quickly and consistently
- reproducible tool installations
- Download the latest release for your OS/architecture from Releases
- Move the
toolfetchbinary to a directory in your$PATH(e.g., system-wide:/usr/local/binor user-specific:$HOME/.local/bin)
See VERIFICATION.md for details.
Given the following configuration file named toolfetch.yaml:
destination: /opt
tools:
- id: dbeaver
url: "https://dbeaver.io/files/dbeaver-ce-latest-linux.gtk.x86_64.tar.gz"When you invoke the command: toolfetch --config "toolfetch.yaml", the latest version of the tool will be installed
like this:
/opt
|-- dbeaverYou can use optional placeholder: ${version} in url which will be replaced with version value at runtime:
destination: "/opt"
tools:
- id: kitty
version: "0.44.0"
url: "https://github.com/kovidgoyal/kitty/releases/download/v${version}/kitty-${version}-x86_64.txz"
- id: firefox
version: "146.0.1"
url: "https://ftp.mozilla.org/pub/firefox/releases/${version}/linux-x86_64/en-US/firefox-${version}.tar.xz"When you invoke the command again, tools will be installed like this:
/opt
|-- kitty
|-- firefoxYou can optionally define a destination key for a specific tool to install it somewhere else:
destination: "/opt"
tools:
- id: kitty
version: "0.44.0"
url: "https://github.com/kovidgoyal/kitty/releases/download/v${version}/kitty-${version}-x86_64.txz"
destination: "/opt/tools"
- id: firefox
version: "146.0.1"
url: "https://ftp.mozilla.org/pub/firefox/releases/${version}/linux-x86_64/en-US/firefox-${version}.tar.xz"Now, when you invoke the same command, tools will be installed like this:
/opt
|-- firefox
|-- tools
|-- kittyYou can optionally define a checksums key for a specific tool to verify the downloaded archive before it is extracted:
destination: "/opt"
tools:
- id: kitty
version: "0.44.0"
url: "https://github.com/kovidgoyal/kitty/releases/download/v${version}/kitty-${version}-x86_64.txz"
checksums:
sha256: "5b502801c8814c9fc5a2e8d9cfdf1c2ec5ee78b3e647f898704ad537a2ff452d"
- id: firefox
version: "146.0.1"
url: "https://ftp.mozilla.org/pub/firefox/releases/${version}/linux-x86_64/en-US/firefox-${version}.tar.xz"
checksums:
sha256: "36a4dc0e3be8af2d49d8388021abf790976d2398162b9d13a6d758cc8c37f8dd"Currently, the following Archive Formats are supported:
tarzipjar
Warning
7z support is planned
and Compression Formats:
brotlibzip2deflategziplz4lzmapack200(forjars)snappy(excludingiwa)xzzzstandard- concatenated streams for
bzip2,gzip,xzandlz4
Currently, the following Checksum Verification Formats are supported:
sha256sha384sha512
Warning
TrustStore configuration support in toolfetch.yaml is planned
If your organization uses custom Certificate Authorities, you may need to configure a Java TrustStore.
Pass JVM options directly to toolfetch:
-Djavax.net.ssl.trustStore=path/to/truststore-Djavax.net.ssl.trustStorePassword=changeit
Otherwise, you may encounter an exception like:
(certificate_unknown) PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Hey there! If you enjoy my work and would like to support me, consider buying me a coffee! 🙂 Your contributions help me keep creating, and I truly appreciate every bit of support you offer.
Also, please consider giving this project a ⭐ on GitHub. This kind of support helps promote the project and lets others know that it's worth checking out.
Thank you for being amazing!
Copyright 2026 JDHeim.com
This project is licensed under the Apache License, Version 2.0. See the LICENSE file for full license terms.
