Getting started
End-to-end tour of the platform. Connect a repo, deploy your first app, set up environments, attach a database, point a custom domain, and learn how to roll back when something breaks. Each step corresponds to a page in the console - keep this open in a second tab as you go through.
Plans at a glance
Each plan limit is enforced at the resource level (create, deploy, rollback) and surfaced inline in the console when you hit it.
| Feature | Free | Pro | Team |
|---|---|---|---|
| Projects | 1 | 5 | 15 |
| Environments per project | 1 | 3 | Unlimited |
| Add-ons per project | - | 2 | 5 |
| Groups | - | Yes | Yes |
| Rollbacks | - | Yes | Yes |
| API access | - | 100 req/min | 500 req/min |
| Backup retention | - | 7 days | 30 days |
1. Connect a Git provider
Link your GitHub, GitLab, Bitbucket, or Codeberg account so orkestr can access your repositories.
- Go to Settings from the sidebar.
- Scroll to Connected Providers.
- Click the provider you want to connect (e.g. GitHub).
- Authorize orkestr via the OAuth flow on the provider's site.
- You'll be redirected back - the provider now shows Connected with your username.
2. Create a project
A project represents a single app or service linked to a Git repository.
- Navigate to Projects and click New Project.
- Pick a repository from your connected providers, or paste a repo URL manually.
- orkestr auto-detects the framework, port, and Dockerfile. For monorepos it lists each service - pick the one you want to deploy.
- Review the auto-generated name, slug (used in your URL, e.g.
my-app.orkestr.run), branch, and description. Edit any field if needed. - Click Create Project.
3. Add environment variables
Most apps need configuration like database URLs, API keys, or feature flags. Set these before your first deploy so the app starts correctly.
- Open your project and click into the environment you want to configure (e.g. production).
- Scroll to Environment Variables.
- Add key-value pairs (e.g.
DATABASE_URL,SECRET_KEY). - Values are encrypted at rest and masked in the dashboard. They are injected into your container at runtime.
4. Deploy your app
Trigger a deployment to build a Docker image from your repo and run it on orkestr's infrastructure.
- Open your project and select the environment you want to deploy (defaults to production).
- Click the Deploy button.
- orkestr clones your repo, builds a Docker image, and starts the container.
- Follow the build pipeline in real time - each step (clone, build, push, deploy) shows live logs.
- Once the status shows Live, your app is running at its
slug.orkestr.runURL.
5. Set up environments
Environments let you run the same project from different branches - e.g. production, staging, and dev - each with its own URL, env vars, and deploy history.
- Open your project and scroll to Environments.
- Click + Add Environment.
- Enter a name (e.g.
staging) and the branch it should deploy from (e.g.develop). - Click create. The environment gets its own subdomain (e.g.
my-app-staging.orkestr.run). - Click into the environment to configure environment variables, toggle auto-deploy, or trigger a deployment.
6. Create a group
Groups connect multiple projects on a private network so they can talk to each other via internal DNS - perfect for a frontend + API + worker setup.
- Navigate to Groups and click New Group.
- Enter a name and optional description. The slug auto-generates.
- Click Create Group.
- On the group detail page, click Add Service and select the projects you want to include.
- Services in a group can reach each other at
http://project-name:porton the private network.
7. Add a database or cache
Provision a managed PostgreSQL database or Redis cache and have the connection string automatically injected as an environment variable.
- Navigate to Add-ons and click Add Service.
- Select the project the add-on belongs to and optionally assign it to a group for private networking.
- Enter a name (e.g.
main-db) and choose PostgreSQL or Redis. - Click Create Add-on. The connection URL is injected as
DATABASE_URLorREDIS_URL. - Manage backups from the add-on card - trigger manual backups, download, or schedule automatic ones.
8. Configure a custom domain
Point your own domain to any project. orkestr handles TLS certificates automatically.
- Navigate to Domains and find your project.
- Click Add domain and enter your custom domain (e.g.
app.yourdomain.com). - Click Save. The status will show Pending DNS.
- At your DNS provider, add a CNAME record pointing to your project's default domain (shown in the instructions).
- Click Verify DNS. Once propagation completes (usually minutes, up to 48 hours), the status changes to Active and your domain is live.
yourdomain.com), use an ALIAS or ANAME record if your DNS provider supports it - CNAME is not standard for root domains.9. Monitor your app
Keep an eye on your running containers with built-in monitoring for CPU, memory, logs, and health.
- Navigate to Monitoring from the sidebar.
- Stats - view real-time CPU usage, memory consumption, and network I/O per container.
- Logs - stream your application's stdout/stderr output with configurable line count.
- Health - check container status, uptime, and restart count at a glance.
10. Roll back a deployment
If a deployment introduces a bug or breaks your app, you can instantly revert to a previous working version.
- Open your project and go to the environment with the broken deployment.
- In the deployment history, find the last deployment that was working (status superseded).
- Click Rollback on that deployment.
- orkestr restarts your container with the previous Docker image - no rebuild required, so it's near-instant.
11. Generate an API token
API tokens let you interact with orkestr programmatically - from CI/CD pipelines, the CLI, or MCP-connected AI assistants.
- Go to Settings and switch to the API tab.
- Enter a name for the token (e.g.
CI/CD Pipeline) and choose an optional expiry (30, 90, 180, 365 days, or never). - Click Create Token.
- Copy the token immediately - it is only shown once and cannot be retrieved later. Tokens are hashed before storage.
sandboxes:read / sandboxes:write scopes so the token cannot reach the rest of the platform if it leaks.12. Create a serverless function
Paste a handler, pick a runtime, get a public URL in seconds. No Dockerfile, no repo - the platform wraps your code in a tiny HTTP server, builds the image, and runs it as a scale-to-zero container.
- Navigate to Functions and click New Function.
- Enter a slug (e.g.
stripe-webhook) - this maps tofn-stripe-webhook.orkestr.run. - Pick a runtime: Node.js 20 or Python 3.12.
- Choose auth: public (for webhook receivers) or API key (auto-generated, sent as
X-Orkestr-API-KeyorAuthorization: Bearer). - Paste your handler code. The event object has
method,path,query,headers, andbody. - Click Create function, then Save & Deploy on the detail page. Build takes ~10 seconds.
- Use the Test tab to invoke with custom method, path, body, and headers - response, duration, and status are shown inline.
- Watch live container output in the Logs tab. The Settings tab shows which node it landed on and lets you rotate the API key.
Node.js example
// Node.js 20 - echo the request back
exports.handler = async (event) => {
return { method: event.method, path: event.path, query: event.query };
};Python example
# Python 3.12 - same thing
def handler(event):
return {"method": event["method"], "path": event["path"]}Next steps
- REST API reference - script everything you did in the console
- CLI - the same surface from your terminal
- MCP server - connect Claude Code, Cursor, or any MCP client
- Workflow examples - PR previews, CI/CD, rollback scripts, batch ops
- Sandboxes - hardware-isolated VMs for AI agents