Quick Start
Deploying a Repo From Scratch
If the pod doesn’t exist yet, the From GitHub path in the create wizard reads your repository first and proposes a complete deploy plan, which you can edit before anything is created:- Runtime and plan - detected from your root files. Every preset starts on Launch unless the plan is raised for a reason you can see (a repo that needs a managed database starts on Build, because Launch can’t run one).
- Install, build, start and release commands - detected, and editable inline.
- Managed services - when the repo clearly needs PostgreSQL, MySQL or Redis, they’re installed
on first deploy and their connection strings written into your app’s environment, so the app boots
connected.
DATABASE_URLandREDIS_URLare always written; an app that reads a different name (POSTGRES_PRISMA_URL, say) gets that one filled too. - Environment variables - the wizard lists the ones your repo needs and asks for the values it
can’t know. It handles two kinds itself:
- Generated secrets (session and auth keys) are minted server-side, stored once, and reused on every redeploy - regenerating them would sign everyone out on each deploy.
- Self-URL variables (
APP_URL,NEXTAUTH_URL, …) are filled with the pod’s own URL at deploy time, because the pod has no URL yet while you’re filling the form. Type a value yourself to pin a custom domain instead.
- Database migrations - a detected migration command becomes the release command and runs on every deploy, after the services are wired.
Laravel
A Laravel repo is recognised as a special case: the wizard offers to provision MySQL with it and starts it on the Build plan (Launch has no services), writes the database credentials into.env,
runs php artisan migrate --force as the release command, and builds your front-end assets.
From the CLI
instapods env set and
instapods services add. Use the dashboard wizard when you want them wired in
before the first build.
Connecting a Repository
GitHub Repository
- CLI
- Dashboard
- API
Connecting Your GitHub Account
Your GitHub connection belongs to your account, not to a pod, so you can set it up before you have any pods. Go to Integrations in the sidebar (/dashboard/integrations) - the GitHub card shows
whether you’re connected, which accounts and organisations the InstaPods app is installed on, and
how many repositories each one exposes.
That repository count is the thing to check when the repo picker looks empty: the GitHub App is
installed per account or organisation and per repository, so a repo in an org you didn’t grant
access to simply won’t appear. Configure on GitHub, at the bottom of the card, takes you
straight to the installation settings where you can add it.
A private repository needs this connection. Public repos deploy without one, but pasting a
private repo’s URL without a connected GitHub account is refused with “this looks like a private
repository - connect GitHub to deploy it, or use a public repo”. Connect the account (and grant
the app access to that repo) and paste the URL again.
Any Git URL
You can connect any publicly accessible Git repository:Auto-Deploy on Push
When a repository is connected with auto-deploy enabled (the default), pushing to the configured branch triggers a deployment automatically. For GitHub repositories, InstaPods sets up a webhook that fires on every push. For other Git providers, you can configure a webhook manually using the URL shown in the dashboard.How a Deploy Works
- Pull — The latest code is pulled from the configured branch
- Install — Dependencies are installed based on the preset (see below)
- Build — Build commands run if configured
- Restart — The application service restarts with the new code
Skip a Deploy
Add[skip deploy] to your commit message to push without triggering a deployment:
Build Auto-Detection
InstaPods uses AI to analyze your project files and automatically determine the right install, build, and start commands for each deploy. This works for all presets and handles frameworks like Next.js, Vite, Django, Laravel, and more — without any configuration. The AI inspects files likepackage.json, requirements.txt, composer.json, framework configs, and your directory structure. It detects:
- Install commands —
npm install,pip install -r requirements.txt,composer install, etc. - Build commands —
npm run build, framework-specific builds - Start commands —
node server.js,serve -s build,gunicorn app:app, etc. - App port — The port your app listens on
Package Manager
The package manager is not a guess. If your repo has abun.lock, pnpm-lock.yaml or yarn.lock,
or a packageManager field in package.json, InstaPods uses that tool for both install and build -
npm cannot resolve a workspace: dependency from a bun, pnpm or yarn monorepo, so getting this
wrong would break the install outright. Make sure your start command uses the same tool
(bun run start, not npm start, for a bun project).
Monorepos
A pod runs one app. In a monorepo, build only the package you’re going to serve:turbo run build or pnpm -r build builds every sibling app, and one unrelated package
failing fails your whole deploy. Use --subdirectory (below) when the app you want lives in a
subfolder of the repo.
A repo containing two runtimes - a Node frontend and a Python backend, say - deploys the detected
one only, and the wizard warns you when it spots this. If the server you actually want is the
other runtime, set a custom start command, or deploy that side to its own pod.
Custom Commands
Every command is editable - during the create wizard, and afterwards on the pod’s Git tab:
The start command matters most: it’s what you set when your app doesn’t start the way its preset
assumes (
open-webui serve on a Python pod, node server.js for a Next.js standalone build, a
cd apps/web && bun run start in a monorepo).
- CLI
- API
When a Deploy Fails
Failed deployments are diagnosed automatically. The Git tab shows a banner on the failed deployment naming what went wrong - a stale lockfile, missing build-time environment variables, a monorepo sibling that broke the build, a branch that isn’t on the remote, a dev script being used to serve production - with the build log underneath. See Deploy Doctor for the full list, and for what happens when the app deploys fine but doesn’t stay up.Check Git Status
See the current git configuration and last deployment status:- CLI
- API
Manual Deploy
Trigger a deployment manually, even if auto-deploy is off:- CLI
- API
Deployment History and Logs
Every deployment is recorded with its status, commit, and build output.View Deployments
- CLI
- API
View Build Logs
- CLI
- API
Rollback
Revert to a previous deployment:- CLI
- API
GitHub Commit Status Checks
When deploying from a GitHub repository, InstaPods reports deployment status back to GitHub as commit status checks. You’ll see a green checkmark (or red X) on your commits and pull requests. This works automatically for public repositories. For private repositories, make sure the auth token you provided hasrepo:status scope.
Disconnect
Remove the git connection from a pod:- CLI
- API