deploy command is a one-shot workflow that creates a pod (if it doesn’t exist), syncs your local code, installs dependencies, and reloads the app service. You can also deploy straight from a GitHub repo with --repo — no local files needed.
Basic Usage
What Happens
- Pod check — If the pod doesn’t exist, it’s created (and the CLI waits for it to be running)
- File sync — Local directory is uploaded to the pod’s app root, skipping unchanged files and anything excluded (see Which files get uploaded)
- Reload — Dependencies are installed, the app is rebuilt where the preset has a build step, the app service is restarted and health-checked (skip with
--no-reload)
Which files get uploaded
deploy uploads a file only if it differs from the copy already on the pod, and skips it entirely if
it matches either of these:
- One of the
--excludepatterns. The defaults arenode_modules,vendor,.git,.env,__pycache__,.DS_Store,.venv,venv,.next,.instapods-build-hash. Passing--excludereplaces that list rather than adding to it. - A pattern in the
.gitignoreof the directory you are deploying. This happens by default, whether or not the directory is a git repository, and only that top-level.gitignoreis read.
--no-gitignore to ignore the .gitignore and sync everything except the --exclude patterns.
Pass --force to re-upload every file instead of only the changed ones.
Deploy from a GitHub repo
Pointdeploy at a GitHub repository instead of local files. InstaPods detects the stack from the repo, creates the pod, attaches the repo, and builds & runs it. Every push after that redeploys automatically (with build logs and rollback, like git deploy).
--repo the CLI skips local file sync: it detects the preset from the repo’s root files (same rules as below), creates the pod, then follows the first build to completion. Public repos work out of the box; private repos need a GitHub account connected in the dashboard. If the stack can’t be detected, pass --preset.
Flags
What --no-build skips, per preset
On
nodejs, InstaPods already skips the build automatically when your source tree hasn’t changed
since the last one - that is the build skipped (unchanged) line in the deploy output. You rarely
need --no-build.Preset Auto-Detection
If--preset is omitted, the CLI scans your local directory for signature files:
The first match wins, top to bottom. The order matters for repos that carry more than one marker: a
Laravel or WordPress app ships a
package.json to build its front-end assets but is still PHP, and a
Go service with a JavaScript front-end in the same repo is still Go. Pass --preset to override.