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.
basic (a welcome screen, about screen, layout, footer, 404 and tests) or store (the complete e-commerce example).
--web
bool
—
Include the web target.
--android
bool
—
Include a native Android app (Kotlin + Jetpack Compose).
--ios
bool
—
Include a native iOS app (Swift + SwiftUI).
--admin
bool
—
Include a sign-in protected /admin area (web).
--yes
bool
—
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, iOSiwc create my-app --yes# web only, no questionsiwc create my-app --web--android--ios# all three targetsiwc 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
Message
What to do
my-app already exists
create 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.
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
Flag
Type
Default
Description
--port
int
3000
Port. When the default is taken the next free port is used; a port you pass is never silently changed.
--host
string
127.0.0.1
Interface. 0.0.0.0 makes the server reachable from a phone on your network.
--open
bool
—
Open the browser at the URL actually in use.
--platform
string
web
web, android or ios. Native: build, install and launch on an emulator/simulator; rebuild on save.
--android / --ios
bool
—
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).
--app
string
—
Multi-app projects: which app (from app.iwcapps) to run natively.
Examples
Terminal
iwc dev --openiwc dev --port 3400
iwc dev --host 0.0.0.0 # test on your phoneiwc 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
Message
What 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 page
A 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.
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.
A deploy target from package.iwc. Without one, the local .iwc/logs/dev.log.
Flags
Flag
Type
Default
Description
-f, --follow
bool
—
Keep printing new lines (the local log, and targets on your own server).
--system
bool
—
Own-server targets: the systemd service and web-server journal instead of the app log.
--lines
int
200
Number of lines.
--json
bool
—
Raw JSON records, for grep/jq (local log only).
--dir
string
.
Project directory.
Examples
Terminal
iwc logs -fiwc 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)
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
Flag
Type
Default
Description
--port
int
3000
The port iwc dev will use.
--platform
string
—
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
Message
What to do
! PATH `iwc` resolves to …, not this binary
Two 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.
✓ 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.
Secure cookies and HSTS. Disable only for plain-HTTP testing (or set IWC_INSECURE=1).
--base
string
$IWC_BASE
Serve under a path prefix such as /shop, behind a proxy forwarding /shop/*.
--trust-proxy
string
$IWC_TRUST_PROXY
Behind 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 machineDATABASE_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.
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.
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.
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.
Any name: prod, staging, client-a. Each target is set up and saved separately.
Flags
Flag
Type
Default
Description
--dir
string
.
Project directory.
--host
string
—
Without the wizard: the server (user@host:port) or the cPanel address.
--user
string
—
The SSH user, or the cPanel username.
--port
int
22
SSH port (own server).
--key
string
—
Own server: the private key file to log in with.
--fingerprint
string
—
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.
--domain
string
—
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).
--yes
bool
—
Accept defaults without asking. Never skips the host-key check.
--setup
bool
—
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 siteiwc deploy staging # another target, set up separatelyIWC_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
Message
What 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 CHANGED
The 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 sudo
Only 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.
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
Flag
Type
Default
Description
--dir
string
.
Project directory.
--host
string
—
Without the wizard: the server (user@host:port) or the cPanel address.
--user
string
—
The SSH user, or the cPanel username.
--port
int
22
SSH port (own server).
--key
string
—
Own server: the private key file to log in with.
--fingerprint
string
—
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.
--domain
string
—
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).
--yes
bool
—
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 hereiwc server env prod set STRIPE_KEY # own server: asks for the value without echoing it, then restarts the appiwc server env prod list # names only, never valuesiwc server setup prod # own server: install or update the service, web server and HTTPS againiwc 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).
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
Flag
Type
Default
Description
--dir
string
.
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.
The server the document lists and the explorer calls.
--format
string
both
json, yaml or both.
--strict
bool
—
Fail when a definition's examples.request doesn't pass that API's own validation.
--app
string
—
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.iwccors.origins.
iwc config set mail.provider postmark # switch provider; actions recompileiwc config set mail.server_token # a credential: hidden prompt, stored encryptedprintf %s "$TOKEN"|iwc config set mail.server_token # non-interactivelyiwc config test mail
A credential given as a command-line argument is refused (it would land in shell history). No command prints a secret.
setup: web push only (the default also covers the native platforms in app.iwc).
--android
bool
—
setup: the Android app (Firebase Cloud Messaging).
--ios
bool
—
setup: the iOS app (Firebase Cloud Messaging).
--subject
string
—
setup: the contact address push services may write to (mailto: or https:).
--service-account
string
—
setup: the Firebase service account key file; stored encrypted in the vault and checked with Google.
--no-verify
bool
—
setup: skip the Firebase check.
--yes
bool
—
setup: accept the defaults without asking (never skips a host-key check).
--target
string
—
setup: also prepare that deploy target (production keys onto its settings.env). test/devices: reach that deployed app.
--site
string
—
test/devices: the deployed app's address (instead of --target).
--key
string
—
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.
--host
string
—
setup --target: the server or cPanel address without the wizard (CI), as for iwc deploy.
--user
string
—
setup --target: the SSH or cPanel user.
--port
int
22
setup --target: SSH port.
--fingerprint
string
—
setup --target: the server's host-key fingerprint, to trust it without a prompt.
--domain
string
—
setup --target: the domain when the wizard creates the target.
--setup
bool
—
Only with the old iwc push (= iwc deploy): run the server setup again.
--env
string
production
Vault environment holding the key.
--to
string
all
test: who: all, an email (sign-in identity) or a user id.
--token
string
—
test: one device token, e.g. copied from a device log.
--platform
string
—
test/devices: only web, android or ios devices.
--title
string
—
test: the title (default: Test notification from ).
--body
string
—
test: the text.
--path
string
/
test: the screen a tap opens.
--json
bool
—
devices: machine-readable output.
--show
bool
—
key: print the full key.
--rotate
bool
—
key: replace the key with a new one.
--dir
string
.
Project folder.
Examples
Terminal
iwc push setup # guided: web push keys, Firebase for the apps, production keysiwc push # what is set up and the command that fixes anything missingiwc push test # every device registered with the running iwc deviwc push test --to ann@example.com --path /orders # one personiwc push setup --target prod # production keys written into the server's settings.enviwc 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
Message
What to do
no devices are registered
Open the app, press the button with "action": "notifications" and allow notifications (native apps register after sign-in).
went through a simulated provider
Run iwc push setup for that platform to configure a real sender.
Sending from the CLI is off on this server
IWC_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).
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
Flag
Type
Default
Description
--json
bool
—
Print the same information as JSON, for scripts.
--offline
bool
—
Make no network request: use the cached release list, or the build date stamped into the release.
--welcome
bool
—
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.