You built it.We’ll keep it running.

Deploy your apps to Terrace with one command. Add authentication, create teams, and manage permissions. Serve at my-app.terrace.app or add a custom domain.

Deployalways on

Ship your app with one command, or ask your AI agent to do it. No infrastructure to set up.

terrace deploy ./my-appmy-app.terrace.app
Sharesecure

Choose who has access to your app: just you, a few named people, everyone in your org, or anyone on the web.

Scaleflexible

Customize compute, memory, and disk for each app.

Monitorbuilt in

Requests, errors, and latency from the first deploy, with searchable logs you never had to wire up.

Ship it, fast

Run terrace deploy ./my-app or ask your AI agent to deploy. Every app lands on its own terrace.app address.

Terminal
$terrace deploy ./my-app
Building… 9s
Sign-in configured for everyone at acme.com
Live athttps://my-app.terrace.app
Your agent
Ship this to Terrace and give the design team access.
Done — deployed and shared with Design.
https://my-app.terrace.app
The CLI is agent-friendly: readable output, exit codes, no browser step.

Any stack

If it runs in a container, it runs on Terrace. No Dockerfile required for common stacks.

  • Next.js
  • Nuxt
  • SvelteKit
  • Remix
  • Astro
  • Django
  • Flask
  • FastAPI
  • Rails
  • Laravel
  • Phoenix
  • Express
  • NestJS
  • Spring Boot
  • .NET
  • Go
  • Rust / Axum
  • Bun
  • Deno
  • Streamlit
  • Vite
  • Static site

Manage from one place

Manage your app's instance size, environment, view access logs and build history — all in one place.

Instance settings
Resizing a running appRecording coming soon
Logs
Live output, searchedRecording coming soon
Size it to the jobManage CPU, memory, and disk per app.
Environment and secretsSet env vars in the panel or from the CLI.
Logs and rollbackView logs and build history, rollback to a previous build in one click.

Choose who gets in

Every app carries an access rule you set at deploy and can change at any time. Open it to the whole internet, or to exactly one person.

Anyone on the internetPublic link, no sign-in. Good for demos and docs.
Everyone in your orgAnyone with a verified acme.com address is in.
Specific teamsGrant a team access; new members get it automatically.
Named peopleAdd one colleague — or one contractor — by email address.
Not on the list? Terrace answers 403 at the edge — your app never sees the request.

Identity, already in the request

Terrace signs the visitor in before your app sees the request, then hands you their identity in the headers. No login screen to build, no session code to write.

VisitorGET my-app.terrace.app
Terrace edge
Sign-inGoogle or company SSO, configured once for the org. Signs the visitor in and resolves who they are.
Identity attachedTheir email, name, ID, and teams are added to the request your app receives.
Your appRuns exactly as it does now. Identity arrives in the request:X-Terrace-User-Email
Any X-Terrace-* header a caller tries to forge is stripped before it reaches you.
Incoming request
GET /reports
X-Terrace-User-Email: sam@acme.com
X-Terrace-User-Name: Sam Ortiz
X-Terrace-User-Id: usr_9f2c1a
X-Terrace-Teams: design, oncall
Trust the headersRequests reach your app only after Terrace has authenticated them.
No provider setupGoogle and company SSO are configured once for the org — never per app, never in your code.
Same identity everywhereThe person in the header is the person in your access list, so permissions and app logic never drift apart.

Pay for what stays up

Free forever for personal projects. Pay when an app becomes something your team relies on.

Free$0for personal projects
3 apps on terrace.appSleeps after 30 minutes idleGoogle sign-in includedShare with named people
Start free
Most teams
Team$12 / person / monthbilled for people who open apps
Unlimited apps, always onOrg-wide and team accessLogs, rollback, env varsCustom domains
Start a team
EnterpriseCustomannual, invoiced
Okta, SAML, SCIMAudit log and data residencyPrivate networkingSupport with an SLA
Talk to us