aqua

Declarative CLI Version manager. Support Lazy Install and Sharable configuration mechanism named Registry. Switch versions seamlessly.
Install | Config | Usage | Document | Release Note
Currently, aqua doesn't support Windows.
Feature
- Install tools easily by the declarative YAML Configuration and simple command
aqua i
- Unify tool versions at local development environment and CI/CD for the project
- It solves the problem due to the difference of versions
- Support using defferent versions per project
- Lazy Install
- Registry - Sharable Configuration mechanism
- Save installation time and disk by sharing tools across projects
- Set up your laptops quickly
- Share aqua configuration for teams and organizations
Overview
You can install CLI tools and manage their versions with declarative YAML configuration aqua.yaml.
e.g. Install jq, direnv, and fzf with aqua.
registries:
- type: standard
ref: v0.10.6 # renovate: depName=suzuki-shunsuke/aqua-registry
packages:
- name: stedolan/jq
version: jq-1.6
- name: direnv/direnv@v2.28.0
- name: junegunn/fzf@0.27.2
You can install tools by aqua i.
$ aqua i
aqua i installs all packages all at once.
Tools are installed in ~/.aqua/pkgs and symbolic links are created in ~/.aqua/bin, so please add ~/.aqua/bin to the environment variable PATH.
It takes a long time to install many tools all at once, and some tools might not be actually needed.
So instead of aqua i let's execute aqua i -l.
$ aqua i -l
aqua i -l creates symbolic links to aqua-proxy in ~/.aqua/bin but skipping the downloading and installing tools.
When you execute the tool, the tool is installed automatically if it isn't installed yet before it is executed.
We call this feature as lazy install.
By the lazy install, you don't have to execute aqua explicitly after changing the tool's version.
When aqua.yaml is managed with Git, the lazy install is very useful because aqua.yaml is updated by git pull then the update is reflected automatically.
By adding aqua.yaml in your Git repositories, you can manage tools per repository.
You can use the different version of tools per project.
aqua installs the tools in the shared directory ~/.aqua,
so the same version of the same tool is installed only at once.
It saves the installation time and the disk usage.
aqua supports the mechanism named Registry.
You can share and reuse the aqua configuration, so it makes easy to write aqua.yaml.
registries:
- type: standard
ref: v0.10.6 # renovate: depName=suzuki-shunsuke/aqua-registry
packages:
- name: direnv/direnv@v2.28.0
# The default value of `registry` is `standard`
# registry: standard
In the above configuration, the Standard Registry is used so you can install direnv easily.
By the command aqua generate, you can check if the registry supports the tool you need and write the configuration quickly.
$ aqua g
aqua g launches the interactive UI and you can select the package and it's version interactively.
direnv (standard)
consul (standard)
conftest (standard)
> golangci-lint (standard)
47/47
>
After selecting the package, the configuration is outputted.
$ aqua g
- name: golangci-lint@v1.42.0
If the Registries don't support the tool, you can send the pull request to the registry or create your own Registry or add the configuration in aqua.yaml as inline Registry.
Install
Add ~/.aqua/bin to the environmenet variable PATH.
$ export PATH=$HOME/.aqua/bin:$PATH
If you want to install tools in your laptop regardless specific project,
create the global configuration ~/.aqua/global/aqua.yaml.
Like dotfiles, it is good to manage the Global Configuration with Git and share it with your multiple laptops.
For example,
$ git clone https://github.com/suzuki-shunsuke/my-aqua-config ~/.aqua/global
$ cd ~/.aqua/global
$ aqua i -l
Welcome your contribution to Standard Registry!
https://github.com/suzuki-shunsuke/aqua-registry
If tools you want aren't found in Standard Registry, please create issues or send pull requests!
Slide, Blog
Versioning Policy
We are Conforming suzuki-shunsuke/versioning-policy v0.1.0, which is compatible with Semantic Versioning 2.0.0.
License
MIT