Skip to content

jdheim/toolfetch

Repository files navigation

Latest Release License SLSA: Level 3
Tests & Scans Security Scans CodeQL
Downloads

ToolFetch

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

Demo

Installation

  1. Download the latest release for your OS/architecture from Releases
  2. Move the toolfetch binary to a directory in your $PATH (e.g., system-wide: /usr/local/bin or user-specific: $HOME/.local/bin)

Verify Releases

See VERIFICATION.md for details.

Usage

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

You 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
|-- firefox

You 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
    |-- kitty

You 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"

Archive and Compression Formats

Currently, the following Archive Formats are supported:

  • tar
  • zip
  • jar

Warning

7z support is planned

and Compression Formats:

  • brotli
  • bzip2
  • deflate
  • gzip
  • lz4
  • lzma
  • pack200 (for jars)
  • snappy (excluding iwa)
  • xz
  • z
  • zstandard
  • concatenated streams for bzip2, gzip, xz and lz4

Checksum Verification Formats

Currently, the following Checksum Verification Formats are supported:

  • sha256
  • sha384
  • sha512

Custom Certificate Authorities

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

💖 Support

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.

Buy me a Coffee

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!

©️ License

Copyright 2026 JDHeim.com

This project is licensed under the Apache License, Version 2.0. See the LICENSE file for full license terms.

About

CLI for fetching and installing external tools from release URLs (e.g. GitHub releases) using a YAML configuration file

Resources

License

Stars

Watchers

Forks

Contributors