https://github.com/hetznercloud/cli
A command-line interface for Hetzner Cloud
https://github.com/hetznercloud/cli
cli command-line command-line-tool commandline-interface hcloud hetzner hetzner-cloud
Last synced: 8 months ago
JSON representation
A command-line interface for Hetzner Cloud
- Host: GitHub
- URL: https://github.com/hetznercloud/cli
- Owner: hetznercloud
- License: mit
- Created: 2017-11-29T17:12:42.000Z (about 8 years ago)
- Default Branch: main
- Last Pushed: 2025-05-07T00:07:46.000Z (8 months ago)
- Last Synced: 2025-05-07T01:20:45.528Z (8 months ago)
- Topics: cli, command-line, command-line-tool, commandline-interface, hcloud, hetzner, hetzner-cloud
- Language: Go
- Homepage:
- Size: 8.45 MB
- Stars: 1,231
- Watchers: 18
- Forks: 79
- Open Issues: 24
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
- awesome-starred - hetznercloud/cli - A command-line interface for Hetzner Cloud (cli)
- awesome-hcloud - hcloud cli - line interface for interacting with Hetzner Cloud.** (Tools / Rust)
README
# hcloud: Command-line interface for Hetzner Cloud
[](https://github.com/hetznercloud/cli/releases/latest)

[](https://github.com/hetznercloud/cli/actions/workflows/ci.yml)
[](https://github.com/hetznercloud/cli/actions/workflows/build.yml)
[](https://codecov.io/gh/hetznercloud/cli)
`hcloud` is a command-line interface for interacting with Hetzner Cloud.
[](https://asciinema.org/a/157991)
## Installation
You can download pre-built binaries for Linux, FreeBSD, macOS, and Windows on
the [releases page](https://github.com/hetznercloud/cli/releases).
On macOS and Linux, you can install `hcloud` via [Homebrew](https://brew.sh/):
brew install hcloud
On Windows, you can install `hcloud` via [Scoop](https://scoop.sh/)
scoop install hcloud
### Third-party packages
There are unofficial packages maintained by third-party users. Please note
that these packages aren’t supported nor maintained by Hetzner Cloud and
may not always be up-to-date. Downloading the binary or building from source
is still the recommended install method.
### Build manually
If you have Go installed, you can build and install the latest version of
`hcloud` with:
go install github.com/hetznercloud/cli/cmd/hcloud@latest
> Binaries built in this way do not have the correct version embedded. Use our
prebuilt binaries or check out [`.goreleaser.yml`](.goreleaser.yml) to learn
how to embed it yourself.
### Docker
A docker image is published at `hetznercloud/cli`.
```bash
docker run --rm -e HCLOUD_TOKEN="" hetznercloud/cli:latest
```
If you want to use (and persist) your configuration, you can mount it to `/config.toml`:
```bash
docker run --rm -v ~/.config/hcloud/cli.toml:/config.toml hetznercloud/cli:latest
```
## Getting Started
1. Visit the Hetzner Cloud Console at [console.hetzner.cloud](https://console.hetzner.cloud/),
select your project, and create a new API token.
2. Configure the `hcloud` program to use your token:
hcloud context create my-project
3. You’re ready to use the program. For example, to get a list of available server
types, run:
hcloud server-type list
See `hcloud help` for a list of commands.
You can also check out the [command reference](docs/reference) for help.
## Shell Completion
`hcloud` provides completions for various shells.
### Bash
To load completions into the current shell execute:
source <(hcloud completion bash)
In order to make the completions permanent, append the line above to
your `.bashrc`.
### Zsh
If shell completions are not already enabled for your environment need
to enable them. Add the following line to your `~/.zshrc` file:
autoload -Uz compinit; compinit
To load completions for each session execute the following commands:
mkdir -p ~/.config/hcloud/completion/zsh
hcloud completion zsh > ~/.config/hcloud/completion/zsh/_hcloud
Finally, add the following line to your `~/.zshrc` file, *before* you
call the `compinit` function:
fpath+=(~/.config/hcloud/completion/zsh)
In the end your `~/.zshrc` file should contain the following two lines
in the order given here.
fpath+=(~/.config/hcloud/completion/zsh)
# ... anything else that needs to be done before compinit
autoload -Uz compinit; compinit
# ...
You will need to start a new shell for this setup to take effect.
### Fish
To load completions into the current shell execute:
hcloud completion fish | source
In order to make the completions permanent execute once:
hcloud completion fish > ~/.config/fish/completions/hcloud.fish
### PowerShell:
To load completions into the current shell execute:
PS> hcloud completion powershell | Out-String | Invoke-Expression
To load completions for every new session, run
and source this file from your PowerShell profile.
PS> hcloud completion powershell > hcloud.ps1
## Output configuration
You can control output via the `-o` option:
* For `list` commands, you can specify `-o noheader` to omit the table header.
* For `list` commands, you can specify `-o columns=id,name` to only show certain
columns in the table.
* For `describe` commands, you can specify `-o json` to get a JSON representation
of the resource. The schema is identical to those in the Hetzner Cloud API which
are documented at [docs.hetzner.cloud](https://docs.hetzner.cloud).
* For `create` commands, you can specify `-o json` to get a JSON representation
of the API response. API responses are documented at [docs.hetzner.cloud](https://docs.hetzner.cloud).
In contrast to `describe` commands, `create` commands can return extra information, for example
the initial root password of a server.
* For `describe` commands, you can specify `-o format={{.ID}}` to format output
according to the given [Go template](https://golang.org/pkg/text/template/).
The template’s input is the resource’s corresponding struct in the
[hcloud-go](https://godoc.org/github.com/hetznercloud/hcloud-go/hcloud) library.
## Configuring hcloud
The hcloud CLI tool can be configured using following methods:
1. Configuration file
2. Environment variables
3. Command line flags
A higher number means a higher priority. For example, a command line flag will
always override an environment variable.
The configuration file is located at `~/.config/hcloud/cli.toml` by default
(On Windows: `%APPDATA%\hcloud\cli.toml`). You can change the location by setting
the `HCLOUD_CONFIG` environment variable or the `--config` flag. The configuration file
stores global preferences, the currently active context, all contexts and
context-specific preferences. Contexts always store a token and can optionally have
additional preferences which take precedence over the globally set preferences.
However, a config file is not required. If no config file is found, the CLI will
use the default configuration. Overriding options using environment variables allows the
hcloud CLI to function in a stateless way. For example, setting `HCLOUD_TOKEN` is
already enough in many cases.
You can use the `hcloud config` command to manage your configuration, for example
to get, list, set and unset configuration options and preferences. You can view a list
of all available options and preferences by running `hcloud config --help`.
## Examples
### List all servers
```
$ hcloud server list
ID NAME STATUS IPV4
210216 test1 running 78.46.122.12
210729 ubuntu-8gb-nbg1-dc3-1 running 94.130.177.158
```
### Create a server
```
$ hcloud server create --name test --image debian-9 --type cx22 --ssh-key demo
7s [====================================================================] 100%
Server 325211 created
```
## License
MIT license