Install & Build
Prerequisites
- Node.js 18 / 20 / 22 / 24 (any of these; declared in
engines.node) - pnpm (the lockfile is
pnpm-lock.yaml; npm/yarn will produce different trees) - JDK 17 + Android SDK (for Android builds, declared in
android/app/build.gradle) - Xcode 15+ (for iOS builds)
- Rust toolchain + Visual Studio Build Tools (for Tauri Windows builds)
Step 1 — Clone and install
git clone https://github.com/lingion/AIaW.git
cd AIaW
pnpm install
pnpm install will run sharp's postinstall (allowed in pnpm.onlyBuiltDependencies); everything else skips native compilation.
Step 2 — Run the dev server
pnpm dev # Quasar dev mode (SPA, port 9005)
# or
pnpm dev -m pwa # PWA mode (port 9006)
Open the dev URL Quasar prints to terminal (default http://<your-host>:<your-port>; the exact port is whichever Vite allocates, often 9000 for SPA). First run takes ~30 s while Vite warms the cache.
Step 3 — Build production assets
pnpm build # writes dist/spa/ (SPA) and dist/pwa/ (PWA)
build is just quasar build. quasar.config.js declares no beforeBuild hook, so dist/spa contains the full SPA ready for static hosting.
Step 4 — Build for Android (Capacitor)
pnpm build -m capacitor -T android
# produces android/ Capacitor project; then:
cd android
./gradlew assembleDebug # debug APK
./gradlew assembleRelease # release APK (signed with debug key in build.gradle)
The Android module is pinned to: minSdkVersion 23 (Android 6.0), compileSdkVersion 35, targetSdkVersion 35, Java 17, versionCode 20018.
Step 5 — Build for iOS
pnpm build -m capacitor -T ios
# produces ios/ Xcode project
cd ios
pod install
xcodebuild -workspace App.xcworkspace -scheme App -sdk iphoneos
Step 6 — Build for desktop (Tauri)
pnpm build # builds the SPA assets
cd src-tauri
cargo tauri build # produces .deb / .appimage / .nsis / .app / .dmg
Tauri config targets: deb, appimage, nsis, app, dmg. Bundle id: app.aiaw. Window: 1150x750, drag-drop disabled.
Step 7 — Verify what got built
ls dist/spa/ # SPA output
ls android/app/build/outputs/ # Android APKs
ls src-tauri/target/release/ # Tauri bundles
Customizing the build
All runtime configuration goes through Vite's import.meta.env. The values are read in src/utils/config.ts:
| Env var | Used by | Default in this fork |
|---|---|---|
DOC_PARSE_BASE_URL | doc-parse plugin (PDF/Word/Excel parsing) | undefined (plugin shows error) |
CORS_FETCH_BASE_URL | proxy for cross-origin fetches | undefined |
SEARXNG_BASE_URL | web-search plugin (SearXNG metasearch) | undefined |
LITELLM_BASE_URL | Litellm proxy (used by custom-provider feature) | undefined (hides the route) |
BUDGET_BASE_URL | budget/quota display | undefined |
DEXIE_DB_URL | Dexie Cloud sync | undefined (cloud-sync disabled) |
DISABLE_CHECK_UPDATE | skip the new-version check on app boot | false |
Set these via .env.local (gitignored) before pnpm dev / pnpm build. The shipped .env.app file contains the upstream demo URLs and is meant to be replaced, not used as-is.
Scripts beyond the standard Quasar ones
From package.json:
pnpm sync-version— copies version metadata tosrc/version.jsonpnpm generate:app-icons— regenerates icon set from a single source imagepnpm sync:android-shell— syncs the native shell folder between upstream and forkpnpm check:packaging-shell— pre-build sanity check that the native shell is intactpnpm build:android:canonical— canonical Android APK build path
These all run against scripts/*.mjs files. They are not needed for normal SPA / PWA / Tauri builds; they only matter if you are also producing the Android APK from a clean checkout.