Skip to main content
Updated October 19, 2026 The raff apps command group (alias: raff app) covers every Raff Apps operation in the public API: web services, private services, workers, cron jobs and one-off jobs. Each subcommand supports --output json for scripting.
This creates a web app from a public Docker image and deploys it right away. The command prints the app’s ID, such as svc-abc12345; once the deploy is live, get shows the app’s https address. Commands take the app’s ID (svc-abc12345) or its UUID, not its name. list shows the IDs. Creating an app needs a project: pass --project-id, set RAFF_PROJECT_ID, or set a default with raff configure.

Deploy from a folder

The first command creates an app that builds from uploaded source, here with the folder’s Dockerfile. The second zips the folder, uploads it and starts a build. Without --builder dockerfile, Raff detects the stack and builds it. Files and folders listed in .raffignore are skipped (one pattern per line, # starts a comment). So are .git, node_modules, .venv, venv, __pycache__, .DS_Store and .env. Build output such as dist and bin is uploaded, so a Dockerfile can copy it. The archive can be at most 100 MB. Local .env files are never uploaded: set variables with env set.

Subcommand index


tiers

Lists each size with its ID, vCPU, memory, disk and monthly and yearly price. Pass the ID to create --tier or update --tier.

templates

Lists the templates with their image, port, the smallest size they run on (MIN TIER) and whether they need Postgres (required, optional or no). To run one, pass its image and port to create. A template that needs Postgres also needs a database link.

github

Lists the account’s GitHub connections with their ID, GitHub account, type and status. Connect GitHub in the dashboard first, then pass the ID to create --github-connection.

list

Shows each app’s ID, address name, type, size, status and URL. With a project set, only that project’s apps are listed.

get

Shows the name, type, source, size, instances, status, URL, region and billing type.

create

Creating an app from GitHub (--repo with --github-connection) needs a recent GitHub sign-in by the API key’s owner: in the last 7 days they must have pressed Continue with GitHub on the dashboard’s create page, and their GitHub account must be able to see the repository in that connection. Otherwise the create is refused with “Continue with GitHub, then choose the repository again. Raff only deploys repositories your GitHub account can see.”

update

Only the flags you pass change. A change to how a live app runs (size, port, start command, health check, cron settings) rolls out as a new deploy, and on a failed app it starts one. A paused app keeps the change and applies it when resumed.

delete

Deletion runs in the background; the name and address are released once it completes. Usage up to deletion is billed. Linked databases are not deleted. --force skips the confirmation prompt.

deploy

With no flag, deploy redeploys what runs now. --dir, --image and --source-blob-key cannot be combined. A paused app must be resumed first.

deployments

Lists deploys with their ID, number, channel, status, commit and creation time. Pass an ID to rollback.

rollback

Starts a new deploy from an earlier deploy’s image and settings. The target must be a deploy that went live.

scale

Flags you leave out keep the app’s current settings. An app has at most 6 instances and an account at most 20; contact support to raise them. Workers and private apps that stay awake run a fixed count. An app that scales to zero sleeps about 15 minutes after its last request and wakes on the next one, which takes a few seconds longer.

pause

Stops the app and its billing.

resume

Starts a paused app again. Resuming an app that never went live puts it back in error; deploy it instead.

env

list masks secret values; --reveal shows them and needs permission to manage apps. The SYSTEM column marks variables a database link sets. Setting a variable rolls it out to the running app. Frameworks that read configuration at build time need --scope build or --scope both: Next.js NEXT_PUBLIC_*, Vite VITE_*, Create React App REACT_APP_*, SvelteKit and Astro PUBLIC_*. Without it those values are empty. A change to a build variable rebuilds the app. Image apps are never built, so they refuse build variables. Build values can be read from the image history, so keep credentials at runtime.
add links a running managed PostgreSQL database: the app gets its own database user and DATABASE_URL, DATABASE_HOST, DATABASE_PORT, DATABASE_USER, DATABASE_PASSWORD, DATABASE_NAME and DATABASE_CA_CERT, then redeploys. Connections go over Raff’s private network with TLS. <database-id> is the ID from raff db list, or the database’s UUID. rotate gives the app new database credentials and redeploys it. delete removes the link, the app’s database user and the variables. list shows each link’s ID.

domains

For web apps. add prints a CNAME target and a TXT record name and value: create both at your DNS provider, then verification and the TLS certificate run automatically. list shows each domain’s ID and status: pending_dns, verifying, dns_verified, issuing_cert, active or error.

previews

For web apps from GitHub, after update --previews. Every pull request gets its own copy at its own address; how many depends on the app’s size. Previews never get the app’s database link credentials. redeploy builds and deploys the pull request’s latest commit again.

logs

events

The app’s activity timeline: deploys, setting changes, scaling, database links, domains, previews, pauses and errors.

instances

Lists the running instances with their phase, whether they are ready, restarts and start time.

usage

Month-to-date instance hours and estimated charge per app, with the total. --service shows one app.
Last modified on October 19, 2026