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.
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
--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
create --tier or update --tier.
templates
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
create --github-connection.
list
get
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
delete
--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
rollback.
rollback
scale
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
resume
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.
links
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
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
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
instances
usage
--service shows one app.