Skip to content
ONIWC
iwc 0.1.0

CLI reference

Every iwc command, with its arguments and flags as defined in the CLI source (iwc/cmd/iwc). Each command takes the project directory as an optional first argument (default .), and flags may come before or after it. Exit status is 0 on success and 1 on any error, so every command works in scripts and CI. For the background behind each command — ports, build output, backups, plugins — read the CLI guide.

iwc create

Scaffold a new project in ./.

Syntax

Syntax
iwc create <name> [--template basic|store]
iwc create <name> --web --android --ios [--admin] [--yes]

Arguments

<name>Folder to create. It must not exist.

Flags

FlagTypeDefaultDescription
--templatestringbasicbasic (a welcome screen, about screen, layout, footer, 404 and tests) or store (the complete e-commerce example).
--webbool—Include the web target.
--androidbool—Include a native Android app (Kotlin + Jetpack Compose).
--iosbool—Include a native iOS app (Swift + SwiftUI).
--adminbool—Include a sign-in protected /admin area (web).
--yesbool—Don't ask which targets; use the flags (web only when none are given).

Examples

Terminal
iwc create my-app   # asks which targets: Web, Admin, Android, iOS
iwc create my-app --yes   # web only, no questions
iwc create my-app --web --android --ios   # all three targets
iwc create my-store --template store   # the full e-commerce example

Expected output

Output
✓ Created my-app from the basic template — targets: web

  cd my-app
  npm install                    # pins IWC 0.2.0 for this project (optional)
  npm run dev                    # web; the same as iwc dev

Common errors

MessageWhat to do
my-app already existscreate refuses to overwrite: choose another name or remove the folder.
unknown template "x" (choose basic or store)Use one of the two templates.

Also writes package.json (npm scripts dev, check, test, validate, build, start, which call the global iwc; when IWC itself was installed with npm, also @iwc-cli/iwc as a dev dependency pinned to the creating version), .gitignore (.iwc/, dist/, build/, node_modules/, .env), .vscode/settings.json and .vscode/iwc-schemas/ for editor autocompletion.

More in the guide →

iwc dev

Run the development server with live reload, or build and run a native app.

Syntax

Syntax
iwc dev [dir] [--port N] [--host addr] [--open]
iwc dev [dir] --platform android|ios [--app name]

Arguments

[dir]Project directory. Default: the current directory.

Flags

FlagTypeDefaultDescription
--portint3000Port. When the default is taken the next free port is used; a port you pass is never silently changed.
--hoststring127.0.0.1Interface. 0.0.0.0 makes the server reachable from a phone on your network.
--openbool—Open the browser at the URL actually in use.
--platformstringwebweb, android or ios. Native: build, install and launch on an emulator/simulator; rebuild on save.
--android / --iosbool—Same as --platform android / --platform ios. The app is built for the port this project's running iwc dev really uses (it moves past 3000 when that port is taken).
--appstring—Multi-app projects: which app (from app.iwc apps) to run natively.

Examples

Terminal
iwc dev --open
iwc dev --port 3400
iwc dev --host 0.0.0.0   # test on your phone
iwc dev --platform android

Expected output

Output
IWC Development Server

✓ Project validated
✓ Runtime initialized
✓ Port 3000 available
✓ Application compiled (9 files in 10ms · 3 screens · 0 apis · 0 schemas)
✓ Hot reload enabled

  Local:    http://localhost:3000
  Docs:     http://localhost:3000/_iwc/docs/
  Project:  /Users/you/my-app
  Logs:     .iwc/logs/dev.log  (iwc logs -f)

Watching for file changes... (Ctrl+C stops)

Common errors

MessageWhat to do
Port 3400 is already occupied (by …)The message names the owner and suggests a free port: iwc dev --port 3401 --open.
An error overlay on every pageA file has an error. The terminal lists it with file:line:col; save a fix and the overlay disappears.

Development data is SQLite in .iwc/dev.db, migrated on every compile and seeded when tables are empty. iwc doctor warns when DATABASE_URL would redirect it.

More in the guide →

iwc check

Validate every file against its schema and every cross-file reference.

Syntax

Syntax
iwc check [dir] [--json] [--app name]

Arguments

[dir]Project directory. Default: the current directory.

Flags

