This guide explains how to add a new tool to this repository, where each tool is defined under tools/<toolname>/ with:
manifest.yamlfor metadataDockerfile.templatefor build instructions
To maintain a clean history, always follow this workflow:
Never commit directly to main. Create a new branch for your tool:
git checkout -b <toolname> mainWe use Conventional Commits. Your commit messages should follow this format:
<type>(<scope>): <description>
Common types:
feat: A new tool or feature.fix: A bug fix.chore: Maintenance tasks (e.g., updating documentation or tags).docs: Documentation only changes.
Example:
feat(<toolname>): Added
Committed your changes and push the branch and create a Pull Request (PR) on GitHub:
git add tools/<toolname>
git push origin <toolname>
gh pr create --title "feat(<toolname>): Added" --base main --head <toolname> --label ai-generatedThen, visit the link provided in the terminal output to open your PR.
mkdir tools/<toolname>Use the canonical command/binary name for the directory. If needed, use a qualified name (for example node-lts or gojq-is-jq).
Start from @template/manifest.yaml.
# yaml-language-server: $schema=https://tools.uniget.dev/schema.yaml
$schema: https://tools.uniget.dev/schema.yaml
name: foo
description: Some description
license:
name: Unknown
link: ""
homepage: https://example.org
repository: https://example.org/repo
version: "0.1.0"
tags:
- org/?
- category/?
- lang/?
- type/?
check: ""
build_dependencies:
- bar
runtime_dependencies:
- baz
platforms:
- linux/amd64
#- linux/arm64name: Must match directory name.version: Current packaged version.check: Command that prints installed version, usually with${binary}.binary: Override if binary name differs from tool name.build_dependencies: Tools needed while building.runtime_dependencies: Tools required at runtime.platforms: Supported platforms, commonlylinux/amd64andlinux/arm64.conflicts_with: Tools that provide the same command.
To ensure consistency, always use tags that already exist in the repository. You can generate an up-to-date list of all used tags by running:
make metadata.jsonThen, search through the resulting metadata.json for the tags you want to use.
Use the matching datasource for the upstream source:
- GitHub releases:
github-releases - GitHub tags:
github-tags - npm:
npm - PyPI:
pypi - Custom git host tags:
git-tags - Branch refs only:
git-refs - GitLab releases:
gitlab-releases - GitLab tags:
gitlab-tags
Start from @template/Dockerfile.template and choose the right packaging pattern.
Use when upstream publishes a single binary.
Use for .tar.gz or .tar.xz archives.
Use when releases are .zip files.
Use a case block to map ${arch} or ${alt_arch} to upstream naming. ${arch} contains amd64 or arm64, while ${alt_arch} contains x86_64 or aarch64.
Use go (and optionally make) build dependencies, clone tagged source, compile, copy binary to ${prefix}/bin.
Use rust build dependency, build release binary, copy into ${prefix}/bin.
Create a self-contained executable for Python CLIs.
Install package into isolated venv and symlink the binary.
Install package in /uniget_bootstrap/libexec/<tool> and symlink .bin executable.
For wrapper tools, create a symlink and set binary: "false" if no own binary exists.
- Generate shell completions (bash/fish/zsh) into
${prefix}/share/... - Install man pages into
${prefix}/share/man/man1
Common helpers available in templates:
check-download <url>check-github-release-asset "owner/repo" "tag" "filename"check-clone <url> <ref>
For a changed tool foo, run:
make fooThe log is located in tools/foo/build.log.
- Single binary artifact: executable install
- Compressed release archive: tar/zip extraction
- No reliable binary artifacts: source build (Go/Rust)
- Python package CLI: shiv or pipx
- JavaScript CLI package: npm installation
- Compatibility alias: shim/symlink
- Create
tools/<toolname>/ - Add
manifest.yaml - Add
Dockerfile.template - Define renovate source
- Validate
checkcommand - Build with
make <toolname>--build-amd64 - Build arm64 if declared in
platforms - Ensure tags and dependencies are correct