ideabrowser.com — find trending startup ideas with real demand
Try itnpx skills add https://github.com/insforge/agent-skills --skill insforge-cliCommand-line tool for managing InsForge Backend-as-a-Service projects.
First, ensure the CLI is installed. Run insforge whoami — if the command is not found, install it:
npm install -g @insforge/cli
Then verify authentication and project:
insforge whoami # verify authentication
insforge current # verify linked project
If not authenticated: insforge login
If no project linked: insforge create (new) or insforge link (existing)
| Flag | Description |
|---|---|
--json | Structured JSON output (for scripts and agents) |
-y, --yes | Skip confirmation prompts |
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | General error (e.g., HTTP 400+ from function invoke) |
| 2 | Not authenticated |
| 3 | Project not linked |
| 4 | Resource not found |
| 5 | Permission denied |
| Variable | Description |
|---|---|
INSFORGE_ACCESS_TOKEN | Override stored access token |
INSFORGE_PROJECT_ID | Override linked project ID |
INSFORGE_EMAIL | Email for non-interactive login |
INSFORGE_PASSWORD | Password for non-interactive login |
insforge login — OAuth (browser) or --email for password login. See references/login.mdinsforge logout — clear stored credentialsinsforge whoami — show current userinsforge create — create new project. See references/create.mdinsforge link — link directory to existing projectinsforge current — show current user + linked projectinsforge list — list all orgs and projectsinsforge metadata — show backend metadata (auth config, database tables, storage buckets, edge functions, AI models, realtime channels). Use --json for structured output. Run this first to discover what's configured before building features.insforge dbinsforge db query <sql> — execute raw SQL. See references/db-query.mdinsforge db tables / indexes / policies / triggers / functions — inspect schemainsforge db rpc <fn> [--data <json>] — call database function (GET if no data, POST if data)insforge db export — export schema/data. See references/db-export.mdinsforge db import <file> — import from SQL file. See references/db-import.mdinsforge functionsinsforge functions list — list deployed functionsinsforge functions code <slug> — view function sourceinsforge functions deploy <slug> — deploy or update. See references/functions-deploy.mdinsforge functions invoke <slug> [--data <json>] [--method GET|POST] — invoke functioninsforge storageinsforge storage buckets — list bucketsinsforge storage create-bucket <name> [--private] — create bucket (default: public)insforge storage delete-bucket <name> — delete bucket and all its objects (destructive)insforge storage list-objects <bucket> [--prefix] [--search] [--limit] [--sort] — list objectsinsforge storage upload <file> --bucket <name> [--key <objectKey>] — upload fileinsforge storage download <objectKey> --bucket <name> [--output <path>] — download fileinsforge deploymentsinsforge deployments deploy [dir] — deploy frontend app. See references/deployments-deploy.mdinsforge deployments list — list deploymentsinsforge deployments status <id> [--sync] — get deployment status (--sync fetches from Vercel)insforge deployments cancel <id> — cancel running deploymentinsforge secretsinsforge secrets list [--all] — list secrets (values hidden; --all includes deleted)insforge secrets get <key> — get decrypted valueinsforge secrets add <key> <value> [--reserved] [--expires <ISO date>] — create secretinsforge secrets update <key> [--value] [--active] [--reserved] [--expires] — update secretinsforge secrets delete <key> — soft delete (marks inactive; restore with --active true)insforge schedulesinsforge schedules list — list all scheduled tasks (shows ID, name, cron, URL, method, active, next run)insforge schedules get <id> — get schedule detailsinsforge schedules create --name --cron --url --method [--headers <json>] [--body <json>] — create a cron job (5-field cron format only)insforge schedules update <id> [--name] [--cron] [--url] [--method] [--headers] [--body] [--active] — update scheduleinsforge schedules delete <id> — delete schedule (with confirmation)insforge schedules logs <id> [--limit] [--offset] — view execution logsinsforge logsinsforge logs <source> [--limit <n>] — fetch backend container logs (default: 20 entries)| Source | Description |
|---|---|
insforge.logs | Main backend logs |
postgREST.logs | PostgREST API layer logs |
postgres.logs | PostgreSQL database logs |
function.logs | Edge function execution logs |
Source names are case-insensitive:
postgrest.logsworks the same aspostgREST.logs.
insforge docsinsforge docs — list all topicsinsforge docs instructions — setup guideinsforge docs <feature> <language> — feature docs (db / storage / functions / auth / ai / realtime × typescript / swift / kotlin / rest-api)For writing application code with the InsForge SDK, use the insforge (SDK) skill instead, and use the
insforge docs <feature> <language>to get specific SDK documentation.
Functions invoke URL: invoked at {oss_host}/functions/{slug} — NOT /api/functions/{slug}. Exits with code 1 on HTTP 400+.
Secrets delete is soft: marks the secret inactive, not destroyed. Restore with insforge secrets update KEY --active true. Use --all with secrets list to see inactive ones.
Storage delete-bucket is hard: deletes the bucket and every object inside it permanently.
db rpc uses GET or POST: no --data → GET; with --data → POST.
Schedules use 5-field cron only: minute hour day month day-of-week. 6-field (with seconds) is NOT supported. Headers can reference secrets with ${{secrets.KEY_NAME}}.
insforge db query "CREATE TABLE posts (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
title TEXT NOT NULL,
content TEXT,
author_id UUID REFERENCES auth.users(id),
created_at TIMESTAMPTZ DEFAULT now()
)"
insforge db query "ALTER TABLE posts ENABLE ROW LEVEL SECURITY"
insforge db query "CREATE POLICY \"public_read\" ON posts FOR SELECT USING (true)"
insforge db query "CREATE POLICY \"owner_write\" ON posts FOR INSERT WITH CHECK (auth.uid() = author_id)"
FK to users: always
auth.users(id). RLS current user:auth.uid().
# Default source path: insforge/functions/{slug}/index.ts
insforge functions deploy my-handler
insforge functions invoke my-handler --data '{"action": "test"}'
Always verify the local build succeeds before deploying. Local builds are faster to debug and don't waste server resources.
# 1. Build locally first
npm run build
# 2. Deploy
insforge deployments deploy ./dist --env '{"VITE_API_URL": "https://my-app.us-east.insforge.app"}'
Environment variable prefix 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 |
Pre-deploy checklist:
npm run build succeeds locallynode_modules, .git, .env, .insforge, or build output in the zipdist/, build/, .next/, etc.)insforge db export --output backup.sql
insforge db import backup.sql
# Create a schedule that calls a function every 5 minutes
insforge schedules create \
--name "Cleanup Expired" \
--cron "*/5 * * * *" \
--url "https://my-app.us-east.insforge.app/functions/cleanup" \
--method POST \
--headers '{"Authorization": "Bearer ${{secrets.API_TOKEN}}"}'
# Check execution history
insforge schedules logs <id>
InsForge uses 5-field cron expressions (pg_cron format). 6-field expressions with seconds are NOT supported.
┌─────────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌─────────── day of month (1-31)
│ │ │ ┌───────── month (1-12)
│ │ │ │ ┌─────── day of week (0-6, Sunday=0)
│ │ │ │ │
* * * * *
| Expression | Description |
|---|---|
* * * * * | Every minute |
*/5 * * * * | Every 5 minutes |
0 * * * * | Every hour (at minute 0) |
0 9 * * * | Daily at 9:00 AM |
0 9 * * 1 | Every Monday at 9:00 AM |
0 0 1 * * | First day of every month at midnight |
30 14 * * 1-5 | Weekdays at 2:30 PM |
Headers can reference secrets stored in InsForge using the syntax ${{secrets.KEY_NAME}}.
{
"headers": {
"Authorization": "Bearer ${{secrets.API_TOKEN}}",
"X-API-Key": "${{secrets.EXTERNAL_API_KEY}}"
}
}
Secrets are resolved at schedule creation/update time. If a referenced secret doesn't exist, the operation fails with a 404 error.
Use 5-field cron expressions only
*/5 * * * * for every 5 minutesStore sensitive values as secrets
${{secrets.KEY_NAME}} in headers for API keys and tokensTarget InsForge functions for serverless tasks
https://your-project.region.insforge.app/functions/{slug}status: "active"Monitor execution logs
| Mistake | Solution |
|---|---|
| Using 6-field cron (with seconds) | Use 5-field format only: minute hour day month day-of-week |
| Referencing non-existent secret | Create the secret first via secrets API |
| Targeting non-existent function | Verify function exists and is active before scheduling |
| Schedule not running | Check isActive is true and cron expression is valid |
1. Create secrets if needed -> `insforge secrets add KEY VALUE`
2. Create/verify target function -> `insforge functions list`
3. Create schedule -> `insforge schedules create`
4. Verify schedule is active -> `insforge schedules get <id>`
5. Monitor execution logs -> `insforge schedules logs <id>`
insforge logs function.logs # function execution issues
insforge logs postgres.logs # database query problems
insforge logs insforge.logs # API / auth errors
insforge logs postgrest.logs --limit 50
Start with function.logs for function issues
Use postgres.logs for query problems
Check insforge.logs for API errors
| Problem | Check |
|---|---|
| Function not working | function.logs |
| Database query failing | postgres.logs, postgREST.logs |
| Auth issues | insforge.logs |
| API returning 500 errors | insforge.logs, postgREST.logs |
INSFORGE_EMAIL=$EMAIL INSFORGE_PASSWORD=$PASSWORD insforge login --email -y
insforge link --project-id $PROJECT_ID --org-id $ORG_ID -y
insforge db query "SELECT count(*) FROM users" --json
After create or link, .insforge/project.json is created:
{
"project_id": "...",
"appkey": "...",
"region": "us-east",
"api_key": "ik_...",
"oss_host": "https://{appkey}.{region}.insforge.app"
}
oss_host is the base URL for all SDK and API operations. api_key is the admin key for backend API calls.
Never commit this file to version control or share it publicly. Do not edit this file manually. Use
insforge linkto switch projects.