Skip to main content
The official Hyze Cloud CLI is called hyze. It covers the deploy loop end to end: log in, list apps, deploy, follow the build, read the logs and check what is live, without leaving the terminal.

Install

Node 18+ or Bun, one command.

Quickstart

From login to a live app.

Install

Runs on Node 18+ and Bun.

Quickstart

1

Store your API key

Create a key in the dashboard under Settings → Developer, then store it with hyze login. The CLI checks the key against the API before saving it.
2

See what the workspace holds

3

Deploy

Inside a project folder, hyze deploy . uses the app already bound to that folder (see .hyzerc.json).
4

Check what is live

Commands

appId is optional wherever an app is the subject: the .hyzerc.json binds an app to the folder, so inside a project hyze status, hyze logs and hyze deploy . need no arguments.

Interactive screen

Running hyze with no arguments opens a screen in the terminal instead of printing help (hyze --help still prints help). It reads the same API through the same commands:
Enter opens the highlighted app, with its state, its URL, the hostnames it answers on and the variables it runs with:
Variables are masked, recognisable but not usable. v shows the values in full and hides them again. e sets a variable spelled KEY=value, the same spelling -e uses everywhere else, and asks before writing because the app restarts to apply it. s is the verb that changes something: Stop while the app is up, Start when it is not. Stopping takes the app off the air, so it asks first and nothing goes out until you answer. r restarts, o opens it in the browser, l shows the logs and a adds a hostname, telling you where to point DNS.

Authentication and configuration

hyze login verifies the key against the API before storing it. In a terminal the input is masked per keystroke, so a paste is visible without exposing the secret. Piped stdin and --key <hyze_...> skip the prompt entirely, which is how CI feeds it:

Configuration files

Precedence, highest first: flag → environment variable → .hyzerc.json → active profile → default. An empty variable counts as absent, so HYZE_API_KEY="" does not shadow the profile.

Environment variables

Global options

Use it in scripts

table is the default when stdout is a terminal, json otherwise. Piping always yields JSON without asking.
Payloads go to stdout; progress and messages go to stderr. That is why hyze deployments app_1 --json | jq '.deployments[0].status' is safe.
--json prints the API response untouched, so there is no re-shaped “CLI format” to keep in sync: status is the one command that resolves instead of forwarding. The API cannot always see the container, and a made-up stopped would read as “the app is down”.

Deploy

The flags you reach for most: --name, --app <appId> to redeploy, --runtime node|bun|python, --memory <mb>, --port and --subdomain (together), --env KEY=VALUE (repeatable), --env-file, --start-command, --install-command, --build-command, --machine, --exclude and --include, --no-wait, and --repo <owner/name> [--branch] [--auto-deploy] for GitHub. Without --runtime, the CLI asks the API to inspect the upload and uses the detected runtime. While it waits, the CLI draws the progress in place, from facts the API sent: the build’s own clock, every stage with the duration the platform stamped and the phase the worker wrote for that build. A fact the API did not send is a line that is not drawn. There is no percentage, because the contract has none.
The wait belongs to a terminal: in a pipe it writes nothing, no \r, no ANSI, no spinner. --json and -o json keep the exact payload.

What gets uploaded

In this order: --include and --exclude patterns, then .hyzeignore (gitignore style: *, **, dir/, !keep), then git ls-files --cached --others --exclude-standard inside a work tree and, outside one, a walk with built-in ignores. .git and node_modules are never uploaded.
The upload limit is not a constant baked into the CLI: before zipping, it reads the platform’s own limit and refuses an oversized archive by naming that number.

Logs

hyze logs <appId> prints the app’s output (--tail 1-1000, --timestamps). hyze logs <appId> <deploymentId> prints the install and build log the API persisted for that attempt. With --follow, the CLI prints only what is new. For a build it stops when the build settles; for a container it runs until you interrupt it.

Errors and exit codes

Every failure is one line plus the fix, on stderr, with no stack trace. Add --verbose when you want the stack trace.

The unknown state

hyze status prints what the platform reports: running, stopped, paused, restarting, deploying, error, exited or created. When the platform cannot see the app at all, it prints unknown.
unknown exits 0: the question was answered, and the answer is that the platform does not know. A read that fails, on auth, server or network, keeps its mapped exit code instead.

Next steps

Deploy an app

The same deploy through the API, for comparison.

API keys

How keys work and how to protect them.

View logs

Where to find your app’s output.

Official SDKs

TypeScript and Python, to call the API from your code.
Last modified on September 24, 2026