FlagTypeDefaultDescription
--jsonbool—Machine-readable output: {"ok", "files", "diagnostics": [{file, line, col, severity, message}]}.
--appstring—Multi-app projects: also check the native build of this app (from app.iwc apps).

Examples

Terminal
iwc check
iwc check --json | jq .diagnostics

Expected output

Output
✓ targets: web
✓ 9 files · 3 screens · 1 layouts · 1 components · 0 apis · 0 schemas · 0 actions

Common errors

MessageWhat to do
api/x.api.iwc:1:1: error: the top level is missing required key "path"Every error carries file:line:col. Add the key, or fix the name the message suggests.
unknown key "route" … (data for another tool goes under an x- key)The key does not exist for this file type. Tools that need extra data use x- keys, which IWC ignores.

Warnings (a missing alt, a link to a route no screen has) do not fail the command. With native targets, check also compiles for each one and reports anything they cannot render.

iwc validate

The pre-ship check: files and references, every test, a production build and a security audit.

Syntax

Syntax
iwc validate [dir]

Arguments

[dir]Project directory. Default: the current directory.

Examples

Terminal
iwc validate   # use before every deploy and in CI

Expected output

Output
1/4 files and references
✓ 9 files · 3 screens · 0 apis · 0 schemas

2/4 tests
  ✓ smoke › home renders the welcome page
  …
✓ 6 test(s) passed

3/4 production build
✓ my-app 0.1.0 builds (3 pages, 0 apis)

4/4 security
✓ no findings

✓ valid in 47ms

Stops at the first failing stage and exits 1.

iwc test

Run the project's .test.iwc files, or the native smoke test.

Syntax

Syntax
iwc test [dir]
iwc test [dir] --platform android|ios [--app name]

Arguments

[dir]Project directory. Default: the current directory.

Flags

FlagTypeDefaultDescription
--platformstringwebweb runs the .test.iwc files; android/ios run the native smoke test on an emulator/simulator.
--android / --iosbool—Shorthands for --platform.
--appstring—Multi-app projects: the app to test natively.

Examples

Terminal
iwc test
IWC_TEST_DATABASE_URL=postgres://localhost/app_test iwc test   # against PostgreSQL (a throwaway schema per run)

Expected output

Output
  ✓ smoke › home renders the welcome page
  ✓ smoke › the about screen renders
  ✓ smoke › unknown routes render the 404 screen

6 passed, 0 failed

Each file gets a fresh in-memory database with seed rows. Cases in one file run in order and can pass values to later cases with save and {{name}}.

More in the guide →

iwc logs

Show the dev server's log, or a deploy target's (server or cPanel hosting).

Syntax

Syntax
iwc logs [-f] [--lines N] [--json]
iwc logs <target> [--lines N] [-f] [--system]

Arguments

[target]A deploy target from package.iwc. Without one, the local .iwc/logs/dev.log.

Flags

FlagTypeDefaultDescription
-f, --followbool—Keep printing new lines (the local log, and targets on your own server).
--systembool—Own-server targets: the systemd service and web-server journal instead of the app log.
--linesint200Number of lines.
--jsonbool—Raw JSON records, for grep/jq (local log only).
--dirstring.Project directory.

Examples

Terminal
iwc logs -f
iwc logs --json | jq "select(.status >= 500)"
iwc logs prod --lines 500   # the live app's log (cPanel: data/logs/app.log in the site's folder)
iwc logs prod --system -f   # own server: service and proxy journal, following

Expected output

Output
17:04:26 page GET    /contact                                 200 0ms
17:04:26 api  POST   /api/messages                            422 0ms
      ↳ validation_failed: Some fields are invalid (body is required)

The dev log rotates at 5 MB.

iwc doctor

Check the installation, the project and its native toolchains.

Syntax

Syntax
iwc doctor [dir] [--port N] [--platform android|ios]

Arguments

[dir]Project directory. Default: the current directory.

Flags

FlagTypeDefaultDescription
--portint3000The port iwc dev will use.
--platformstring—Also check this native toolchain, whether or not the project targets it.

Examples

Terminal
iwc doctor
iwc doctor --platform ios

Expected output

Output
IWC installation
  ✓ version                iwc 0.2.0 (darwin/arm64, source b3c0de8de939)
  ✓ binary                 /opt/homebrew/Cellar/iwc/0.2.0/bin/iwc
  ✓ installed              with Homebrew (hussian007/iwc/iwc)
  ✓ upgrade                brew upgrade iwc
  ✓ machine                Apple Silicon (arm64)
  ✓ PATH                   `iwc` resolves to this binary
  ✓ SQLite                 built in (no system library needed)
  ✓ port                   3000 is free for `iwc dev`
  ✓ browser                `iwc dev --open` can open your browser

