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
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
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
Runninghyze 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:
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
.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.
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.

