Where variables live
Variables are scoped to either a Project or a Frame:- Project variables apply to every Frame in the Project. Good for things shared across apps (
SENTRY_DSN,DATABASE_URL). - Frame variables apply to one Frame only. Good for app-specific settings (
PORT,NODE_ENV).
When you wire a managed database to an app (via
nubo.toml), Nubo auto-injects the connection string as a Frame variable named DATABASE_URL (the key is configurable with inject_as in nubo.toml). If you also set DATABASE_URL yourself, the platform-managed value can override it.Add variables
From the dashboard, open the Frame and go to Frame Settings to manage its variables. The dashboard manages variables at the Frame level only; to set project-scoped variables, use the API (POST /v2/projects/<id>/variables). Keys must start with a letter or underscore and contain only letters, numbers, and underscores ([A-Za-z_][A-Za-z0-9_]*).
Via the API (note: the body is a JSON array, so you can add multiple at once):
Using variables in your app
Variables are available exactly like any other env var - no special SDK or prefix.Update or remove
Changing a variable doesn’t automatically redeploy - trigger a new deploy from the dashboard or push a commit to apply the change. To change a value (the rotate-a-secret flow), PATCH the variable by its ID:Secrets
Values are encrypted at rest. Listing variables on a Project or Frame returns the keys and metadata only. To see a single value, use the reveal endpoint:The port your app should listen on
Nubo doesn’t setPORT for you. The port configured on your Frame is the source of truth for routing, so your app must listen on exactly that port. Setting a PORT variable is just a convenience your app can read: it does not change the routed port, and its value must match the Frame’s configured port.