Project /Users/you/my-app
  ✓ files                  9 file(s), no problems
  ✓ contents               3 screens · 0 apis · 0 schemas · 1 tests
  ✓ database               SQLite in .iwc/dev.db
  ✓ data folder            .iwc/ is writable
  ✓ editor                 JSON Schemas in .vscode/iwc-schemas
  ✓ targets                web

Common errors

MessageWhat to do
! PATH `iwc` resolves to …, not this binaryTwo copies are installed. Remove the older one (brew uninstall iwc, scoop uninstall iwc, or delete ~/.iwc/bin/iwc for an install-script copy) or fix PATH so the one you expect comes first.
! machine … this binary is amd64 (running under Rosetta)An Intel build is installed on an Apple silicon Mac, usually from an Intel Homebrew in /usr/local. Install with the Apple silicon Homebrew (/opt/homebrew) or the install script, which picks arm64 even under Rosetta.
! editor no editor schemasRun iwc schema --out .vscode/iwc-schemas.

iwc build

Produce a production bundle, a shared-hosting zip, or native app builds.

Syntax

Syntax
iwc build [dir] [--out dist] [--report]
iwc build [dir] --zip [--folder name] [--arch amd64|arm64]
iwc build [dir] --web|--android|--ios|--all [--release] [--app name]

Arguments

[dir]Project directory. Default: the current directory.

Flags

FlagTypeDefaultDescription
--outstring<dir>/distOutput directory.
--reportbool—Print what each route sends (JavaScript, CSS, HTML) next to its budget.
--zipbool—Also write .zip to upload to shared hosting (cPanel) and extract.
--folderstringthe app's nameWith --zip: the folder inside the zip, which becomes the URL path.
--archstringamd64With --zip: the host's CPU (amd64 or arm64).
--webbool—Build the web target (same as plain iwc build).
--androidbool—Debug APK in build/android/; with --release: release APK + AAB.
--iosbool—Simulator .app in build/ios/; with --release: device archive.
--allbool—Every target in app.iwc.
--releasebool—Native targets: release builds (signed when signing settings are present).
--appstring—Multi-app projects: the app to build natively.

Examples

Terminal
iwc build
iwc build --report
iwc build --zip --folder shop
iwc build --android --release

Expected output

Output
✓ built my-app 0.1.0 (6bd838aec8c87997) → dist in 14ms

dist/ holds manifest.json (the compiled project), assets/, openapi.json and openapi.yaml, migrations/sqlite.sql and migrations/postgres.sql for review, release.json and report.json. Size budgets are checked on every build.

More in the guide →

iwc start

Serve a production bundle.

Syntax

Syntax
iwc start [dist] [--port 8080] [--host 0.0.0.0] [--data dir] [--base /path] [--secure=false]

Arguments

[dist]The bundle written by iwc build. Default: dist.

Flags

