_____ _ _
/ ____| (_)
| | | |___ _____ _ __ _ __ ___ __ _ _ __
| | | | \ \ / / _ \ '__| '_ ` _ \ / _` | '_ \
| |____| | |\ V / __/ | | | | | | | (_| | | | |
\_____|_|_| \_/ \___|_| |_| |_| |_|\__,_|_| |_|
A lightweight runtime manager focused on consistency.
Learn one runtime. Manage them all.
Cliverman is a universal runtime manager written entirely in Bash. It provides a single, predictable workflow for installing, switching and managing development runtimes without plugins, hidden behavior or runtime-specific commands.
Once a runtime is installed, Cliverman gets out of your way. You simply use java, go, node, nvim or any other executable as if it were installed directly on your system.
Most runtime managers eventually expose runtime-specific behaviors.
Cliverman follows a different philosophy:
- One workflow for every runtime
- One architecture
- One user experience
If you know how to manage Go, you already know how to manage Java. If you know Node.js, you already know Python.
The commands never change.
cliverman search
cliverman install
cliverman use
cliverman list
cliverman uninstallThe runtime is just another parameter.
Cliverman was designed around a few principles.
Every runtime implements exactly the same interface.
Searching, installing, activating and removing versions always behaves the same way.
After selecting a runtime, Cliverman disappears.
You simply execute:
java
go
node
nvimNo wrappers. No special launch commands.
- Pure Bash
- Minimal dependencies
- No plugin ecosystem
- Fast startup
Unlike plugin-based runtime managers, every runtime module is part of the project itself.
This provides:
- consistent UX
- consistent implementation
- easier maintenance
- predictable behavior
- Universal runtime management
- Consistent commands across every runtime
- Automatic shim generation
- Runtime aliases (
latest,lts) - Download verification using checksums
- Pure Bash implementation
- Small footprint
- Zero runtime-specific commands
| Runtime | Status | |
|---|---|---|
1 |
Flutter | π’ OK |
2 |
Golang | π’ OK |
3 |
Java (Temurin) | π’ OK |
4 |
Neovim | π’ OK |
5 |
Node.js | π’ OK |
6 |
Python | π‘ PENDING |
More runtimes will be added over time without changing the user experience.
curl -s https://raw.githubusercontent.com/marcoaurelima/cliverman/refs/heads/main/installer.sh | bashAdd shims to your PATH:
export PATH="$HOME/.cliverman/shims:$PATH"Reload your shell.
Search available versions:
cliverman search javaInstall a runtime:
cliverman install java:21Install aliases:
cliverman install java:lts
cliverman install java:latestActivate a version:
cliverman use java:21Use it normally:
java -version
javac
jarList installed versions:
cliverman list javaOutput:
β’ 21
β’ 25 (current)
β’ 26
Cliverman manages complete runtime installations.
Each runtime lives inside:
~/.cliverman/installs/
Executables are exposed through generated shims:
~/.cliverman/shims/
A shim is a tiny executable that transparently redirects execution to the currently active runtime.
When you type:
javathe shell actually executes:
~/.cliverman/shims/java
which resolves the active runtime and executes the real binary.
The same mechanism works for every executable contained in a runtime.
For Java, for example, Cliverman automatically generates shims for every executable found inside the JDK bin/ directory.
src/
β
βββ install.sh
βββ search.sh
βββ use.sh
βββ list.sh
βββ ...
β
βββ runtimes/
βββ java/
βββ golang/
βββ nodejs/
βββ ...
Each runtime implements the same interface.
This architecture allows new runtimes to be added without changing the user experience.
- Bash 4+
- curl
- jq
- More runtimes
- Shell completion
- Windows support
- Additional Java distributions
- Automated tests
Contributions are welcome.
Please keep the project philosophy in mind:
- simplicity
- consistency
- transparency
Every runtime should behave exactly like every other runtime.
MIT
Inspired by projects like asdf, but built around a fully integrated runtime architecture instead of plugins.