Get started with web apps
A web app is an app the platform builds from a GitHub repository and runs for you, in a container of its own on your workspace's private network. It detects your stack, builds an image, serves it over HTTPS at a hostname of its own, and builds again on every push to the branch you track. If a new version fails its health check, the one before keeps serving.
Before you start
- A workspace role of Owner, Admin or Developer.
- A GitHub account that can see the repository.
1. Link GitHub
GitHub is linked to your account once, and is then available in every workspace you belong to.
- Open Account → Integrations and choose Link GitHub under GitHub.
- Choose Install GitHub App, pick the GitHub account or organization that owns the repository, and choose on GitHub which repositories the app may see.
To widen the selection later, use Adjust GitHub App access on the import page, or the same Integrations page.
2. Import the repository
Open Web apps and choose Deploy an app. On Import a Git repository, pick the Repository, then fill in:
- Branch: the branch you deploy. Pushes to it start a deployment.
- Root directory: leave it at
./, or name the folder to build from in a monorepo. - Automatic deployments: on, to redeploy on every push.
- App name: lowercase letters, numbers and inner dashes, such as
storefront. It becomes part of the app's URL. - Connected resources: link an instance of the workspace, and its connection string is added as an environment variable, pointed at its private name.
- Environment variables: the settings and secrets your app needs. Paste a whole
.envfile into a key field to add every line at once.
Select Deploy. The first build starts at once.
3. Watch it deploy
The app's Deployments lists every build, and each row opens its live build log. A deployment goes through Cloning repository, Detecting framework, Building image, Deploying container and Live. A failed step is named, with the build output beside it.
The platform detects Next.js, Nuxt, Astro, SvelteKit, React Router, Vite, Node.js, Python, Go and static sites, and builds your own Dockerfile when the repository has one. To pin the build, commit a sahabti.json: see Build configuration.
4. Open it
The app is served at a hostname of its own, shown on its page as soon as it exists:
https://storefront-k3x9mq.sahabti.app
Visit opens it. Your app must listen on the port the platform gives it: see Web app runtime.
5. Add your own domain
Open the app's Domains and choose Add domain. Enter a hostname you own, such as www.example.com, and open its Set up:
- Prove you own the domain with the TXT record it shows, once per domain.
- Point the hostname at the platform with a CNAME record to
apps.sahabti.app.
Once the domain is verified and the CNAME is live, the certificate follows on its own and the hostname shows Active. The default URL keeps working. See Get started with domains.
With PromptOps
In a workspace with PromptOps on, ask in the chat. It asks before it changes anything, and before it reads your app's logs:
- "Why did the last deploy of storefront fail?"
- "Redeploy storefront."
- "Roll storefront back to the deployment before the last one."
- "Show what storefront printed in the last hour."
Importing a repository is not one of its actions: deploy a new app in the console.
With the API or MCP
Importing a repository reads your own GitHub account, so it takes you signed in to the console. A token with the project actions then lists apps, reads deployments, and redeploys:
curl -X POST "https://api.sahabti.com/v1/apps/$APP_ID/redeploy" \
-H "x-api-key: $SAHABTI_TOKEN"
GET /v1/apps?orgId=$WORKSPACE_ID lists the workspace's apps with their ids. Over MCP, use list_apps, list_deployments, get_app_logs and redeploy_app.
What it costs
There is no size to pick. See the pricing page for what each plan includes, and Usage for what the workspace's apps used this month.
First checks
- The latest deployment shows Live, and Visit opens the app over HTTPS.
- Logs shows what the app prints, live.
- Processes lists the running processes.
- Each of your own hostnames on Domains shows Active.
Next steps
- Web apps: deploy on push, redeploy, roll back and environment variables
- Build configuration: pin the build with
sahabti.json - Web app runtime: port, health check, processes and private names
- Get started with databases: a database for your app