FlagTypeDefaultDescription
--portint8080Port.
--hoststring0.0.0.0Interface.
--datastring<dist>/../.iwc-dataFolder for the SQLite database and uploads.
--securebooltrueSecure cookies and HSTS. Disable only for plain-HTTP testing (or set IWC_INSECURE=1).
--basestring$IWC_BASEServe under a path prefix such as /shop, behind a proxy forwarding /shop/*.
--trust-proxystring$IWC_TRUST_PROXYBehind a reverse proxy: loopback, or its addresses/ranges, comma-separated. Visitors' addresses then come from X-Forwarded-For, so rate limits and logs see each visitor instead of the proxy.

Examples

Terminal
iwc start dist --port 8080
iwc start dist --host 127.0.0.1 --trust-proxy loopback   # behind Caddy or nginx on the same machine
DATABASE_URL=postgres://user:pass@db/shop iwc start dist
iwc start dist --base /shop

Production mode: no seed rows, simulated services refused, Secure cookies and HSTS. Health check: GET /_iwc/health. Put a TLS-terminating proxy (Caddy, nginx) in front.

iwc run-jobs

Run due background jobs once in an uploaded shared-hosting site (for a cron job).

Syntax

Syntax
iwc run-jobs [folder]

Arguments

[folder]The extracted site folder (holds app/manifest.json).

Examples

Terminal
/home/<user>/public_html/<folder>/iwc.cgi run-jobs   # as a cPanel cron job

Common errors

MessageWhat to do
<folder> is not an uploaded IWC site (no app/manifest.json)Point it at the folder the zip extracted.

iwc migrate

Plan and apply schema changes to the configured database.

Syntax

Syntax
iwc migrate [dir] [--dry-run] [--reencrypt]

Arguments

[dir]Project directory. Default: the current directory.

Flags

FlagTypeDefaultDescription
--dry-runbool—Print the SQL plan without applying it.
--reencryptbool—After migrating, re-encrypt encrypted fields under the current IWC_ENCRYPTION_KEY (key rotation).

Examples

Terminal
iwc migrate --dry-run
DATABASE_URL=postgres://… iwc migrate

Expected output

Output
CREATE TABLE "notes" (
  "id" TEXT PRIMARY KEY,
  "title" TEXT NOT NULL,
  "createdAt" TEXT NOT NULL,
  "updatedAt" TEXT NOT NULL
);

Common errors

MessageWhat to do
changing a column type / adding a required column without a default to a table with rowsRefused with an explanation. Add a default, make the field optional, or migrate the data deliberately.
the database holds tables IWC did not createIWC refuses to adopt a foreign database. Check the URL; set IWC_ADOPT_DATABASE=1 only to adopt it on purpose.

Automatic: new tables, columns and indexes. Removed fields stay in the database so data is kept.

More in the guide →

iwc backup

Archive the app's data and uploaded files.

Syntax

Syntax
iwc backup [dir|dist] [--out file] [--keep N] [--data dir]

Arguments

[dir|dist]A project (data in .iwc/) or a production bundle.

Flags

FlagTypeDefaultDescription
--outstringbackups/<app>-<time>.iwcbak.tar.gzArchive to write.
--keepint0After writing, delete all but the newest N archives in the same folder (0 keeps all).
--datastring<dist>/../.iwc-dataData folder of a production bundle.

Examples

Terminal
iwc backup dist --out /var/backups/shop-$(date +%F).iwcbak.tar.gz --keep 14

One .tar.gz: every table as JSON lines, the audit trail, uploaded files. On PostgreSQL it reads one consistent snapshot while the app runs. Encrypted fields stay ciphertext — the backup is as sensitive as the database.

More in the guide →

iwc restore

Load a backup: migrate, then write every row in one transaction.

Syntax

Syntax
iwc restore <archive> [dir|dist] [--replace] [--yes] [--data dir]

Arguments

<archive>A .iwcbak.tar.gz written by iwc backup.

Flags

FlagTypeDefaultDescription
--replacebool—Delete the data currently in the database first (otherwise it must be empty).
--yesbool—Don't ask for confirmation.
--datastring—Data folder of a production bundle.

Examples

Terminal
iwc restore shop-2026-11-07.iwcbak.tar.gz dist
iwc restore shop.iwcbak.tar.gz dist --replace

A SQLite backup restores into PostgreSQL and the other way round. If any row fails, nothing changes. Sessions are not restored: everyone signs in again.

iwc deploy

Build and deploy to a target. The first run asks where — cPanel hosting or your own server — explains where to find each detail, and sets it up; later runs just deploy.

Syntax

Syntax
iwc deploy <target> [--dir .]
iwc deploy <target> --host <address> --user <name> [--port 22] [--key file] [--fingerprint SHA256:…] [--domain d] [--yes]

Arguments

<target>Any name: prod, staging, client-a. Each target is set up and saved separately.

Flags

FlagTypeDefaultDescription
--dirstring.Project directory.
--hoststring—Without the wizard: the server (user@host:port) or the cPanel address.
--userstring—The SSH user, or the cPanel username.
--portint22SSH port (own server).
--keystring—Own server: the private key file to log in with.
--fingerprintstring—Own server: the server's host-key fingerprint (SHA256:…), to trust it without a prompt — for CI. An unknown server is otherwise shown for you to confirm; a changed key stops the deploy.
--domainstring—When the wizard creates the target: the site's domain (own server), or which of the cPanel account's domains to use (example.com or example.com/folder).
--yesbool—Accept defaults without asking. Never skips the host-key check.
--setupbool—Own server: run the server setup again even if nothing changed.

Examples

Terminal
iwc deploy prod   # first time: the setup wizard; afterwards: build, upload, check the live site
iwc deploy staging   # another target, set up separately
IWC_CPANEL_TOKEN=… iwc deploy prod --host example.com --user acct   # cPanel from CI (target already in package.iwc)
iwc deploy prod --host deploy@203.0.113.10 --key ci_key --fingerprint SHA256:…   # own server from CI

Expected output

Output
→ connecting to cPanel at https://example.com:2083 as acct
✓ connected to cPanel (home /home/acct)
→ building shop
→ deploying 1.2.0 3f9c2a7e1b04c5d6 to public_html
  • uploading the package (9427 KB)
  • extracting r20261109141516-3f9c2a7e1b04c5d6 into public_html
✓ release 1.2.0 3f9c2a7e1b04c5d6 is in place (database and settings.env kept)
✓ https://example.com answers 200 and the app's health check is ok

Common errors

MessageWhat to do
cPanel refused the login (HTTP 401)Check the username; create a new API token in cPanel → Security → Manage API Tokens. The next run asks again.
THE SERVER'S HOST KEY HAS CHANGEDThe server was reinstalled, or the connection is intercepted. Confirm the new fingerprint on the provider's console, then remove the old key as the message shows.
setting the server up needs root or passwordless sudoOnly the first setup needs it (it installs a service and the web server). Deploys afterwards don't.

Logins never go into the project: the address and user are kept in ~/.iwc/deploy, a cPanel token encrypted in IWC's vault, SSH keys in their own 0600 files. The database and settings.env survive every deploy.

More in the guide →

iwc server

Manage a deploy target's server or hosting: status, setup, restart, the app's secrets, saved logins.

Syntax

Syntax
iwc server status <target>
iwc server setup <target>
iwc server restart <target>
iwc server env <target> [list | set KEY=value… | set KEY | unset KEY…]
iwc server forget <target>
iwc server list

Arguments

<target>A deploy target from package.iwc.

Flags

FlagTypeDefaultDescription
--dirstring.Project directory.
--hoststring—Without the wizard: the server (user@host:port) or the cPanel address.
--userstring—The SSH user, or the cPanel username.
--portint22SSH port (own server).
--keystring—Own server: the private key file to log in with.
--fingerprintstring—Own server: the server's host-key fingerprint (SHA256:…), to trust it without a prompt — for CI. An unknown server is otherwise shown for you to confirm; a changed key stops the deploy.
--domainstring—When the wizard creates the target: the site's domain (own server), or which of the cPanel account's domains to use (example.com or example.com/folder).
--yesbool—Accept defaults without asking. Never skips the host-key check.

Examples

Terminal
iwc server status prod   # live release, stored releases, service and proxy state, the public URL checked from here
iwc server env prod set STRIPE_KEY   # own server: asks for the value without echoing it, then restarts the app
iwc server env prod list   # names only, never values
iwc server setup prod   # own server: install or update the service, web server and HTTPS again
iwc server forget prod   # remove the saved login from this computer

On cPanel targets, status and forget apply; setup, restart and env are for servers IWC set up over SSH (on cPanel, settings.env is edited in File Manager).

More in the guide →

iwc pull

Download the live release's source and dist. Secrets are never included.

Syntax

Syntax
iwc pull <target> [dir] [--force]

Flags

FlagTypeDefaultDescription
--dirstring.Project directory (holds package.iwc).
--forcebool—Write into a non-empty directory.

Examples

Terminal
iwc pull prod copy/

iwc rollback

Put the previous (or a given) release back — on your own server or on cPanel hosting. The database is kept.

Syntax

Syntax
iwc rollback <target> [release]

Arguments

[release]A release id, or the start of its build hash, from iwc server status. Default: the release before the live one.

Flags

FlagTypeDefaultDescription
--dirstring.Project directory.

Examples

Terminal
iwc rollback prod
iwc rollback prod 3f9c2a7e   # a given release — also forward again

Servers keep the last 10 releases, cPanel hosting the last 5 (in ~/.iwc-releases, outside every web folder). Only the code changes: fields a newer release added stay in the database.

iwc host

Run a release agent and the application yourself. iwc deploy sets one up for you on your own server; use this to run it under your own supervision.

Syntax

Syntax
iwc host [--dir iwc-host] [--port 8080] [--host 0.0.0.0] [--secure] [--trust-proxy loopback]

Flags

FlagTypeDefaultDescription
--dirstringiwc-hostDirectory for releases, data and logs.
--portint$IWC_HOST_PORT or 8080Port.
--trust-proxystring$IWC_TRUST_PROXYThe reverse proxy in front (loopback for one on the same machine), so visitors' addresses come from X-Forwarded-For.
--hoststring0.0.0.0Interface.
--securebooltrueSecure cookies and HSTS.

Examples

Terminal
IWC_DEPLOY_TOKEN=<32+ random characters> iwc host --dir /srv/iwc-host --port 8080

Common errors

MessageWhat to do
the deploy token (IWC_DEPLOY_TOKEN) must be at least 32 charactersSet a random token of at least 32 characters; the same value goes in the environment variable named by tokenEnv on your machine.

iwc make

Write the API reference: OpenAPI 3.1 (JSON + YAML) and an interactive explorer.

Syntax

Syntax
iwc make --api docs|openapi [dir] [--out api-docs] [--server url] [--format json|yaml|both] [--strict] [--app name]

Arguments

[dir]Project directory. Default: the current directory.

Flags

FlagTypeDefaultDescription
--apistring—docs: the document plus a self-contained index.html explorer; openapi: the document only.
--outstring<dir>/api-docsOutput directory. Multi-app projects get one folder per app.
--serverstringapiDocs.servers → seo.siteUrl → http://localhost:3000The server the document lists and the explorer calls.
--formatstringbothjson, yaml or both.
--strictbool—Fail when a definition's examples.request doesn't pass that API's own validation.
--appstring—Multi-app projects: only this app.

Examples

Terminal
iwc make --api docs
iwc make --api docs --server https://api.example.com --out public/reference
iwc make --api openapi --format yaml

Nothing runs and no request is sent. While iwc dev runs, the live explorer is at /_iwc/api-docs. The explorer's Try it out needs its origin in .security.iwc cors.origins.

More in the guide →

iwc schema

Write one JSON Schema (draft 2020-12) per file type for editor autocompletion.

Syntax

Syntax
iwc schema [--out .iwc/schemas]

Flags

FlagTypeDefaultDescription
--outstring.iwc/schemasOutput directory.

Examples

Terminal
iwc schema --out .vscode/iwc-schemas

Expected output

Output
✓ wrote 17 JSON Schemas to .vscode/iwc-schemas

iwc add

Install an @iwc/* package: choose a provider, enter credentials (hidden), verify the connection, write the integration.

Syntax

Syntax
iwc add <package> [dir] [--provider id] [--name n] [--env development] [--no-verify] [--force]

Arguments

<package>e.g. @iwc/mail, @iwc/payments, or a shortcut such as @iwc/razorpay.

Flags

FlagTypeDefaultDescription
--providerstring—Provider id (otherwise you are asked).
--namestring—Integration name.
--envstringdevelopmentVault environment for credentials.
--no-verifybool—Skip the connection test.
--forcebool—Replace an existing integration.

Examples

Terminal
iwc add @iwc/mail
iwc add @iwc/payments --provider razorpay
iwc add @iwc/map   # a bundled widget

More in the guide →

iwc packages

List the packages and widgets, or show one package's methods and settings.

Syntax

Syntax
iwc packages [package]

Examples

Terminal
iwc packages
iwc packages @iwc/payments

Expected output

Output
IWC packages  (install with: iwc add <package>)

  @iwc/ai            Claude, OpenAI, Gemini or any OpenAI-compatible model server…
                     providers: anthropic, openai, gemini, openai-compatible, simulated
  @iwc/mail          Transactional email through Resend, SendGrid, Amazon SES…
  …

Common errors

MessageWhat to do
no package @iwc/x (iwc packages lists them)Check the name against the list.

iwc integrations

The project's installed integrations: status, live connection test, uninstall.

Syntax

Syntax
iwc integrations [list]
iwc integrations verify [name]
iwc integrations remove <name> [--purge]

Flags

FlagTypeDefaultDescription
--dirstring.Project folder.
--envstringdevelopmentVault environment to check.
--purgebool—remove: also delete its credentials from the vault.

Examples

Terminal
iwc integrations
iwc integrations verify mail

iwc config

Integration settings: switch provider, plain settings, credentials into the vault, connection test.

Syntax

Syntax
iwc config [list|get|set|unset|test] [key] [value]

Flags

FlagTypeDefaultDescription
--dirstring.Project folder.
--envstringdevelopmentVault environment.

Examples

Terminal
iwc config set mail.provider postmark   # switch provider; actions recompile
iwc config set mail.server_token   # a credential: hidden prompt, stored encrypted
printf %s "$TOKEN" | iwc config set mail.server_token   # non-interactively
iwc config test mail

A credential given as a command-line argument is refused (it would land in shell history). No command prints a secret.

iwc secrets

Credentials kept encrypted outside the project for development; export them for a server.

Syntax

Syntax
iwc secrets [list|set|get|rm|export|import] [name] [--env development]

Flags

FlagTypeDefaultDescription
--envstringdevelopmentEnvironment.
--dirstring.Project folder.
--revealbool—get: print the value.
--generatebool—set: generate a random 32-byte key.
--outstring—export: write to this file (0600) instead of stdout.

Examples

Terminal
iwc secrets set IWC_ENCRYPTION_KEY --generate
iwc secrets export --env production --out prod.env

More in the guide →

iwc security

Audit the project's security configuration.

Syntax

Syntax
iwc security [dir] [--strict] [--json]

Arguments

[dir]Project directory. Default: the current directory.

Flags

FlagTypeDefaultDescription
--strictbool—Fail on medium findings too.
--jsonbool—Machine-readable output.

Examples

Terminal
iwc security --strict

Expected output

Output
✓ no security findings

More in the guide →

iwc push

Push notifications to browsers, Android and iOS: what is set up, the guided setup, a test notification from the terminal, the registered devices.

Syntax

Syntax
iwc push [--dir .]
iwc push setup [--web] [--android] [--ios] [--subject mailto:…] [--service-account key.json] [--target prod] [--no-verify] [--yes]
iwc push test [--to all|<email>|<user id>] [--token t --platform web|android|ios] [--title t] [--body b] [--path /screen] [--target prod | --site https://…] [--key k] [--env production]
iwc push devices [--platform p] [--json] [--target prod | --site https://…]
iwc push key [--env production] [--show] [--rotate]

Flags

FlagTypeDefaultDescription
--webbool—setup: web push only (the default also covers the native platforms in app.iwc).
--androidbool—setup: the Android app (Firebase Cloud Messaging).
--iosbool—setup: the iOS app (Firebase Cloud Messaging).
--subjectstring—setup: the contact address push services may write to (mailto: or https:).
--service-accountstring—setup: the Firebase service account key file; stored encrypted in the vault and checked with Google.
--no-verifybool—setup: skip the Firebase check.
--yesbool—setup: accept the defaults without asking (never skips a host-key check).
--targetstring—setup: also prepare that deploy target (production keys onto its settings.env). test/devices: reach that deployed app.
--sitestring—test/devices: the deployed app's address (instead of --target).
--keystring—test/devices: the app's IWC_PUSH_KEY (default: $IWC_PUSH_KEY, then the vault). setup --target: the SSH key file, as for iwc deploy.
--hoststring—setup --target: the server or cPanel address without the wizard (CI), as for iwc deploy.
--userstring—setup --target: the SSH or cPanel user.
--portint22setup --target: SSH port.
--fingerprintstring—setup --target: the server's host-key fingerprint, to trust it without a prompt.
--domainstring—setup --target: the domain when the wizard creates the target.
--setupbool—Only with the old iwc push (= iwc deploy): run the server setup again.
--envstringproductionVault environment holding the key.
--tostringalltest: who: all, an email (sign-in identity) or a user id.
--tokenstring—test: one device token, e.g. copied from a device log.
--platformstring—test/devices: only web, android or ios devices.
--titlestring—test: the title (default: Test notification from ).
--bodystring—test: the text.
--pathstring/test: the screen a tap opens.
--jsonbool—devices: machine-readable output.
--showbool—key: print the full key.
--rotatebool—key: replace the key with a new one.
--dirstring.Project folder.

Examples

Terminal
iwc push setup   # guided: web push keys, Firebase for the apps, production keys
iwc push   # what is set up and the command that fixes anything missing
iwc push test   # every device registered with the running iwc dev
iwc push test --to ann@example.com --path /orders   # one person
iwc push setup --target prod   # production keys written into the server's settings.env
iwc push test --target prod   # through the deployed app

Expected output

Output
Sending "Test notification from Shop" to every registered device via http://127.0.0.1:3000 (iwc dev)…
✓ sent to 2 of 2 device(s)

Common errors

MessageWhat to do
no devices are registeredOpen the app, press the button with "action": "notifications" and allow notifications (native apps register after sign-in).
went through a simulated providerRun iwc push setup for that platform to configure a real sender.
Sending from the CLI is off on this serverIWC_PUSH_KEY isn't set on the server: iwc push setup --target prod.

IWC keeps the devices; a push step in an action sends to people. The old iwc push still deploys (it is iwc deploy).

More in the guide →

iwc enable

Turn whole-app capabilities on in app.iwc: an installable web app (pwa) and offline data with sync (offline).

Syntax

Syntax
iwc enable [pwa] [offline] [--icon path] [--vapid] [--push /api/devices] [--dir .]
iwc disable pwa|offline
iwc support --pwa --offline [--off]

Flags

FlagTypeDefaultDescription
--iconstring—pwa: the source icon for the generated app icons.
--vapidbool—pwa: generate VAPID keys for Web Push.
--pushstring—pwa: the API that receives browser push subscriptions.
--dirstring.Project folder.

Examples

Terminal
iwc enable   # lists the capabilities
iwc enable pwa offline
iwc enable pwa --vapid --push /api/devices
iwc disable offline

More in the guide →

iwc plugins

List installed CLI plugins; iwc <name> … runs an executable named iwc-.

Syntax

Syntax
iwc plugins
iwc <plugin> [args…]

Examples

Terminal
iwc plugins
iwc hello world   # runs ~/.iwc/plugins/iwc-hello

Plugins are looked up in $IWC_PLUGINS, then ~/.iwc/plugins, then PATH. They receive IWC_BIN, IWC_VERSION and IWC_CWD. Built-in commands always win.

More in the guide →

iwc about

Framework, release and environment information: owner, installed and latest release with publish dates, channel, install location and links. Works from any folder.

Syntax

Syntax
iwc about [--json] [--offline]
iwc about --welcome

Flags

FlagTypeDefaultDescription
--jsonbool—Print the same information as JSON, for scripts.
--offlinebool—Make no network request: use the cached release list, or the build date stamped into the release.
--welcomebool—Print the short post-install welcome. The installers, Homebrew and Scoop show it once after installing.

Examples

Terminal
iwc about
iwc about --json

Expected output

Output
  IWC Framework  v0.2.0 (stable)
  by IonicWebCreator Private Limited

  FRAMEWORK
    Name              IWC Framework
    Version           0.2.0
    Owner             IonicWebCreator Private Limited
    Founder           Jakir Hussian
    Website           https://oniwc.com
    Documentation     https://github.com/Hussian007/iwc/tree/main/docs

  RELEASE
    Installed         0.2.0, published 2026-11-11 23:23 UTC
    Channel           stable
    Latest stable     0.2.0, published 2026-11-11 23:23 UTC (up to date)
    First release     0.1.0, published 2026-11-11 23:04 UTC
    Release data      GitHub Releases, read just now

  ENVIRONMENT
    Operating system  macOS 26.3.1
    Architecture      Apple Silicon (arm64)
    Installed at      /opt/homebrew/Cellar/iwc/0.2.0/bin/iwc
    Install method    Homebrew (hussian007/iwc/iwc)
    Compiler          IWC compiler and runtime built in (Go 1.27.3)

  LINKS
    Documentation     https://github.com/Hussian007/iwc/tree/main/docs
    Release notes     https://github.com/Hussian007/iwc/releases/tag/v0.2.0
    Changelog         https://github.com/Hussian007/iwc/releases
    GitHub            https://github.com/Hussian007/iwc
    Support           https://oniwc.com/contact

Release dates come from GitHub Releases (the official release record) and are cached for an hour, so most runs make no network request. Offline, it shows the cached list with its age, or the build date and a note that live information is unavailable. When a newer stable release exists, both versions are shown with the upgrade command for your installation.

More in the guide →

iwc version

Print the version, platform and the fingerprint of the source the binary was built from.

Syntax

Syntax
iwc version
iwc --version

Examples

Terminal
iwc --version

Expected output

Output
iwc 0.2.0 (darwin/arm64, source b3c0de8de939)