Search for articles...
Description of commands available in the Granite console client
Every command available in the Granite console client. Generated from the CLI source at granite-so/cli — if something here disagrees with novps <command> --help, the CLI is right and this page is stale.
The binary is novps. Install it with curl https://cli.granite.so | sh, then authenticate with a Personal Access Token from the dashboard.
Every command accepts these.
Option | Short | Default | Description |
|---|---|---|---|
--project | -p | default | Project alias to act on. Tokens are stored per alias, so one machine can drive several projects. |
--json | — | false | Machine-readable output. Available on every list and get command, and on apps apply, apps deploy, resources update and resources deploy. |
--force | -f on some commands | false | Skip the typed confirmation on a destructive command. |
Destructive commands (apps delete, resources delete, databases delete, storage delete, storage keys regenerate and the sub-command deletes) prompt you to type DELETE and exit with a non-zero code if you do not. --force skips the prompt — that is what makes them usable from CI and from an AI agent.
novps apps apply --wait exits non-zero when the deployment does not reach success, so a deploy step fails a pipeline instead of passing quietly.
Setting | Source | Default |
|---|---|---|
Token | ~/.novps/config.json | — |
API URL | NOVPS_API_URL, then api_url in the config file | https://api.granite.so |
WebSocket URL | NOVPS_WS_URL, then ws_url in the config file | wss://websocket.granite.so |
Install directory | NOVPS_INSTALL_DIR (install script only) | ~/.local/bin or /usr/local/bin |
Commands related to authentication. The token is validated with a test API call before it is saved.
novps auth loginAuthenticate with a Personal Access Token.
Option | Short | Default | Description |
|---|---|---|---|
--token | -t | — | Personal Access Token. If not provided, you are prompted interactively. |
--project | -p | default | Project alias to store the token under. |
Tokens start with nvps_. Reading the token from the environment keeps it out of shell history, which is what you want in CI.
novps auth logoutRemove the saved authentication token.
Option | Short | Default | Description |
|---|---|---|---|
--project | -p | default | Project alias to remove the token for. |
novps auth statusShow current authentication status: whether you are authenticated, and a truncated token prefix for identification.
Option | Short | Default | Description |
|---|---|---|---|
--project | -p | default | Project alias to check. |
An application is the scope that holds your resources. apply is the command most workflows are built on: it creates or updates the whole application from a YAML manifest and is idempotent, matching resources by name.
novps apps listList all applications in the project. Output columns: ID, Name, Resources, Created At.
Option | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps apps resourcesList resources belonging to an application. Output columns: ID, Name, Type, Public Domain, Replicas, Schedule.
Argument | Required | Description |
|---|---|---|
APP_ID | yes | Application ID. |
Option | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps apps applyCreate or update an application from a YAML manifest. The application name is the CLI argument, not a field in the file, so the same manifest can create my-api-staging and my-api-prod.
Argument | Required | Description |
|---|---|---|
APP_NAME | yes | Application name, unique within the project. |
Option | Short | Default | Description |
|---|---|---|---|
--file | -f | — | Path to the YAML manifest. Required. |
--env-file | — | — | Path to a .env file, merged under the shell environment for ${VAR} substitution. |
--prune | — | false | Delete resources in the application that are not in the manifest. |
--dry-run | — | false | Parse and validate only; no API call. |
--wait | -w | false | Wait for the deployment to finish, then print the endpoints. |
--json | — | false | Output as JSON, including deployment_status and the resolved endpoints when used with --wait. |
--project | -p | default | Project alias. |
${VAR} references are substituted locally before the manifest is sent — from --env-file first, then the shell environment, which wins on conflict. An undefined variable is an error, not an empty string. A $VAR reference without braces is left alone and resolved by Granite from the application's own environment variables at deploy time.
A manifest with source_type: github requires the Granite GitHub App on the repository; the CLI checks this before applying and stops with an explanation if the integration is missing.
novps apps exportExport an existing application as a YAML manifest compatible with apply. This is how you adopt an application created in the dashboard.
Argument | Required | Description |
|---|---|---|
APP_NAME | yes | Application name. |
Option | Short | Default | Description |
|---|---|---|---|
--output | -o | stdout | Write the manifest to a file instead of standard output. |
--include-secrets | — | false | Include environment variable values. Requires the apps.show-secrets permission. |
--project | -p | default | Project alias. |
Registry credentials are never returned: the export always writes credentials: ''.
novps apps deployTrigger a manual deployment for every resource in the application.
Argument | Required | Description |
|---|---|---|
APP_ID | yes | Application ID. |
Option | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps apps updateUpdate an application's name or description. At least one of the two is required.
Argument | Required | Description |
|---|---|---|
APP_ID | yes | Application ID. |
Option | Short | Default | Description |
|---|---|---|---|
--name | — | — | New application name. |
--description | — | — | New description. |
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps apps deleteDelete an application and all of its resources (soft delete).
Argument | Required | Description |
|---|---|---|
APP_ID | yes | Application ID. |
Option | Short | Default | Description |
|---|---|---|---|
--force | -f | false | Skip the confirmation. |
--project | -p | default | Project alias. |
A resource is one deployable unit inside an application: a web-app, a worker or a cron-job. update is the general form; scale, set-image and set-env are shortcuts for the fields you change most often.
novps resources getShow detailed information for a resource.
Argument | Required | Description |
|---|---|---|
RESOURCE_ID | yes | Resource ID. |
Option | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps resources logsView resource logs.
Argument | Required | Description |
|---|---|---|
RESOURCE_ID | yes | Resource ID. |
Option | Short | Default | Description |
|---|---|---|---|
--follow | -f | false | Follow log output. |
--lines | -n | 100 | Number of log lines (1–5000). |
--since | -s | 1h | Show logs since a duration: 30s, 5m, 1h, 1d. |
--search | — | — | Filter by substring. |
--pod | — | — | Filter by pod name. |
--project | -p | default | Project alias. |
novps resources connectOpen an interactive shell in a running container — the terminal equivalent of the Console tab in the dashboard.
Argument | Required | Description |
|---|---|---|
RESOURCE_ID | yes | Resource ID to connect to. |
Option | Short | Default | Description |
|---|---|---|---|
--project | -p | default | Project alias. |
novps resources deployTrigger a manual deployment for a single resource.
Argument | Required | Description |
|---|---|---|
RESOURCE_ID | yes | Resource ID. |
Option | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps resources updateUpdate a resource's configuration. At least one flag is required. A deployment is triggered unless you pass --no-deploy.
Argument | Required | Description |
|---|---|---|
RESOURCE_ID | yes | Resource ID. |
Option | Short | Default | Description |
|---|---|---|---|
--image | — | — | New image name. |
--tag | — | — | New image tag. |
--docker-credentials | — | — | Private registry credentials as USER:PASSWORD, or the UUID of credentials already stored for this image. An empty string removes them. |
--replicas | — | — | Replica size and count as size:count, e.g. sm:2. |
--command | — | — | Override the container command. |
--port | — | — | HTTP port. |
--schedule | — | — | Cron schedule, for a cron-job resource. |
--env | -e | — | KEY=VALUE environment variable. Repeatable. |
--no-deploy | — | false | Apply the change without triggering a deployment. |
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps resources scaleChange replica size and count. Shortcut for update --replicas.
Argument | Required | Description |
|---|---|---|
RESOURCE_ID | yes | Resource ID. |
Option | Short | Default | Description |
|---|---|---|---|
--replicas | -r | — | Replica size and count as size:count. Required. |
--project | -p | default | Project alias. |
novps resources set-imageUpdate the image, tag and/or registry credentials. Shortcut for update.
Argument | Required | Description |
|---|---|---|
RESOURCE_ID | yes | Resource ID. |
Option | Short | Default | Description |
|---|---|---|---|
--image | — | — | New image name. |
--tag | — | — | New image tag. |
--docker-credentials | — | — | USER:PASSWORD, a stored credential UUID, or an empty string to remove. |
--project | -p | default | Project alias. |
The credentials field in a manifest is read only when the resource is created — on later applies it is ignored. That is deliberate, so a committed file never has to carry a secret. Set and rotate credentials here instead, reading the value from the environment to keep it out of shell history.
novps resources set-envSet resource environment variables.
Argument | Required | Description |
|---|---|---|
RESOURCE_ID | yes | Resource ID. |
PAIRS | yes | One or more KEY=VALUE pairs. |
Option | Short | Default | Description |
|---|---|---|---|
--merge / --replace | — | --merge | Merge with the existing variables, or replace them all. |
--project | -p | default | Project alias. |
novps resources deleteDelete a resource (soft delete).
Argument | Required | Description |
|---|---|---|
RESOURCE_ID | yes | Resource ID. |
Option | Short | Default | Description |
|---|---|---|---|
--force | -f | false | Skip the confirmation. |
--project | -p | default | Project alias. |
novps secrets listList secret keys for an application or a single resource. Values are masked unless you ask for them.
Argument | Required | Description |
|---|---|---|
APP_ID | yes | Application ID. |
Option | Short | Default | Description |
|---|---|---|---|
--resource | -r | — | Resource ID, for resource-level secrets. |
--with-values | — | false | Include secret values in the output. |
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps secrets getGet a single secret value by key name.
Argument | Required | Description |
|---|---|---|
APP_ID | yes | Application ID. |
SECRET_KEY | yes | Secret key name, e.g. DATABASE_URL. |
Option | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
Managed PostgreSQL, MySQL and Redis. Databases are not declared in the application manifest — create them here, then pass the connection string into the application through envs and --env-file, and grant access with databases allow-apps.
Databases are never exposed publicly. Use novps port-forward database to reach one from your machine.
novps databases listList databases in the project.
Option | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps databases getShow detailed information for a database.
Argument | Required | Description |
|---|---|---|
DATABASE_ID | yes | Database ID. |
Option | Short | Default | Description |
|---|---|---|---|
--show-password | — | false | Include the password and DATABASE_URL. |
--format | -f | table | Output format: table, json or env. |
--project | -p | default | Project alias. |
--format env prints DB_ENGINE, DB_HOST, DB_PORT, DB_USER, DB_NAME and DB_PASSWORD, adding DATABASE_URL when --show-password is given — which makes it a one-liner to seed a local .env.
novps databases createCreate a new database.
Option | Short | Default | Description |
|---|---|---|---|
--engine | -e | — | postgres, mysql or redis. Required. |
--size | -s | — | Node size: xs, sm, md, lg, xl. Required. |
--count | -n | 1 | Node count (1–3). |
--postgres-version | — | 16 | Postgres version: 14, 15 or 16. |
--mysql-version | — | 8.0 | MySQL version: 8.0. |
--wait | -w | false | Wait until the database is ready, then print the connection details. |
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps databases resizeResize a database. Only scaling up is allowed.
Argument | Required | Description |
|---|---|---|
DATABASE_ID | yes | Database ID. |
Option | Short | Default | Description |
|---|---|---|---|
--size | -s | — | New node size. |
--count | -n | — | New node count (1–3). |
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps databases allow-appsSet the list of applications allowed to reach this database. Passing no --app clears the allowlist.
Argument | Required | Description |
|---|---|---|
DATABASE_ID | yes | Database ID. |
Option | Short | Default | Description |
|---|---|---|---|
--app | -a | — | Application UUID to allow. Repeatable. |
--project | -p | default | Project alias. |
novps databases deleteDelete a database.
Argument | Required | Description |
|---|---|---|
DATABASE_ID | yes | Database ID. |
Option | Short | Default | Description |
|---|---|---|---|
--force | — | false | Skip the typed confirmation. |
--project | -p | default | Project alias. |
novps databases replicaPostgreSQL only. One replica per database.
Command | Arguments | Options |
|---|---|---|
replica create | DATABASE_ID | --size/-s (required), --wait/-w, --json, --project |
replica resize | DATABASE_ID | --size/-s (required), --json, --project |
replica delete | DATABASE_ID | --force, --project |
novps databases backupsPostgreSQL and MySQL.
Command | Arguments | Options |
|---|---|---|
backups list | DATABASE_ID | --json, --project |
backups create | DATABASE_ID | --wait/-w, --json, --project |
backups delete | DATABASE_ID, BACKUP_ID | --force, --project |
novps databases poolPostgreSQL only.
Command | Arguments | Options |
|---|---|---|
pool list | DATABASE_ID | --json, --project |
pool create | DATABASE_ID | --size/-s (required), --mode/-m (transaction, default, or session), --target/-t (primary, default, or replica), --json, --project |
pool update | DATABASE_ID, POOL_ID | --size/-s, --mode/-m, --json, --project |
pool delete | DATABASE_ID, POOL_ID | --force, --project |
novps databases dbThe individual databases inside one instance. PostgreSQL and MySQL.
Command | Arguments | Options |
|---|---|---|
db list | DATABASE_ID | --json, --project |
db create | DATABASE_ID | --name/-n (required), --json, --project |
db delete | DATABASE_ID, ENTRY_ID | --force, --project |
novps databases pg-dbis kept as a hidden alias fordb. Usedbin new scripts.
novps databases userUsers inside one instance. PostgreSQL and MySQL. The generated password is printed once, on creation.
Command | Arguments | Options |
|---|---|---|
user list | DATABASE_ID | --show-password, --json, --project |
user create | DATABASE_ID | --name/-n (required), --grant/-g (repeatable, <dbname>=ro|all|null), --json, --project |
user delete | DATABASE_ID, ENTRY_ID | --force, --project |
novps databases pg-useris kept as a hidden alias foruser. Useuserin new scripts.
novps registry listList the namespaces in the Granite Docker registry.
Option | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
S3-compatible buckets. Buckets and keys are addressed by their unique identifier — internal_domain for a bucket, internal_name for a key — not by display name, because display names are not guaranteed unique within a project. Run the matching list command to see the identifier in the first column.
novps storage listList buckets, with their origin and CDN endpoints.
Option | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps storage createCreate a bucket. A unique identifier suffix is appended to the display name automatically; the identifier to use afterwards is internal_domain in the output.
Argument | Required | Description |
|---|---|---|
NAME | yes | Display name, 3–40 characters, alphanumeric and dashes. |
Option | Short | Default | Description |
|---|---|---|---|
--region | — | eu | Region. |
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
novps storage set-accessChange a bucket's access policy.
Argument | Required | Description |
|---|---|---|
BUCKET | yes | Bucket identifier ( internal_domain). |
ACCESS_LEVEL | yes | private, public-read or public-full. |
novps storage deleteDelete a bucket. Every object in it is permanently removed.
Argument | Required | Description |
|---|---|---|
BUCKET | yes | Bucket identifier ( internal_domain). |
Option | Short | Default | Description |
|---|---|---|---|
--force | — | false | Skip the typed confirmation. |
--project | -p | default | Project alias. |
novps storage filesArgument | Required | Description |
|---|---|---|
BUCKET | yes | Bucket identifier. |
Option | Short | Default | Description |
|---|---|---|---|
--path | — | — | Folder path prefix. |
--page-size | — | 100 | Items per page (1–1000). |
--continuation-token | — | — | Continuation token from the previous page. |
--all | — | false | Fetch all pages and print them together. |
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
Upload a local file through a pre-signed URL.
Argument | Required | Description |
|---|---|---|
BUCKET | yes | Bucket identifier. |
LOCAL_FILE | yes | Local file to upload. Must exist and be readable. |
Option | Short | Default | Description |
|---|---|---|---|
--key | — | file name | Remote key. |
--content-type | — | — | Content-Type header for the object. |
--project | -p | default | Project alias. |
Argument | Required | Description |
|---|---|---|
BUCKET | yes | Bucket identifier. |
KEY | yes | Remote key to download. |
Option | Short | Default | Description |
|---|---|---|---|
--output | -o | key basename in the working directory | Output path. |
--duration | — | — | Pre-signed URL lifetime, in seconds. |
--project | -p | default | Project alias. |
Rename, that is move, a file within a bucket.
Argument | Required | Description |
|---|---|---|
BUCKET | yes | Bucket identifier. |
KEY | yes | Current key. |
NEW_KEY | yes | New key. |
Argument | Required | Description |
|---|---|---|
BUCKET | yes | Bucket identifier. |
KEYS | yes | One or more keys to delete. |
Option | Short | Default | Description |
|---|---|---|---|
--force | — | false | Skip the confirmation. |
--project | -p | default | Project alias. |
novps storage keysOption | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
The secret is shown once, on success. There is no way to read it again — regenerate the key instead.
Argument | Required | Description |
|---|---|---|
NAME | yes | Display name, 3–60 characters, alphanumeric, dot and dash. |
Option | Short | Default | Description |
|---|---|---|---|
--bucket | -b | — | Bucket permission as <bucket>:<ro|rw>, where bucket is the internal_domain. Repeatable. |
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
Argument | Required | Description |
|---|---|---|
KEY | yes | Key identifier ( internal_name). |
Option | Short | Default | Description |
|---|---|---|---|
--name | — | — | New display name. |
--bucket | -b | — | Replace permissions; format <bucket>:<ro|rw>. Repeatable. |
--replace-permissions | — | false | Replace permissions with the --bucket list. Pass with no --bucket to clear them all. |
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
Regenerate a key's secret. The old secret stops working immediately.
Argument | Required | Description |
|---|---|---|
KEY | yes | Key identifier ( internal_name). |
Option | Short | Default | Description |
|---|---|---|---|
--force | — | false | Skip the confirmation. |
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
Argument | Required | Description |
|---|---|---|
KEY | yes | Key identifier ( internal_name). |
Option | Short | Default | Description |
|---|---|---|---|
--force | — | false | Skip the typed confirmation. |
--project | -p | default | Project alias. |
novps github listList the GitHub installations linked to the current project. Output columns: ID, Account.
Option | Short | Default | Description |
|---|---|---|---|
--json | — | false | Output as JSON. |
--project | -p | default | Project alias. |
An empty list means the Granite GitHub App is not installed for this project, which is what source_type: github in a manifest needs. Install it at https://github.com/apps/granite-so/installations/new and link the account in the dashboard — this cannot be done from the CLI.
Databases are not reachable from outside the platform, and resources may expose internal ports that have no public domain. Port forwarding is how you reach either from your own machine — to run a migration, open a SQL client, or debug an internal service.
novps port-forward databaseArgument | Required | Description |
|---|---|---|
DATABASE_ID | yes | Database ID to forward to. |
Option | Short | Default | Description |
|---|---|---|---|
--local-port | -l | the engine's default port | Local port to listen on. |
--project | -p | default | Project alias. |
novps port-forward resourceArgument | Required | Description |
|---|---|---|
RESOURCE_ID | yes | Resource ID to forward to. |
REMOTE_PORT | yes | Remote port on the resource. |
Option | Short | Default | Description |
|---|---|---|---|
--local-port | -l | the remote port | Local port to listen on. |
--project | -p | default | Project alias. |
novps versionPrint the installed CLI version. The Claude Code skill requires v0.3.0 or later.