Command line tool for the InsForge platform. Manage your databases, edge functions, storage, deployments, secrets, and more — directly from the terminal.
Designed to be both human-friendly (interactive prompts, formatted tables) and agent-friendly (structured JSON output, non-interactive mode, semantic exit codes).
Requires Node.js >= 18. We recommend running via npx so you always get the latest version — no global install needed.
# Login via browser (OAuth)
npx @insforge/cli login
# Or login with email/password
npx @insforge/cli login --email
# Check current user
npx @insforge/cli whoami
# List all organizations and projects
npx @insforge/cli list
# Link current directory to a project
npx @insforge/cli link
# Query the database
npx @insforge/cli db tables
npx @insforge/cli db query "SELECT * FROM users LIMIT 10"If you run any command without being logged in, the CLI will automatically open your browser and start the login flow — no need to run npx @insforge/cli login first.
npx @insforge/cli loginOpens your browser to the InsForge authorization page using OAuth 2.0 Authorization Code + PKCE. A local callback server receives the authorization code and exchanges it for tokens. Credentials are stored in ~/.insforge/credentials.json.
npx @insforge/cli login --emailPrompts for email and password interactively, or reads from environment variables in non-interactive mode:
INSFORGE_EMAIL=user@example.com INSFORGE_PASSWORD=secret npx @insforge/cli login --email --jsonnpx @insforge/cli logoutAll commands support the following flags:
| Flag | Description |
|---|---|
--json |
Output in JSON format (useful for scripts and AI agents) |
--project-id <id> |
Override the linked project ID |
--api-url <url> |
Override the Platform API URL |
-y, --yes |
Skip confirmation prompts |
Show the current authenticated user.
npx @insforge/cli whoami
npx @insforge/cli whoami --jsonList all organizations and their projects in a grouped table.
npx @insforge/cli list
npx @insforge/cli list --jsonCreate a new InsForge project interactively.
npx @insforge/cli create
npx @insforge/cli create --name "my-app" --org-id <org-id> --region us-eastLink the current directory to an InsForge project. Creates .insforge/project.json with the project ID, API key, and OSS host URL.
# Interactive: select from a list
npx @insforge/cli link
# Non-interactive (platform login)
npx @insforge/cli link --project-id <id> --org-id <org-id>
# OSS / self-hosted: link via host URL + API key (no platform login required)
npx @insforge/cli link \
--api-base-url https://<app-key>.<region>.insforge.app \
--api-key <your-project-api-key>For OSS or self-hosted deployments, you can link directly using the host URL and API key — the CLI skips the platform OAuth flow and writes the credentials straight into .insforge/project.json. The host URL format is https://{app_key}.{region}.insforge.app (e.g. https://uhzx8md3.us-east.insforge.app).
Show current CLI context (authenticated user, linked project).
npx @insforge/cli current
npx @insforge/cli current --jsonShow backend metadata including auth configuration, database tables, storage buckets, edge functions, AI models, and realtime channels.
npx @insforge/cli metadata
npx @insforge/cli metadata --jsonFetch backend container logs.
npx @insforge/cli logs <source> [options]Sources: insforge.logs, postgREST.logs, postgres.logs, function.logs
Options:
--limit <n>: Number of log entries to return (default: 20)
Examples:
npx @insforge/cli logs insforge.logs
npx @insforge/cli logs postgres.logs --limit 50
npx @insforge/cli logs function.logs --jsonBrowse InsForge SDK documentation.
npx @insforge/cli docs [feature] [language]Features: db, storage, functions, auth, ai, realtime, instructions
Languages: typescript, swift, kotlin, rest-api
Examples:
# List all available docs
npx @insforge/cli docs
# Specific feature/language docs
npx @insforge/cli docs instructions # Show backend setup instructions
npx @insforge/cli docs db typescript # Show TypeScript database SDK docs
npx @insforge/cli docs auth swift # Show Swift auth SDK docs
npx @insforge/cli docs storage rest-api # Show REST API storage docsExecute a raw SQL query.
npx @insforge/cli db query "SELECT * FROM users LIMIT 10"
npx @insforge/cli db query "SELECT count(*) FROM orders" --json
npx @insforge/cli db query "SELECT * FROM pg_tables" --unrestrictedList all database tables.
npx @insforge/cli db tables
npx @insforge/cli db tables --jsonList all database functions.
npx @insforge/cli db functionsList all database indexes.
npx @insforge/cli db indexesList all RLS policies.
npx @insforge/cli db policiesList all database triggers.
npx @insforge/cli db triggersCall a database function via RPC.
npx @insforge/cli db rpc my_function --data '{"param1": "value"}'Export database schema and/or data.
npx @insforge/cli db export --output schema.sql
npx @insforge/cli db export --data-only --output data.sqlImport database from a local SQL file.
npx @insforge/cli db import schema.sqlList all edge functions.
npx @insforge/cli functions list
npx @insforge/cli functions list --jsonView the source code of an edge function.
npx @insforge/cli functions code my-function
npx @insforge/cli functions code my-function --jsonDeploy an edge function. Creates the function if it doesn't exist, or updates it.
npx @insforge/cli functions deploy my-function --file ./handler.ts
npx @insforge/cli functions deploy my-function --file ./handler.ts --name "My Function" --description "Does something"Invoke an edge function.
npx @insforge/cli functions invoke my-function --data '{"key": "value"}'
npx @insforge/cli functions invoke my-function --method GET
npx @insforge/cli functions invoke my-function --data '{"key": "value"}' --jsonDelete an edge function.
npx @insforge/cli functions delete my-function
npx @insforge/cli functions delete my-function -y # skip confirmationList all storage buckets.
npx @insforge/cli storage buckets
npx @insforge/cli storage buckets --jsonCreate a new storage bucket.
npx @insforge/cli storage create-bucket images
npx @insforge/cli storage create-bucket private-docs --privateDelete a storage bucket and all its objects.
npx @insforge/cli storage delete-bucket images
npx @insforge/cli storage delete-bucket images -y # skip confirmationList objects in a storage bucket.
npx @insforge/cli storage list-objects images
npx @insforge/cli storage list-objects images --prefix "avatars/" --limit 50Upload a file to a storage bucket.
npx @insforge/cli storage upload ./photo.png --bucket images
npx @insforge/cli storage upload ./photo.png --bucket images --key "avatars/user-123.png"Download a file from a storage bucket.
npx @insforge/cli storage download avatars/user-123.png --bucket images
npx @insforge/cli storage download avatars/user-123.png --bucket images --output ./downloaded.pngDeploy a frontend project. Zips the source, uploads it, and polls for build completion (up to 2 minutes).
npx @insforge/cli deployments deploy
npx @insforge/cli deployments deploy ./my-app
npx @insforge/cli deployments deploy --env '{"API_URL": "https://api.example.com"}'List all deployments.
npx @insforge/cli deployments list
npx @insforge/cli deployments list --limit 5 --jsonGet deployment details and status.
npx @insforge/cli deployments status abc-123
npx @insforge/cli deployments status abc-123 --sync # sync status from Vercel firstCancel a running deployment.
npx @insforge/cli deployments cancel abc-123List all secrets (metadata only, values are hidden). Inactive (deleted) secrets are hidden by default.
npx @insforge/cli secrets list
npx @insforge/cli secrets list --all # include inactive secrets
npx @insforge/cli secrets list --jsonGet the decrypted value of a secret.
npx @insforge/cli secrets get STRIPE_API_KEY
npx @insforge/cli secrets get STRIPE_API_KEY --jsonCreate a new secret.
npx @insforge/cli secrets add STRIPE_API_KEY sk_live_xxx
npx @insforge/cli secrets add STRIPE_API_KEY sk_live_xxx --reserved
npx @insforge/cli secrets add TEMP_TOKEN abc123 --expires "2025-12-31T00:00:00Z"Update an existing secret.
npx @insforge/cli secrets update STRIPE_API_KEY --value sk_live_new_xxx
npx @insforge/cli secrets update STRIPE_API_KEY --active false
npx @insforge/cli secrets update STRIPE_API_KEY --reserved true
npx @insforge/cli secrets update STRIPE_API_KEY --expires null # remove expirationDelete a secret (soft delete — marks as inactive).
npx @insforge/cli secrets delete STRIPE_API_KEY
npx @insforge/cli secrets delete STRIPE_API_KEY -y # skip confirmationManage scheduled tasks (cron jobs).
List all schedules in the current project.
npx @insforge/cli schedules list
npx @insforge/cli schedules list --jsonCreate a new scheduled task.
npx @insforge/cli schedules create --name "daily-cleanup" --cron "0 0 * * *" --url "https://api.example.com/cleanup" --method POST
npx @insforge/cli schedules create --name "hourly-sync" --cron "0 * * * *" --url "https://api.example.com/sync" --method GET --headers '{"Authorization": "Bearer xxx"}'Get details of a specific schedule.
npx @insforge/cli schedules get <id>
npx @insforge/cli schedules get 123 --jsonUpdate an existing schedule.
npx @insforge/cli schedules update <id> --name "weekly-cleanup" --cron "0 0 * * 0"
npx @insforge/cli schedules update 123 --active falseDelete a schedule.
npx @insforge/cli schedules delete <id>
npx @insforge/cli schedules delete 123 -yFetch execution logs for a specific schedule.
npx @insforge/cli schedules logs <id>
npx @insforge/cli schedules logs 123 --limit 100Running npx @insforge/cli link creates a .insforge/ directory in your project:
.insforge/
└── project.json # project_id, org_id, appkey, region, api_key, oss_host
Add .insforge/ to your .gitignore — it contains your project API key.
Global configuration is stored in ~/.insforge/:
~/.insforge/
├── credentials.json # access_token, refresh_token, user profile
└── config.json # default_org_id, platform_api_url
When you run npx @insforge/cli create or npx @insforge/cli link, the CLI automatically installs a set of InsForge agent skills into your project for all supported AI coding agents (Claude Code, Cursor, Windsurf, Cline, Roo, Gemini CLI, GitHub Copilot, Qwen, Qoder, Trae, Kilo, Codex, Augment, Antigravity). These skills teach your coding agent how to work with InsForge — database queries, auth, storage, edge functions, realtime, etc. — so it can generate correct code for your backend without you copy-pasting docs.
It also installs find-skills so agents can discover available skills on demand.
Skill files are written to per-agent directories (e.g. .claude/, .cursor/, .windsurf/) and are automatically added to your .gitignore. You can re-run npx @insforge/cli link at any time to reinstall or update skills.
The CLI reports anonymous usage events to PostHog so we can understand which features are being used and prioritize improvements.
Analytics are enabled by default in the published npm package. If you build the CLI from source without setting POSTHOG_API_KEY at build time, analytics become a no-op automatically.
| Variable | Description |
|---|---|
INSFORGE_ACCESS_TOKEN |
Override the stored access token |
INSFORGE_PROJECT_ID |
Override the linked project ID |
INSFORGE_API_URL |
Override the Platform API URL |
INSFORGE_EMAIL |
Email for non-interactive login |
INSFORGE_PASSWORD |
Password for non-interactive login |
All commands support --json for structured output and -y to skip confirmation prompts:
# Login in CI
INSFORGE_EMAIL=$EMAIL INSFORGE_PASSWORD=$PASSWORD npx @insforge/cli login --email --json
# Link a project
npx @insforge/cli link --project-id $PROJECT_ID --org-id $ORG_ID -y
# Query and pipe results
npx @insforge/cli db query "SELECT * FROM users" --json | jq '.rows[].email'
# Deploy frontend
npx @insforge/cli deployments deploy ./dist --json
# Upload a build artifact
npx @insforge/cli storage upload ./dist/bundle.js --bucket assets --key "v1.2.0/bundle.js" --json| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | General error |
| 2 | Authentication failure |
| 3 | Project not linked (run npx @insforge/cli link first) |
| 4 | Resource not found |
| 5 | Permission denied |
git clone <repo-url>
cd insforge-CLI
npm install
npm run build
npm link # makes `insforge` available globally
npm run dev # watch mode for developmentnpm run test:unitRun locally:
INTEGRATION_TEST_ENABLED=true \
INTEGRATION_LOG_SOURCE=insforge.logs \
npm run test:integration:realPrerequisites:
- Logged in (
npx @insforge/cli login) so~/.insforge/credentials.jsonexists - Linked project in this repo (
npx @insforge/cli link) so.insforge/project.jsonexists
Optional environment variables:
INSFORGE_API_URL: Platform API URL override (defaults tohttps://api.insforge.dev)INTEGRATION_LOG_SOURCE: Log source forlogstest (defaultinsforge.logs)
Current real-project checks:
whoami --jsonmetadata --jsonlogs <source> --jsondocs instructions --json
Bump the version, push the tag, and create a GitHub Release — the CI will publish to npm automatically.
# Bump version (creates commit + tag)
npm version patch # 0.1.3 → 0.1.4
# or
npm version minor # 0.1.3 → 0.2.0
# Push commit and tag
git push && git push --tagsThen go to GitHub → Releases → Draft a new release, select the tag (e.g. v0.1.4), and publish. The publish workflow will run npm publish automatically.
Apache-2.0