| Pages, components, layouts, routing | Built in | Server-rendered screens, components with props and slots, layouts with persistent slots, SPA navigation, guards, 404 |
| Forms and validation | Built in | Server-authoritative validation shown per field; uploads |
| Database, relations, migrations | Built in | SQLite / PostgreSQL, relations with onDelete, indexes, unique constraints, additive migrations, seeds |
| Business logic and transactions | Built in | Actions (15 step types, expressions, atomic increments, expect), one transaction per action |
| Record lifecycles | Built in | Workflows (state machines) with role- and row-scoped transitions |
| Background work | Built in | Durable jobs with retries, schedules (every), events with handlers |
| Auth, roles, ownership | Built in | Email + password, sessions, bearer tokens, role inheritance, owner rules, protected route areas |
| Multi-tenant SaaS | Built in | app.tenancy + "tenant": true scopes every read and write to the user's tenant |
| Permissions and record scopes | Built in | Declared permissions, roles and grants from the database, membership scopes (a manager sees their stores' rows), API/action guards. See access control |
| Several apps, one backend | Built in | Multi-app projects: per-app screens, URLs, hosts, cookies, builds; shared schemas and logic |
| Retries and abuse | Built in | Idempotency keys on writes, rate limits per IP, user or request value, optionally shared through the database |
| Security defaults | Built in | CSRF, strict CSP with nonces, rate limits, CORS allow-list, SSRF-guarded outbound calls, sensitive fields never leave the server, field encryption at rest, secrets refused in files and builds and redacted from logs, iwc security audit. See security |
| Credentials | Built in | Encrypted development vault and iwc secrets; production reads the environment |
| Live updates | Partial | Server push (SSE) re-renders live data blocks and announces broadcast events by name. @iwc/realtime publishes to Pusher/Ably channels and authorises private ones; a widget can load their browser SDKs to subscribe |
| Client state | Partial | Stores with fixed mutations (set push upsert remove increment clear) and derived sums/counts; persisted locally |
| Payments, refunds | Built in | @iwc/payments: Stripe, Razorpay, PayPal, Cashfree hosted checkout, status, capture, refunds, verified webhooks |
| Subscriptions, payouts, marketplace splits | Built in | @iwc/payments subscriptions, listPayments for reconciliation, connected accounts and transfers (Stripe Connect, Razorpay Route, PayPal payouts), Stripe destination charges |
| Webhooks | Built in | request.rawBody + declared headers, and verifyHmacSecret with secrets declared in app.iwc (hex/base64 HMAC-SHA256, constant-time). See verifying signed webhooks |
| Third-party APIs | Through services | Declarative http services with auth headers, per-method headers (API versions), timeouts, retries with backoff, cached reads with request collapsing, simulated providers for development. No GraphQL helper (POST a query body), no pagination helper for external APIs |
| Email | Built in | @iwc/mail: Resend, SendGrid, SES, Mailgun, Postmark, Brevo, SMTP; also delivers notify |
| SMS, WhatsApp, push | Built in | @iwc/sms (Twilio, Vonage, Plivo), @iwc/whatsapp (Meta, Twilio), push notifications to browsers, Android and iOS (devices kept by IWC, push step, iwc push test); @iwc/push (FCM, APNs, OneSignal, Web Push) |
| AI models | Built in | @iwc/ai (Claude, OpenAI, Gemini, OpenAI-compatible): streaming to the browser, tool calling (tools can be IWC actions, run as the user), JSON-Schema output, token usage |
| Search, maps, video | Built in | @iwc/search (Algolia, Meilisearch, Typesense), @iwc/maps (Google, Mapbox, OpenStreetMap; autocomplete), @iwc/video (Mux, Cloudflare Stream) |
| Shipping, bot protection, analytics | Built in | @iwc/shipping (Shiprocket, Delhivery, Shippo, EasyPost; normalised tracking), @iwc/captcha (Turnstile, hCaptcha, reCAPTCHA; server check only, the page's widget is yours), @iwc/analytics (PostHog, GA4, Segment, Mixpanel; server-side) |
| Not yet as packages | Not yet | Adyen, PayU; Blue Dart/DTDC direct (no self-serve API: use an aggregator); Cloudinary, Bunny; calendars, accounting, social media APIs; PDF generation; video calling |
| Phone sign-in (Firebase), refresh-token sessions, device list/revoke | Yes | authentication |
| Password reset, email verification | Built in | authentication |
| OAuth / social sign-in, multi-factor | Built in | Google, Microsoft, Apple, GitHub, GitLab, Discord, Facebook, LinkedIn, any OIDC with account linking; TOTP, email and SMS codes, recovery codes |
| Custom client-side JavaScript | Built in | Widgets: your own code and third-party SDKs (SRI-pinned) with a CSP widened only on the pages that use them, or sandboxed in an opaque-origin frame; bundled rich-text editor, map, Stripe Payment Element, HLS video player |
| Installable web app (PWA), offline data and sync | Built in | iwc enable pwa / iwc enable offline: manifest, service worker, push; stored screens, queued writes sent exactly once, conflicts, sync status on the web, Android and iOS |
| WebSockets | Built in | /_iwc/ws carries the live change events (web and native apps; SSE remains the fallback). Server → client only; your own messages over it are not yet supported |
| WebRTC, audio/video calling | Not yet | |
| Firebase and other realtime backends | Through services + widgets | REST APIs from actions; browser SDKs in a widget |
| File storage | Built in | Local disk or any S3-compatible bucket (S3, R2, MinIO…) behind the same storage.* APIs: uploads, presigned direct uploads checked on completion, signed downloads, delete, private files, per-endpoint type/size rules |
| Caching | Built in | Per-visitor data and API caches cleared by writes |
| Reports and summaries | Built in | aggregate in actions and data sources: grouped sums, counts, averages, minimums and maximums computed by the database, date buckets in the app's time zone, under the same access rules; filter bars in the URL |
| Spreadsheets | Built in | CSV responses (formula-injection safe) and parseCsv() for imports; createMany for bulk inserts |
| Backup and restore | Built in | iwc backup / iwc restore: one portable archive (data and uploads), consistent snapshot on PostgreSQL, restore in one transaction, SQLite ⇄ PostgreSQL |
| API documentation | Built in | OpenAPI 3.1 (JSON and YAML) derived from the definitions, an interactive explorer with Try it out at /_iwc/api-docs, iwc make --api docs for files; versioned endpoints (/api/v2/...) |
| Logs, diagnostics | Built in | Structured logs, request log, audit of actions and transitions, /_iwc/health, iwc logs. No metrics or tracing export |
| Deployment | Built in | iwc deploy to cPanel shared hosting (through cPanel's API, with rollback) or to your own Linux server over SSH (setup wizard, systemd service, nginx or Caddy with automatic HTTPS, atomic releases, rollback, logs, status), an HTTPS release host, and a zip for shared hosting. Servers need systemd; IWC installs Caddy (or certbot for nginx) on Debian, Ubuntu, Fedora and RHEL-like systems; other web servers on 80/443 need "proxy": "none". One server per target (no multi-server rollout or load balancing) |
| Extending the CLI | Built in | Plugins: iwc-<name> executables; x-<vendor> keys for other tools' data |
| Internationalisation | Not yet | One language per app (head.lang); no message catalogues or locale formats |
| SEO and sharing | Built in | Server-rendered metadata: dynamic titles, canonical, Open Graph/Twitter, JSON-LD, robots.txt, sitemap.xml, 404 for missing records |
| Performance | Built in | Per-route runtime modules and size budgets; a benchmark against Next.js and Angular (bench/REPORT.md in the IWC repository). No critical-CSS inlining or image pipeline yet |