8.2 KiB
npx -y @insforge/cli deployments deploy — frontend hosting (Vercel)
Deploy a frontend project (static site / SPA / Next.js / etc.) to InsForge hosting (via Vercel) from its source directory.
Looking to deploy a backend Docker container (API, worker)? Use
npx -y @insforge/cli compute deployinstead — see compute-deploy.md.
Syntax
npx -y @insforge/cli deployments deploy [source-directory] [options]
Options
| Option | Description |
|---|---|
--env <vars> |
Environment variables as JSON: '{"KEY":"value"}' |
--meta <meta> |
Metadata as JSON |
Default Directory
Current directory (.) if not specified. In most projects, this should be the app root, not dist/, build/, or .next/.
What It Does
- Creates a deployment record (gets presigned upload URL)
- Zips the source directory (max compression)
- Uploads the zip to the presigned URL
- Starts the deployment with env vars and metadata
- Polls status every 5 seconds for up to 2 minutes
- Returns the live URL and deployment ID
Excluded Files
The following are automatically excluded from the upload:
node_modules/,.git/,.next/,dist/,build/.env*,.DS_Store,.insforge/,*.log
Because build output is excluded automatically, deploy the project source tree/root directory instead of pointing the command at dist/, build/, or .next/.
Custom excludes with .vercelignore
To exclude additional files, add a .vercelignore file to the deploy source directory. It uses .gitignore syntax, including ! negation:
# .vercelignore
*.md
drafts/
!IMPORTANT.md
Notes:
- Patterns apply on top of the built-in excludes above; the built-ins always stay excluded and cannot be re-included with
!. - The
.vercelignorefile itself is never uploaded. - If the project was previously deployed directly with the Vercel CLI, an existing
.vercelignoreis honored as-is.
Environment Variables Are Required
Frontend apps need env vars (API URL, anon key, etc.) to connect to InsForge. Deploying without them produces a broken app. There are two ways to provide them:
Option A — Persistent env vars (recommended for repeated deploys):
# Check what's already configured
npx -y @insforge/cli deployments env list
# Set env vars — these persist across all future deployments
npx -y @insforge/cli deployments env set VITE_INSFORGE_URL https://my-app.us-east.insforge.app
npx -y @insforge/cli deployments env set VITE_INSFORGE_ANON_KEY ik_xxx
# Deploy the project source — persistent vars are applied automatically
npx -y @insforge/cli deployments deploy .
Option B — Inline --env flag (one-off or override):
npx -y @insforge/cli deployments deploy . --env '{"VITE_INSFORGE_URL": "https://my-app.us-east.insforge.app", "VITE_INSFORGE_ANON_KEY": "ik_xxx"}'
Before deploying, always confirm env vars are in place: either check deployments env list shows the required vars, or pass --env on the command.
Examples
# Deploy with persistent env vars already set
npx -y @insforge/cli deployments deploy .
# Deploy with inline env vars
npx -y @insforge/cli deployments deploy . --env '{"VITE_API_URL": "https://my-app.us-east.insforge.app", "VITE_ANON_KEY": "ik_xxx"}'
# JSON output
npx -y @insforge/cli deployments deploy . --json
Typical Workflow
Pre-Deployment: Local Build Verification
CRITICAL: Always verify local build succeeds before deploying to InsForge.
Local builds are faster to debug and don't waste server resources on avoidable errors.
After the build passes locally, deploy the project source directory (usually .). Do not deploy the generated output folder; the CLI excludes it automatically.
Local Build Checklist:
# 1. Install dependencies
npm install
# 2. Create production environment file
# Use the correct prefix for your framework:
# - Vite: VITE_INSFORGE_URL
# - Next.js: NEXT_PUBLIC_INSFORGE_URL
# - CRA: REACT_APP_INSFORGE_URL
# - Astro: PUBLIC_INSFORGE_URL
cat > .env.production << 'EOF'
INSFORGE_URL=https://your-project.insforge.app
INSFORGE_ANON_KEY=your-anon-key
EOF
# 3. Run production build
npm run build
Common Build Errors & Solutions
| Error | Cause | Solution |
|---|---|---|
| Missing env var errors | Build-time env vars not set | Create .env.production with framework-specific prefix |
| Module resolution errors | Edge functions scanned by compiler | Exclude edge function directories from build config |
| Static export conflicts | Dynamic routes with static export | Use SSR or configure static params per framework docs |
module_not_found |
Missing dependency | Run npm install and verify package.json |
Framework-Specific Notes
Environment Variables by Framework:
| Framework | Prefix | Example |
|---|---|---|
| Vite | VITE_ |
VITE_INSFORGE_URL |
| Next.js | NEXT_PUBLIC_ |
NEXT_PUBLIC_INSFORGE_URL |
| Create React App | REACT_APP_ |
REACT_APP_INSFORGE_URL |
| Astro | PUBLIC_ |
PUBLIC_INSFORGE_URL |
| SvelteKit | PUBLIC_ |
PUBLIC_INSFORGE_URL |
Edge Functions:
If your project has edge functions in a separate directory (commonly functions/ for Deno-based functions), exclude them from your frontend build to prevent module resolution errors. Add the directory to your TypeScript or bundler exclude configuration.
Start to Deploy
# 4. Ensure env vars are set (check existing, add any missing)
npx -y @insforge/cli deployments env list
npx -y @insforge/cli deployments env set VITE_INSFORGE_URL https://my-app.us-east.insforge.app
npx -y @insforge/cli deployments env set VITE_INSFORGE_ANON_KEY ik_xxx
# 5. Deploy the project source (persistent env vars are applied automatically)
npx -y @insforge/cli deployments deploy .
Alternatively, pass env vars inline: npx -y @insforge/cli deployments deploy . --env '{"VITE_INSFORGE_URL": "...", "VITE_INSFORGE_ANON_KEY": "..."}'
Check Deployment Status
Wait 30 seconds to 1 minute, then check status with npx -y @insforge/cli deployments status <id>.
Status Values
| Status | Description |
|---|---|
WAITING |
Waiting for source upload |
UPLOADING |
Uploading to build server |
QUEUED |
Queued for build |
BUILDING |
Building (typically ~1 min) |
READY |
Complete - URL available |
ERROR |
Build or deployment failed |
CANCELED |
Deployment cancelled |
SPA Routing
For React single-page apps, ensure a vercel.json exists in the project root:
{
"rewrites": [
{
"source": "/(.*)",
"destination": "/index.html"
}
]
}
Best Practices
-
Deploy the project source directory
- Run the command from your app root, or pass that directory explicitly
- Do not deploy
dist/,build/, or.next/directly; the CLI excludes them automatically - Never include
node_modules,.git,.env, or.insforgein the upload - Large assets should go to InsForge Storage, not the deployment
-
Always set env vars before deploying
- Use
deployments env setfor persistent vars, or--envfor one-off deploys - Run
deployments env listto verify vars are in place before deploying - Never commit
.envfiles to source or include in zip - Use the correct env var prefix for your framework:
VITE_*,NEXT_PUBLIC_*,REACT_APP_*, etc.
- Use
-
Always build locally first to catch errors before deploying.
-
Include vercel.json for SPAs
- Required for client-side routing to work properly
Common Mistakes
| Mistake | Solution |
|---|---|
| Including node_modules in zip | Exclude it - will be installed during build |
| Including .env files | Use deployments env set or --env flag instead |
Deploying dist/, build/, or .next/ directly |
Deploy the project source/root directory instead; the CLI excludes build output automatically |
| Deploying without env vars | Run deployments env list first — if empty, set vars with deployments env set or --env |
| Missing VITE_* env vars | Add all required build-time variables with correct framework prefix |
| Checking status too early | Wait 30sec-1min before checking status |
| Missing vercel.json for SPA | Add rewrites config for client-side routing |