Create your app

Scaffold a project#

bash
waid login --env local
waid new my-app
cd my-app
npm install

waid new creates a standard Vite + React + Tailwind + shadcn app at the project root, alongside waid.config.json. Optional flags set your app's identity up front so you never hand-edit config later:

bash
waid new my-app \
--app-name "My App" \
--android-package com.acme.myapp \
--ios-bundle-id com.acme.myapp

Project layout#

text
my-app/
├── waid.config.json # your app's config (name, icon, identity, capabilities)
├── package.json
├── vite.config.ts
├── index.html
├── components.json # shadcn config
├── public/
└── src/
├── main.tsx
├── App.tsx
├── index.css
├── lib/utils.ts
└── components/ui/ # button, card, badge, …

Your React source lives in src/. waid.config.json at the root is where you configure how it's packaged. See App configuration.

Author the app#

Write ordinary React + Tailwind. There are no WAID-specific imports or components; shadcn/ui components are scaffolded in src/components/ui/.

tsx
import { Button } from "@/components/ui/button"
import { useState } from "react"
 
export default function App() {
const [count, setCount] = useState(0)
return <Button onClick={() => setCount((c) => c + 1)}>Count: {count}</Button>
}

What to commit#

Commit your source; never commit build output or secrets.

Commit: waid.config.json, .gitignore, and your frontend source (package.json, package-lock.json, src/, index.html, config files).

Do not commit:

text
.waid/ # generated builds + artifacts
dist/ node_modules/
*.apk *.aab
*.jks *.keystore waid.local.properties # signing keystores + local secrets

waid new sets up .gitignore for you, including the signing-secret files.