huber

Huber is a command-line interface tool for managing packages from GitHub repositories. It allows you to install, update, and manage packages from GitHub repository releases in a simple and efficient way.

What features does Huber provide?

  • Manage (install, update, uninstall, show, current) multiple version packages from GitHub repository releases
  • Search popular GitHub repositories that Huber manages in a curated list
  • Lock and unlock installed package versions
  • Save and restore package versions
  • and more..., please check the documentation for more details

note

This documentation is for the version starting from 1.0.0. If you are using older versions, suggest upgrading to the latest version.

Installation

Huber is supported on Linux, macOS, and Windows platforms.

  • Linux (x86_64/amd64, aarch64/arm64, arm)
  • MacOS (x86_64/amd64, aarch64/arm64)
  • Windows (x86_64/amd64)

You can install Huber via the following methods:

Cargo:

$ cargo install huber

Shell script:

$ curl -sfSL https://raw.githubusercontent.com/innobead/huber/main/hack/install.sh | sh -

PowerShell:

. { iwr -useb https://raw.githubusercontent.com/innobead/huber/main/hack/windows/install.ps1 } | iex; install

Precompiled binaries:

Download Huber executables from GitHub releases

Getting Started

After installing Huber, you can start using it by running the huber command.

$ huber --help
Huber, simplify GitHub package management

Usage: huber [OPTIONS] <COMMAND>

Commands:
  config       Manage Huber configurations
  current      Update the current package versions
  completions  Show command completions for the specified shell
  flush        Remove outdated installed artifacts
  info         Show package information
  install      Install packages
  repo         Manage repositories
  reset        Reset Huber
  search       Search package
  self-update  Update huber
  show         Show installed packages
  uninstall    Uninstall packages
  update       Updates the installed packages
  save         Save the installed package list to a file
  load         Load installed packages from a file generated by save command
  lock         Lock packages or Show locked packages
  unlock       Unlock packages
  help         Print this message or the help of the given subcommand(s)

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help
  -V, --version
          Print version

Search and install a package:

$ huber search k9s
 Name  Description                                          Source 
 k9s   🐢 Kubernetes CLI To Manage Your Clusters In Style!  https://github.com/derailed/k9s 
 
$ huber install k9s
[INFO ] k9s version not specified, getting the latest version (v0.32.7)
[INFO ] Installing package k9s@latest/v0.32.7
[INFO ] Downloading https://github.com/derailed/k9s/releases/download/v0.32.7/k9s_Linux_amd64.tar.gz
[INFO ] Installed executables of k9s:
    [
        "/home/davidko/.huber/bin/k9s",
    ]
[INFO ] k9s@latest/v0.32.7 installed

$ k9s version
 ____  __.________       
|    |/ _/   __   \______
|      < \____    /  ___/
|    |  \   /    /\___ \ 
|____|__ \ /____//____  >
        \/            \/ 

Version:    v0.32.7
Commit:     6b5d24f5741a1789fb97ba3e11f0ee868d93459d
Date:       2024-11-16T20:22:28Z

For frequently used and advanced commands, please check the corresponding sections.

License

The Huber source and documentation are released under the Apache License v2.0.

The install Command

The install command installs packages. You can specify the package name and version to install, install multiple packages at once, install the latest version of a package without specifying the version, and install packages from a file generated by the load command.

$ huber install --help
Install packages

Usage: huber install [OPTIONS] <NAME_VERSION>...

Arguments:
  <NAME_VERSION>...  Package name (e.g. 'package-name' or 'package-name@version')

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --prefer-stdlib <PREFER_STDLIB>
          Prefer standard library (only for Linux or Windows) [possible values: gnu, musl, msvc]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help 

Examples

Install a package

$ huber install k9s
[INFO ] k9s version not specified, getting the latest version (v0.32.7)
[INFO ] Installing package k9s@latest/v0.32.7
[INFO ] Downloading https://github.com/derailed/k9s/releases/download/v0.32.7/k9s_Linux_amd64.tar.gz
[INFO ] Installed executables of k9s:
    [
        "/home/davidko/.huber/bin/k9s",
    ]
[INFO ] k9s@latest/v0.32.7 installed

$ huber install k9s@v0.32.5
[INFO ] Installing package k9s@v0.32.5
[INFO ] Downloading https://github.com/derailed/k9s/releases/download/v0.32.5/k9s_Linux_amd64.tar.gz
[INFO ] Installed executables of k9s:
    [
        "/home/davidko/.huber/bin/k9s",
    ]
[INFO ] k9s@v0.32.5 installed

$ huber show
 Name     Version  Current  Kind 
 k9s      v0.32.5  true     Release 

$ huber show --all
 Name     Version  Current  Kind 
 k9s      v0.32.7  false    Release 
 k9s      v0.32.5  true     Release 

Install multiple packages

$ huber install k9s kubectl
[INFO ] kubectl version not specified, getting the latest version (v1.32.1)
[INFO ] Installing package kubectl@latest/v1.32.1
[INFO ] k9s version not specified, getting the latest version (v0.32.7)
[INFO ] Installing package k9s@latest/v0.32.7
[INFO ] Installed executables of k9s:
    [
        "/home/davidko/.huber/bin/k9s",
    ]
[INFO ] k9s@latest/v0.32.7 installed
[INFO ] Installed executables of kubectl:
    [
        "/home/davidko/.huber/bin/kubectl",
    ]
[INFO ] kubectl@latest/v1.32.1 installed

The info Command

The info command shows package information.

$ huber info --help
Shows package information

Usage: huber info [OPTIONS] <NAME>

Arguments:
  <NAME>  Package name

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Show package information

$ huber info k9s
 Name  Version  Source             Targets 
 k9s   v0.32.7  Github:            - LinuxAmd64: 
                  owner: derailed      artifact_templates: 
                  repo: k9s            - k9s_Linux_amd64.tar.gz 
                                   - LinuxArm64: 
                                       artifact_templates: 
                                       - k9s_Linux_arm64.tar.gz 
                                   - MacOSAmd64: 
                                       artifact_templates: 
                                       - k9s_Darwin_amd64.tar.gz 
                                   - MacOSArm64: 
                                       artifact_templates: 
                                       - k9s_Darwin_arm64.tar.gz 
                                   - WindowsAmd64: 
                                       artifact_templates: 
                                       - k9s_Windows_amd64.zip 

The search Command

The search command searches for a package by name or regex pattern.

$ huber search --help
Search package

Usage: huber search [OPTIONS] [NAME]

Arguments:
  [NAME]  Package name or regex search with --pattern

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --pattern
          Regex search
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --owner <OWNER>
          Package owner
      --all
          Show all the released versions
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Search packages by pattern

$ huber search --pattern wasm
 Name         Description                                                                                              Source 
 rustwasmc    Tool for building Rust functions for Node.js. Combine the performance of Rust, safety and portabilit...  https://github.com/second-state/rustwasmc 
 wasm-to-oci  Use OCI registries to distribute Wasm modules                                                            https://github.com/engineerd/wasm-to-oci 
 wasme        Web Assembly tools and SDKs for extending cloud-native infrastructure                                    https://github.com/solo-io/wasm 
 wasmer       πŸš€ Fast, secure, lightweight containers based on WebAssembly                                             https://github.com/wasmerio/wasmer 
 wasmtime     A lightweight WebAssembly runtime that is fast, secure, and standards-compliant                          https://github.com/bytecodealliance/wasmtime 

Search a package by name. Using the --all flag to show all the released versions.

$ huber search wasmtime
 Name      Description                                                                      Source 
 wasmtime  A lightweight WebAssembly runtime that is fast, secure, and standards-compliant  https://github.com/bytecodealliance/wasmtime 
$ huber search wasmtime --all
 Version  Kind 
 dev      PreRelease 
 v29.0.1  Release 
 v29.0.0  Release 
 v28.0.1  Release 
 v28.0.0  Release 
 v27.0.0  Release 
 v26.0.1  Release 
 v26.0.0  Release 
 v25.0.3  Release 
 v25.0.2  Release 
 v25.0.1  Release 
 v25.0.0  Release 
 v24.0.2  Release 
 v24.0.1  Release 
 v24.0.0  Release 
 ...

The show Command

The show command shows installed packages.

$ huber show --help
Show installed packages

Usage: huber show [OPTIONS] [NAME]

Arguments:
  [NAME]  Package name

Options:
      --all
          Show all the installed versions
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --detail
          Show the detailed artifact info
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Show installed packages

```console
$ huber show --all
 Name     Version  Current  Kind 
 k9s      v0.32.7  true     Release 
 k9s      v0.32.5  false    Release 

The uninstall Command

The uninstall command uninstalls packages.

$ huber uninstall --help
Uninstall packages

Usage: huber uninstall [OPTIONS] [NAME]...

Arguments:
  [NAME]...  Package name

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help 

Examples

Uninstall multiple packages

$ huber uninstall k9s kubectl
[INFO ] Uninstalling k9s
[INFO ] Uninstalled k9s
[INFO ] Uninstalling kubectl
[INFO ] Uninstalled kubectl

The update Command

The update command updates the installed packages.

$ huber update --help
Updates the installed packages

Usage: huber update [OPTIONS] [NAME]...

Arguments:
  [NAME]...  Package name

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --prefer-stdlib <PREFER_STDLIB>
          Prefer standard library (only for Linux or Windows) [possible values: gnu, musl, msvc]
      --dryrun
          Dry run to show available updates
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Update the installed packages

$ huber install k9s@v0.32.5 kubectl@v1.31.0
[INFO ] Installing package k9s@v0.32.5
[INFO ] Installing package kubectl@v1.31.0
[INFO ] Installed executables of k9s:
    [
        "/home/davidko/.huber/bin/k9s",
    ]
[INFO ] k9s@v0.32.5 installed
[INFO ] Installed executables of kubectl:
    [
        "/home/davidko/.huber/bin/kubectl",
    ]
[INFO ] kubectl@v1.31.0 installed

$ huber update
[INFO ] Checking for updates for k9s. The latest installed version is v0.32.5
[INFO ] Checking for updates for kubectl. The latest installed version is v1.31.0
[INFO ] Found the latest version of kubectl: v1.32.1
[INFO ] Updating package kubectl from v1.31.0 to v1.32.1
[INFO ] Updating kubectl (version: v1.31.0, source: github) to kubectl (version: v1.32.1, source: github)
[INFO ] Found the latest version of k9s: v0.32.7
[INFO ] Updating package k9s from v0.32.5 to v0.32.7
[INFO ] Updating k9s (version: v0.32.5, source: github) to k9s (version: v0.32.7, source: github)
[INFO ] Installed executables of kubectl:
    [
        "/home/davidko/.huber/bin/kubectl",
    ]
[INFO ] Package kubectl updated to v1.32.1 successfully
[INFO ] Installed executables of k9s:
    [
        "/home/davidko/.huber/bin/k9s",
    ]
[INFO ] Package k9s updated to v0.32.7 successfully

The config Command

The config command manages Huber configurations including log level, GitHub token, GitHub SSH key, Huber directory, and GitHub base URI. If you want to use Huber behind a proxy, you can set the proxy server to serve the GitHub base URI.

$ huber config --help
Manages huber configurations

Usage: huber config [OPTIONS] <COMMAND>

Commands:
  show  Show Huber configurations
  save  Save Huber configurations via global options
  help  Print this message or the help of the given subcommand(s)

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

The config show Command

The config show command shows Huber configurations.

$ huber config show --help
Show Huber configurations

Usage: huber config show [OPTIONS]

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

The config save Command

The config save command saves Huber configurations via global options.

$ huber config save --help
Save Huber configurations via global options

Usage: huber config save [OPTIONS]

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

The current Command

The current command updates the current package versions if there are multiple versions of the same package installed.

$ huber current --help
Update the current package versions

Usage: huber current [OPTIONS] <NAME_VERSION>...

Arguments:
  <NAME_VERSION>...  Package name with version (e.g. 'package-name@version')

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Update the current package version

$ huber show --all
 Name     Version  Current  Kind 
 k9s      v0.32.7  true    Release 
 k9s      v0.32.5  false     Release 

$ huber current k9s@v0.32.5
[INFO ] Updating the current version of k9s to v0.32.5
[INFO ] k9s@v0.32.5 is now the current version

$ huber show --all
 Name     Version  Current  Kind 
 k9s      v0.32.7  false    Release 
 k9s      v0.32.5  true     Release 

The completions Command

The completions command shows command completions for the specified shell. It is useful for setting up command completions for Huber.

$ huber completions --help
Show command completions for the specified shell

Usage: huber completions [OPTIONS] <SHELL>

Arguments:
  <SHELL>  Shell name [possible values: bash, elvish, fish, powershell, zsh]

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

The flush Command

The flush command removes outdated installed artifacts to free up disk space.

Remove outdated installed artifacts

Usage: huber flush [OPTIONS]

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Flush outdated installed (non-current) artifacts

$ huber show --all
 Name     Version  Current  Kind 
 k9s      v0.32.7  false    Release 
 k9s      v0.32.5  true     Release 

$ huber flush
[INFO ] Removing k9s (version: v0.32.7, source: github)
[INFO ] k9s (version: v0.32.7, source: github) removed

$ huber show --all
 Name     Version  Current  Kind 
 k9s      v0.32.5  true     Release 

The repo Command

The repo command allows you to manage repositories. Huber includes a default repository with a curated list of packages, but you can also add your own repositories to install packages from them.

$ huber repo --help
Manage repositories

Usage: huber repo [OPTIONS] <COMMAND>

Commands:
  add     Add a new repo
  remove  Remove a repo
  show    Show all repos
  help    Print this message or the help of the given subcommand(s)

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

The repo add Command

The repo add command adds a new repository using the URL or file path of the Huber package index file.

$ huber repo add --help
Add a new repository

Usage: huber repo add [OPTIONS] --url <URL> --file <FILE> <NAME>

Arguments:
  <NAME>  Repo name

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --url <URL>
          URL of the Huber package index file
      --file <FILE>
          File path of the Huber package index file
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

The index file is a YAML file that contains the list of packages as the below example:

- name: aichat
  description: All-in-one LLM CLI tool featuring Shell Assistant, Chat-REPL, RAG, AI Tools & Agents, with access to OpenAI, Claude, Gemini, Ollama, Groq, and more.
  source: !Github
    owner: sigoden
    repo: aichat
  targets:
  - !LinuxAmd64
    artifact_templates:
    - 'aichat-v{version}-x86_64-unknown-linux-musl.tar.gz'

The repo remove Command

The repo remove command removes a repository.

Remove a repository

Usage: huber repo remove [OPTIONS] [NAME]...

Arguments:
  [NAME]...  Repo names

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

The repo show Command

The repo show command shows all repositories.

$ huber repo show --help
Show all repositories

Usage: huber repo show [OPTIONS]

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Add a new repository via a file

$ huber repo add --url https://raw.githubusercontent.com/innobead/huber/refs/heads/main/docs/src/cmd/repo/huber.yaml self-hosted
[INFO ] Adding repo self-hosted
[INFO ] Repo self-hosted added

$ huber repo show
 Name         Url                                                                                            File 
 self-hosted  https://raw.githubusercontent.com/innobead/huber/refs/heads/main/docs/src/cmd/repo/huber.yaml   
 
$ huber search aichat --repo self-hosted
 Name    Description                                                                                              Source 
 aichat  All-in-one LLM CLI tool featuring Shell Assistant, Chat-REPL, RAG, AI Tools & Agents, with access to...  https://github.com/sigoden/aichat 

The reset Command

The reset command resets Huber to its initial state.

$ huber reset --help
Reset Huber

Usage: huber reset [OPTIONS]

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Reset Huber

$ huber install k9s
[INFO ] k9s version not specified, getting the latest version (v0.32.7)
[INFO ] Installing package k9s@latest/v0.32.7
[INFO ] Installed executables of k9s:
    [
        "/home/davidko/.huber/bin/k9s",
    ]
[INFO ] k9s@latest/v0.32.7 installed
 
$ huber reset
[INFO ] Resetting Huber by removing created caches, downloaded files and installed packages
[INFO ] Huber reset

$ huber show
[INFO ] No packages installed

The self-update Command

The self-update command updates Huber if a new version is available.

$ huber self-update --help
Update huber

Usage: huber self-update [OPTIONS]

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --prefer-stdlib <PREFER_STDLIB>
          Prefer standard library (only for Linux or Windows) [possible values: gnu, musl, msvc]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

The save Command

The save command saves the installed package list to a file which can be used by the load command.

$ huber save --help
Save the installed package list to a file

Usage: huber save [OPTIONS]

Options:
      --file <FILE>
          File path to save the installed package list [default: huber-packages.txt]
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Save the installed package list

$ huber save --file output.txt
[INFO ] Collecting installed current packages
[INFO ] Saving the package list to output.txt
[INFO ] Saved the package list to /home/davidko/github/innobead/huber/output.txt

$ cat output.txt
k9s@v0.32.7

The load Command

The load command reads the package list from a file generated by the save command and installs the packages.

$ huber load --help
Load installed packages from a file generated by save command

Usage: huber load [OPTIONS]

Options:
      --file <FILE>
          Load a package list to install [default: huber-packages.txt]
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Load installed packages from a file

$ huber load --file output.txt
[INFO ] Loading packages from output.txt
[INFO ] Loaded packages: total 1: [
        "k9s@v0.32.7",
    ]
[INFO ] Installing packages: total 1
[INFO ] Installing package k9s@v0.32.7
[INFO ] Installed executables of k9s:
    [
        "/home/davidko/.huber/bin/k9s",
    ]
[INFO ] k9s@v0.32.7 installed
[INFO ] Installed packages: total 1

The lock Command

The lock command allows you to lock packages or display locked packages. When a package is locked, it will not be updated by the huber update command if its version is equal to or lower than the locked version requirement.

The package locking uses Cargo's version requirement format.

the locked version.

```console
$ huber lock --help
Lock packages or Show locked packages

Usage: huber lock [OPTIONS] [NAME_VERSION]... [COMMAND]

Commands:
  show  Show locked versions
  help  Print this message or the help of the given subcommand(s)

Arguments:
  [NAME_VERSION]...  Package name (e.g. 'package-name', 'package-name@semver' or 'package-name@<semver-requirement>' using Cargo's dependency version requirement format)

Options:
      --all
          Lock all installed `current` packages
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --caret-required
          Treat version requirement as a caret requirement if no version requirement is specified
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --tilde-required
          Treat version requirement as a tilde requirement if no version requirement is specified
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

The lock show Command

The lock show command shows locked packages and their locked version requirements.

$ huber lock show --help
Usage: huber lock show [OPTIONS]

Options:
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Lock a package:

$ huber install k9s@v0.32.5
[INFO ] Installing package k9s@v0.32.5
[INFO ] Installed executables of k9s:
    [
        "/home/davidko/.huber/bin/k9s",
    ]
[INFO ] k9s@v0.32.5 installed

$ huber lock k9s@=0.32.5
[INFO ] Locking packages
[INFO ] Locking package k9s@=0.32.5
[INFO ] Packages locked successfully: {
        "k9s": "=0.32.5",
    }

$ huber lock show
 Name  Version 
 k9s   =0.32.5 
 
$ huber update k9s
[INFO ] Checking for updates for k9s. The latest installed version is v0.32.5
[INFO ] Found the latest version of k9s: v0.32.7
[WARN ] Package k9s is locked to version =0.32.5. Skipping update to v0.32.7

$ huber install k9s@v0.32.7
[WARN ] Package k9s is locked to version =0.32.5. Skipping installing v0.32.7

The unlock Command

The unlock command unlocks packages.

$ huber unlock --help
Unlock packages

Usage: huber unlock [OPTIONS] <NAME>...

Arguments:
  <NAME>...  Package name

Options:
      --all
          Unlock all the locked packages
  -l, --log-level <LOG_LEVEL>
          Log level [default: OFF]
      --github-token <GITHUB_TOKEN>
          GitHub token; Optional until reaching the rate limit of GitHub API [env: GITHUB_TOKEN=]
      --github-key <GITHUB_KEY>
          Github SSH key path; Optional, if you want to use SSH to clone the Huber repository [env: GITHUB_KEY=]
      --huber-dir <HUBER_DIR>
          Huber directory [default: /home/davidko/.huber]
      --github-base-uri <GITHUB_BASE_URI>
          GitHub base URI [env: GITHUB_BASE_URI=] [default: https://api.github.com]
  -h, --help
          Print help

Examples

Unlock all the locked packages

$huber lock k9s
[INFO ] Locking packages
[INFO ] Locking package k9s@=0.32.5
[INFO ] Packages locked successfully: {
        "k9s": "0.32.5",
    }

$ huber unlock --all
[INFO ] Unlocking packages
[INFO ] Unlocking all packages
[INFO ] Unlocked packages

$ huber lock show
[INFO ] No packages locked

Huber Managed Packages

This package list is generated by huber search using the default Huber package repository. To add a new package, please follow the instructions in Add a New Package.

 Name             Description                                                                                              Source 
 ali              Generate HTTP load and plot the results in real-time                                                     https://github.com/nakabonne/ali 
 argocd           Declarative Continuous Deployment for Kubernetes                                                         https://github.com/argoproj/argo-cd 
 arkade           Open Source Marketplace For Developer Tools                                                              https://github.com/alexellis/arkade 
 asdf             Extendable version manager with support for Ruby, Node.js, Elixir, Erlang {value} more                         https://github.com/asdf-vm/asdf 
 axelard          Axelar: A Decentralized Blockchain Interoperability Network                                              https://github.com/axelarnetwork/axelar-core 
 bat              A cat(1) clone with wings.                                                                               https://github.com/sharkdp/bat 
 bottom           Yet another cross-platform graphical process/system monitor.                                             https://github.com/ClementTsang/bottom 
 buf              The best way of working with Protocol Buffers.                                                           https://github.com/bufbuild/buf 
 bun              Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one               https://github.com/oven-sh/bun 
 camel-k          Apache Camel K is a lightweight integration platform, born on Kubernetes, with serverless superpower...  https://github.com/apache/camel-k 
 chisel           A fast TCP/UDP tunnel over HTTP                                                                          https://github.com/jpillora/chisel 
 choose           A human-friendly and fast alternative to cut and (sometimes) awk                                         https://github.com/theryangeary/choose 
 cloak            A censorship circumvention tool to evade detection by authoritarian state adversaries                    https://github.com/cbeuw/Cloak 
 codeql           Binaries for the CodeQL CLI                                                                              https://github.com/github/codeql-cli-binaries 
 compose          Define and run multi-container applications with Docker                                                  https://github.com/docker/compose 
 conftest         Write tests against structured configuration data using the Open Policy Agent Rego query language        https://github.com/open-policy-agent/conftest 
 consul           Consul is a distributed, highly available, and data center aware solution to connect and configure a...  https://github.com/hashicorp/consul 
 containerd       An open and reliable container runtime                                                                   https://github.com/containerd/containerd 
 copilot-cli      The AWS Copilot CLI is a tool for developers to build, release and operate production ready containe...  https://github.com/aws/copilot-cli 
 coreutils        Cross-platform Rust rewrite of the GNU coreutils                                                         https://github.com/uutils/coreutils 
 cosign           Code signing and transparency for containers and binaries                                                https://github.com/sigstore/cosign 
 croc             Easily and securely send things from one computer to another :crocodile: :package:                       https://github.com/schollz/croc 
 ctlptl           Making local Kubernetes clusters fun and easy to set up                                                  https://github.com/tilt-dev/ctlptl 
 czkawka          Multi functional app to find duplicates, empty folders, similar images etc.                              https://github.com/qarmin/czkawka 
 dasel            Select, put and delete data from JSON, TOML, YAML, XML and CSV files with a single tool. Supports co...  https://github.com/TomWright/dasel 
 delta            A syntax-highlighting pager for git, diff, grep, and blame output                                        https://github.com/dandavison/delta 
 deno             A modern runtime for JavaScript and TypeScript.                                                          https://github.com/denoland/deno 
 direnv           unclutter your .profile                                                                                  https://github.com/direnv/direnv 
 dive             A tool for exploring each layer in a docker image                                                        https://github.com/wagoodman/dive 
 doctl            The official command line interface for the DigitalOcean API.                                            https://github.com/digitalocean/doctl 
 dog              A command-line DNS client.                                                                               https://github.com/ogham/dog 
 dolt             Dolt – Git for Data                                                                                      https://github.com/dolthub/dolt 
 dua-cli          View disk space usage and delete unwanted data, fast.                                                    https://github.com/Byron/dua-cli 
 dust             A more intuitive version of du in rust                                                                   https://github.com/bootandy/dust 
 eksctl           The official CLI for Amazon EKS                                                                          https://github.com/eksctl-io/eksctl 
 exa              A modern replacement for β€˜ls’.                                                                           https://github.com/ogham/exa 
 fd               A simple, fast and user-friendly alternative to 'find'                                                   https://github.com/sharkdp/fd 
 firecracker      Secure and fast microVMs for serverless computing.                                                       https://github.com/firecracker-microvm/firecracker 
 fission          Fast and Simple Serverless Functions for Kubernetes                                                      https://github.com/fission/fission 
 fleet            Deploy workloads from Git to large fleets of Kubernetes clusters                                         https://github.com/rancher/fleet 
 flux2            Open and extensible continuous delivery solution for Kubernetes. Powered by GitOps Toolkit.              https://github.com/fluxcd/flux2 
 fnm              πŸš€ Fast and simple Node.js version manager, built in Rust                                                https://github.com/Schniz/fnm 
 fortio           Fortio load testing library, command line tool, advanced echo server and web UI in go (golang). Allo...  https://github.com/fortio/fortio 
 foundry          Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written...  https://github.com/foundry-rs/foundry 
 frum             A little bit fast and modern Ruby version manager written in Rust                                        https://github.com/TaKO8Ki/frum 
 gh               GitHub’s official command line tool                                                                      https://github.com/cli/cli 
 gitleaks         Find secrets with Gitleaks πŸ”‘                                                                            https://github.com/gitleaks/gitleaks 
 gitui            Blazing πŸ’₯ fast terminal-ui for git written in rust πŸ¦€                                                   https://github.com/extrawurst/gitui 
 go               The Go programming language                                                                              https://github.com/golang/go 
 go-http-tunnel   Fast and secure tunnels over HTTP/2                                                                      https://github.com/mmatczuk/go-http-tunnel 
 goose            A database migration tool. Supports SQL migrations and Go functions.                                     https://github.com/pressly/goose 
 gping            Ping, but with a graph                                                                                   https://github.com/orf/gping 
 gradle           Adaptable, fast automation for all                                                                       https://github.com/gradle/gradle 
 grex             A command-line tool and Rust library with Python bindings for generating regular expressions from us...  https://github.com/pemistahl/grex 
 grpcurl          Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers                             https://github.com/fullstorydev/grpcurl 
 helm             The Kubernetes Package Manager                                                                           https://github.com/helm/helm 
 helmfile         Declaratively deploy your Kubernetes manifests, Kustomize configs, and Charts as Helm releases. Gene...  https://github.com/helmfile/helmfile 
 hetty            An HTTP toolkit for security research.                                                                   https://github.com/dstotijn/hetty 
 hexyl            A command-line hex viewer                                                                                https://github.com/sharkdp/hexyl 
 httptap          View HTTP/HTTPS requests made by any Linux program                                                       https://github.com/monasticacademy/httptap 
 huber            Huber: simplify GitHub package management                                                                https://github.com/innobead/huber 
 hugo             The world’s fastest framework for building websites.                                                     https://github.com/gohugoio/hugo 
 hyperfine        A command-line benchmarking tool                                                                         https://github.com/sharkdp/hyperfine 
 img              Standalone, daemon-less, unprivileged Dockerfile and OCI compatible container image builder.             https://github.com/genuinetools/img 
 istio            Connect, secure, control, and observe services.                                                          https://github.com/istio/istio 
 jiq              jid on jq - interactive JSON query tool using jq expressions                                             https://github.com/fiatjaf/jiq 
 jless            jless is a command-line JSON viewer designed for reading, exploring, and searching through JSON data...  https://github.com/PaulJuliusMartinez/jless 
 jq               Command-line JSON processor                                                                              https://github.com/jqlang/jq 
 just             πŸ€– Just a command runner                                                                                 https://github.com/casey/just 
 jwt-cli          A super fast CLI tool to decode and encode JWTs built in Rust                                            https://github.com/mike-engel/jwt-cli 
 k0s              k0s - The Zero Friction Kubernetes                                                                       https://github.com/k0sproject/k0s 
 k3d              Little helper to run CNCF's k3s in Docker                                                                https://github.com/k3d-io/k3d 
 k3s              Lightweight Kubernetes                                                                                   https://github.com/k3s-io/k3s 
 k3sup            bootstrap K3s over SSH in < 60s πŸš€                                                                       https://github.com/alexellis/k3sup 
 k6               A modern load testing tool, using Go and JavaScript - https://k6.io                                      https://github.com/grafana/k6 
 k9s              🐢 Kubernetes CLI To Manage Your Clusters In Style!                                                      https://github.com/derailed/k9s 
 kind             Kubernetes IN Docker - local clusters for testing Kubernetes                                             https://github.com/kubernetes-sigs/kind 
 ko               Build and deploy Go applications                                                                         https://github.com/ko-build/ko 
 kompose          Convert Compose to Kubernetes                                                                            https://github.com/kubernetes/kompose 
 kotlin           The Kotlin Programming Language.                                                                         https://github.com/JetBrains/kotlin 
 kpt              Automate Kubernetes Configuration Editing                                                                https://github.com/GoogleContainerTools/kpt 
 krew             πŸ“¦ Find and install kubectl plugins                                                                      https://github.com/kubernetes-sigs/krew 
 kube-bench       Checks whether Kubernetes is deployed according to security best practices as defined in the CIS Kub...  https://github.com/aquasecurity/kube-bench 
 kube-linter      KubeLinter is a static analysis tool that checks Kubernetes YAML files and Helm charts to ensure the...  https://github.com/stackrox/kube-linter 
 kubectl          Production-Grade Container Scheduling and Management                                                     https://github.com/kubernetes/kubernetes 
 kubefire         KubeFire πŸ”₯, creates and manages Kubernetes Clusters using Firecracker microVMs                          https://github.com/innobead/kubefire 
 kubestr                                                                                                                   https://github.com/kastenhq/kubestr 
 kubevirt         Kubernetes Virtualization API and runtime in order to define and manage virtual machines.                https://github.com/kubevirt/kubevirt 
 kustomize        Customization of kubernetes YAML configurations                                                          https://github.com/kubernetes-sigs/kustomize 
 kuttl            KUbernetes Test TooL (kuttl)                                                                             https://github.com/kudobuilder/kuttl 
 linkerd2-edge    Ultralight, security-first service mesh for Kubernetes. Main repo for Linkerd 2.x.                       https://github.com/linkerd/linkerd2 
 linkerd2-stable  Ultralight, security-first service mesh for Kubernetes. Main repo for Linkerd 2.x.                       https://github.com/linkerd/linkerd2 
 loc              Count lines of code quickly.                                                                             https://github.com/cgag/loc 
 local-ai         :robot: The free, Open Source alternative to OpenAI, Claude and others. Self-hosted and local-first....  https://github.com/mudler/LocalAI 
 lsd              The next gen ls command                                                                                  https://github.com/lsd-rs/lsd 
 minikube         Run Kubernetes locally                                                                                   https://github.com/kubernetes/minikube 
 mkcert           A simple zero-config tool to make locally trusted development certificates with any names you'd like...  https://github.com/FiloSottile/mkcert 
 nat              `ls` alternative with useful info and a splash of color 🎨                                               https://github.com/willdoescode/nat 
 natscli          The NATS Command Line Interface                                                                          https://github.com/nats-io/natscli 
 navi             An interactive cheatsheet tool for the command-line                                                      https://github.com/denisidoro/navi 
 nerdctl          contaiNERD CTL - Docker-compatible CLI for containerd, with support for Compose, Rootless, eStargz, ...  https://github.com/containerd/nerdctl 
 node             Node.js JavaScript runtime βœ¨πŸ’πŸš€βœ¨                                                                      https://github.com/nodejs/node 
 norouter         NoRouter: IP-over-Stdio. The easiest multi-host {value} multi-cloud networking ever. No root privilege is ...  https://github.com/norouter/norouter 
 nushell          A new type of shell                                                                                      https://github.com/nushell/nushell 
 octant           Highly extensible platform for developers to better understand the complexity of Kubernetes clusters...  https://github.com/vmware-tanzu/octant 
 okteto           Develop your applications directly in your Kubernetes Cluster                                            https://github.com/okteto/okteto 
 ollama           Get up and running with Llama 3.3, DeepSeek-R1, Phi-4, Gemma 2, and other large language models.         https://github.com/ollama/ollama 
 onefetch         Command-line Git information tool                                                                        https://github.com/o2sh/onefetch 
 opa              Open Policy Agent (OPA) is an open source, general-purpose policy engine.                                https://github.com/open-policy-agent/opa 
 opentofu         OpenTofu lets you declaratively manage your cloud infrastructure.                                        https://github.com/opentofu/opentofu 
 oras             OCI registry client - managing content like artifacts, images, packages                                  https://github.com/oras-project/oras 
 pack             CLI for building apps using Cloud Native Buildpacks                                                      https://github.com/buildpacks/pack 
 packer           Packer is a tool for creating identical machine images for multiple platforms from a single source c...  https://github.com/hashicorp/packer 
 podman           Podman: A tool for managing OCI containers and pods.                                                     https://github.com/containers/podman 
 powershell       PowerShell for every system!                                                                             https://github.com/PowerShell/PowerShell 
 procs            A modern replacement for ps written in Rust                                                              https://github.com/dalance/procs 
 protoc           Protocol Buffers - Google's data interchange format                                                      https://github.com/protocolbuffers/protobuf 
 pueue            :stars: Manage your shell commands.                                                                      https://github.com/Nukesor/pueue 
 pulumi           Pulumi - Infrastructure as Code in any programming language πŸš€                                           https://github.com/pulumi/pulumi 
 rclone           "rsync for cloud storage" - Google Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Wasabi...  https://github.com/rclone/rclone 
 ripgrep          ripgrep recursively searches directories for a regex pattern while respecting your gitignore             https://github.com/BurntSushi/ripgrep 
 rke2                                                                                                                      https://github.com/rancher/rke2 
 sad              CLI search and replace | Space Age seD                                                                   https://github.com/ms-jpq/sad 
 saml2aws         CLI tool which enables you to login and retrieve AWS temporary credentials using a SAML IDP              https://github.com/Versent/saml2aws 
 sd               Intuitive find {value} replace CLI (sed alternative)                                                           https://github.com/chmln/sd 
 shadowsocks      A Rust port of shadowsocks                                                                               https://github.com/shadowsocks/shadowsocks-rust 
 skaffold         Easy and Repeatable Kubernetes Development                                                               https://github.com/GoogleContainerTools/skaffold 
 skim             Fuzzy Finder in rust!                                                                                    https://github.com/skim-rs/skim 
 solidity         Solidity, the Smart Contract Programming Language                                                        https://github.com/ethereum/solidity 
 sonobuoy         Sonobuoy is a diagnostic tool that makes it easier to understand the state of a Kubernetes cluster b...  https://github.com/vmware-tanzu/sonobuoy 
 starship         β˜„πŸŒŒοΈ  The minimal, blazing-fast, and infinitely customizable prompt for any shell!                        https://github.com/starship/starship 
 stern            ⎈ Multi pod and container log tailing for Kubernetes -- Friendly fork of https://github.com/wercke...    https://github.com/stern/stern 
 syncthing        Open Source Continuous File Synchronization                                                              https://github.com/syncthing/syncthing 
 tealdeer         A very fast implementation of tldr in Rust.                                                              https://github.com/tealdeer-rs/tealdeer 
 termshark        A terminal UI for tshark, inspired by Wireshark                                                          https://github.com/gcla/termshark 
 terraform        Terraform enables you to safely and predictably create, change, and improve infrastructure. It is a ...  https://github.com/hashicorp/terraform 
 terrascan        Detect compliance and security violations across Infrastructure as Code to mitigate risk before prov...  https://github.com/tenable/terrascan 
 tilt             Define your dev environment as code. For microservice apps on Kubernetes.                                https://github.com/tilt-dev/tilt 
 tokei            Count your code, quickly.                                                                                https://github.com/XAMPPRocky/tokei 
 tracee           Linux Runtime Security and Forensics using eBPF                                                          https://github.com/aquasecurity/tracee 
 traefik          The Cloud Native Application Proxy                                                                       https://github.com/traefik/traefik 
 trivy            Find vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories,...  https://github.com/aquasecurity/trivy 
 typescript       TypeScript is a superset of JavaScript that compiles to clean JavaScript output.                         https://github.com/microsoft/TypeScript 
 typos            Source code spell checker                                                                                https://github.com/crate-ci/typos 
 vegeta           HTTP load testing tool and library. It's over 9000!                                                      https://github.com/tsenart/vegeta 
 velero           Backup and migrate Kubernetes applications and their persistent volumes                                  https://github.com/vmware-tanzu/velero 
 viddy            πŸ‘€ A modern watch command. Time machine and pager etc.                                                   https://github.com/sachaos/viddy 
 volta            Volta: JS Toolchains as Code. ⚑                                                                         https://github.com/volta-cli/volta 
 wabt             The WebAssembly Binary Toolkit                                                                           https://github.com/WebAssembly/wabt 
 wasmer           πŸš€ Fast, secure, lightweight containers based on WebAssembly                                             https://github.com/wasmerio/wasmer 
 wasmtime         A lightweight WebAssembly runtime that is fast, secure, and standards-compliant                          https://github.com/bytecodealliance/wasmtime 
 wstunnel         Tunnel all your traffic over Websocket or HTTP2 - Bypass firewalls/DPI - Static binary available         https://github.com/erebe/wstunnel 
 xh               Friendly and fast tool for sending HTTP requests                                                         https://github.com/ducaale/xh 
 yq               yq is a portable command-line YAML, JSON, XML, CSV, TOML  and properties processor                       https://github.com/mikefarah/yq 
 zellij           A terminal workspace with batteries included                                                             https://github.com/zellij-org/zellij 
 zola             A fast static site generator in a single binary with everything built-in. https://www.getzola.org        https://github.com/getzola/zola 
 zoxide           A smarter cd command. Supports all major shells.                                                         https://github.com/ajeetdsouza/zoxide 

Add a New Package

We use ollam as an example to show how to add a new package to the generator.

Step 1: Create a new package module in ./huber-generator/src/pkg

You can specify the exact artifact name template or use the default automatic artifact name recognition.

#![allow(unused)]
fn main() {
#[allow(dead_code)]
pub fn release() -> Package {
    Package {
        name: "ollama".to_string(),
        source: PackageSource::Github {
            owner: "ollama".to_string(),
            repo: "ollama".to_string(),
        },

        targets: vec![
            PackageTargetType::LinuxAmd64(PackageManagement {
                artifact_templates: vec!["ollama-linux-amd64.tgz".to_string()],
                ..Default::default()
            }),
            PackageTargetType::LinuxArm64(PackageManagement {
                artifact_templates: vec!["ollama-linux-arm64.tgz".to_string()],
                ..Default::default()
            }),
            PackageTargetType::MacOSAmd64(PackageManagement {
                artifact_templates: vec!["ollama-darwin".to_string()],
                ..Default::default()
            }),
            PackageTargetType::WindowsAmd64(PackageManagement {
                artifact_templates: vec!["ollama-windows-amd64.zip".to_string()],
                ..Default::default()
            }),
        ],
        ..Default::default()
    }
}
}

If the artifact name includes env::consts::OS, env::consts::ARCH, values defined in GOOS/GOARCH and release semantic versions, you can use the default automatic artifact name recognition below instead of specifying the artifact name template.

Besides downloading executables, Huber also supports downloading compressed files to extract executables from them. If the artifact name ends with .tar.gz, .tar.xz, .zip, .tar, .tgz, or .gz, Huber will automatically decompress the file after downloading.

The following table shows some automatic artifact name recognition for different operating systems and architectures:

OSARCHAsset nameRenamed asset name
linuxamd64, x86_64, ..ollama-linux-amd64ollam
linuxaarch64, arm64, ..ollama-linux-arm64.tar.gzollam.tar.gz
macos, darwinaarch64, arm64, ..ollama-darwin-arm64ollam
windowsamd64, X86_64, ..ollama-windows-amd64.zipollam.zip
#![allow(unused)]
fn main() {
#[allow(dead_code)]
pub fn release() -> Package {
    Package {
        name: "ollama".to_string(),
        source: PackageSource::Github {
            owner: "ollama".to_string(),
            repo: "ollama".to_string(),
        },

        targets: vec![
            PackageTargetType::LinuxAmd64(Default::default()),
            PackageTargetType::LinuxArm64(Default::default()),
            PackageTargetType::MacOSAmd64(Default::default()),
            PackageTargetType::WindowsAmd64(Default::default()),
        ],
        ..Default::default()
    }
}
}

Step 2: Declare the package module in ./huber-generator/src/pkg/mod.rs

#![allow(unused)]
fn main() {
pub mod ollama;
}

Step 3: Export the package to the release function in ./huber-generator/src/build.rs

#![allow(unused)]

fn main() {
fn releases() -> Vec<Package> {
    vec![
        // ... existing packages
        // Add the new package here
        ollama::release(),
    ]
}
}

Step 4: Run the generator

After running the following command, the generator will automatically generate the package information to the ./generated-v1 directory and update the ./docs/src/contributing/huber-managed-packages.md file.

just generate

Finally, please create a pull request to merge the changes into the main branch. Thank you for contributing to Huber!