If you maintain an open-source web project, a Deploy to InstaPods button lets anyone run it on a real Linux server — with HTTPS and auto-deploy on every push — in one click. No Dockerfile, no CI, no setup.Documentation Index
Fetch the complete documentation index at: https://docs.instapods.com/llms.txt
Use this file to discover all available pages before exploring further.
Add the button
The badge is a Markdown image wrapped in a link. Paste this into yourREADME.md and replace OWNER/REPO with your repository:
Link options
The button is just a link to the create page with query parameters:| Parameter | Required | Description |
|---|---|---|
repo | Yes | Your GitHub repository URL, e.g. https://github.com/OWNER/REPO |
branch | No | Deploy a specific branch (defaults to the repo’s default branch) |
&, ?, or #.
Test it
Open the deploy link
Click your badge (or open the URL directly). You land in the create wizard with From GitHub preselected and your repo pre-filled. If you’re not signed in, you’ll sign in or sign up first, then continue.
Check detection
The wizard inspects your repo and shows the detected stack, e.g. Detected nodejs (package.json), plus a suggested plan. If it can’t detect a supported stack, pick a preset from the dropdown to continue.
Verify the deploy end to end
Use this checklist to confirm everything works — it’s the exact path the button triggers.Stack detected correctly
On the create wizard (or in the CLI output) confirm the detected preset matches your project:
nodejs, php, python, or static. If it’s wrong, your manifest may not be at the repo root — see Make detection reliable.Pod reaches Running
The pod goes
creating -> running in about 10-30 seconds. The Git tab opens automatically and the first deployment appears.Build log shows clone -> install -> build -> start
Open the deployment on the Git tab and read the build log. A successful Python deploy ends like this:Node shows
npm install + npm run build; PHP shows composer install; static skips install. If the build fails, the error and the log tail are right there — fix it in your repo and push, or hit Redeploy.App serves over HTTPS
Visit the pod’s URL (shown on the dashboard), e.g.
https://your-app.nbg1-1.instapods.app, or check from a terminal:Push redeploys automatically
Push a commit to the tracked branch. A new deployment starts on its own (auto-deploy is on by default) and appears in the Git tab with its own build log.
Supported stacks
| Stack | Detected by | What InstaPods runs |
|---|---|---|
| Node.js | package.json (or tsconfig.json, next.config.*, a lockfile) | npm install, npm run build if a build script exists, then your start script |
| PHP | composer.json (or *.php, artisan) | composer install, served by nginx + PHP-FPM 8.3 (Laravel public/ detected) |
| Python | requirements.txt / pyproject.toml | pip install in a virtualenv; gunicorn/uvicorn auto-detected for WSGI/ASGI apps |
| Static | index.html | Served straight from nginx |
Dockerfile-based projects and other languages (Go, Rust, Java, Ruby) aren’t supported yet — the button currently builds Node, PHP, Python, and static projects.
Make detection reliable
A few things make the one-click experience smooth for your users:- Keep your manifest at the repo root. Detection reads root-level files only —
package.json,composer.json,requirements.txt/pyproject.toml, orindex.html. - Provide a start command. Node: a
start(orserver/serve) script inpackage.json. Python: a gunicorn/uvicorn entry such asapp:app. - Listen on the right host and port. InstaPods sets
HOST=0.0.0.0andPORT(3000 for Node, 8000 for Python). Read those env vars, or bind to that port directly, so the app is reachable. - Commit a lockfile (
package-lock.json,composer.lock, etc.) for reproducible installs.
Troubleshooting
The build failed
The build failed
Open the failed deployment on the pod’s Git tab — the error message and the tail of the build log are shown. Common causes: a dependency that needs a system package, a missing build/start script, or the app not listening on the expected port. Fix it in your repo and push (or hit Redeploy).
It detected the wrong stack (or none)
It detected the wrong stack (or none)
Pick a preset in the wizard before deploying, or pass
--preset to the CLI. This usually means the manifest isn’t at the repo root.It's a private repository
It's a private repository
Connect your GitHub account in the dashboard first (Settings -> GitHub). Once the InstaPods GitHub App can see the repo, the button deploys it like any other. The public button targets public repos.
The app deploys but the URL doesn't respond
The app deploys but the URL doesn't respond
Make sure your app listens on
0.0.0.0 and the port InstaPods sets (PORT env var: 3000 for Node, 8000 for Python). Apps that hardcode localhost or a different port won’t be reachable through the proxy.