Build professional CLI tools
Valet gives you the framework and functions required to build awesome tools, effortlessly, in bash. Get everything you expect from a good CLI software (e.g. git, docker…) in a few lines of bash code and YAML configuration.
Turn your scripts into commands
Valet enables you to easily create commands that can take arguments and/or options automatically parsed by the Valet. Exceptions are gracefully handled with the error stack printed to the user.
Interactively execute your commands
Find all your commands in a convenient menu with fuzzy finding capabilities. Get prompted for missing arguments or options to make your commands easy to use.
Fetch and share extensions
You commands are wrapped into extensions that can easily be shared with coworkers or the internet.
Libraries of pure bash functions
Make your scripts more performant and write code faster by using Valet libraries for string manipulation, interactive prompt, pure bash I/O and more… You can also extend Valet to create and share your own libraries!
Test your commands
Ever wondered how you can effectively setup unit tests for your scripts? Valet standardizes the way you test functions and commands with approval tests approach. Run them all in a single command and automate tests in CI pipelines.
Clear and standardized help
Declare properties for your commands with YAML which are used to automatically display a user friendly documentation.
Made for CI/CD automation
Valet only requires bash, has advanced logging capabilities and can be entirely configured through environment variables, which makes it a great candidate as a core framework to build your CI/CD jobs.
Pure bash, zero dependencies
Simply run the install script which copies Valet and you are good to go, you will only ever need bash! And thanks to bash scripting nature, you can highly customize Valet itself by re-declaring functions to your liking.
Lighting fast on any platform
Valet does not use forking which makes it super fast, even on windows Git bash.
Valet in a gist:
- In Valet, you can create new commands that you can invoke with
valet my-command
. - Each command has properties that describe it (a description, a list of arguments and options, and so on…).
- Each command has an associated bash function that is called when the command is invoked and which contains your logic.
- You define commands and their functions in
.sh
files under your Valet user directory and Valet takes care of indexing your commands; which allows you to quickly find them, parse options, arguments, print their help… - Commands are packaged in extensions that can easily be shared and downloaded by other Valet users.
🖥️ An interactive menu
Calling valet
without arguments lets you interactively search commands, read their documentation and execute them:
✨ Create a command
Command properties are defined using a simple YAML syntax:
|
|
📖 Clear and standardized help
With valet command --help
or valet help command
, you get a beautifully formatted help for your command:

🪄 Automatic parsing of arguments and options
Positional arguments and options are automatically parsed by Valet based on your command definition.
They are made available as local variables in your command function.
See the command implementation
|
|

🐾 Advanced logging
Easily log messages and customize their output on the fly.
See the command implementation
|
|

🧪 Test framework
Automate tests for your script using the approval tests approach for assertions:

🧩 Libraries of functions
Make your scripts more performant and write code faster by using Valet standard libraries for string manipulation, interactive prompt, pure bash I/O and more…
Use one of the 187 functions coming in standard with Valet! Some examples:
|
|
Note