aipps.dev

Quick start

You need Node.js 20 or newer and a project: Expo, React Native, Capacitor, or a plain Android or Xcode project.

  1. Open the console, sign in, and make an API key under Keys.
  2. Install the command line and sign in with the key.
  3. In your project folder, run aipps init, then aipps build.
npm i -g aipps
aipps login
cd my-app
aipps init
aipps build -p android

The log streams to your terminal. When the build is done you get a link to its install page with a QR code.

aipps.json

aipps init reads app.json, package.json and eas.json and writes this file. Commit it.

{
  "app": "checklists",            // the app's name in your account
  "framework": "expo",            // expo | react-native | capacitor | android | ios
  "android": { "package": "one.checklists" },
  "ios": { "bundleIdentifier": "one.checklists" },
  "profiles": {
    "development": { "developmentClient": true, "distribution": "internal" },
    "preview": { "distribution": "internal" },
    "production": { "distribution": "store" }
  }
}

Profiles from eas.json are carried over. Pick one with --profile; the default is preview.

Commands

CommandWhat it does
aipps login [--key ak_…]Saves your API key in ~/.aipps/config.json. Or set AIPPS_API_KEY.
aipps whoamiYour account and today's builds.
aipps initWrites aipps.json and adds the app to your account.
aipps build -p android|iosUploads the project and follows the build. --profile, -m for a note, --no-wait to return at once.
aipps builds [--all]Recent builds of this app (or every app).
aipps logs <id> [-f]A build's log; -f follows it.
aipps download <id>Saves the app file.
aipps cancel <id>Stops a build.

What gets uploaded

Files git tracks plus untracked files that aren't ignored. Without git: the folder minus node_modules, build folders and caches. .env files, keystores, certificates and provisioning profiles are never sent with the source; signing credentials are added separately and kept encrypted. Uploads are deleted when the build ends.

Android builds

Each build runs in a fresh container with JDK 17, Node 22 and the Android SDK (platforms 35 and 36, NDK 27). Expo projects run expo prebuild first; Capacitor projects run your build script and cap sync. Gradle tasks: assembleDebug for development, assembleReleasefor internal profiles, bundleRelease (an .aab for Google Play) for production. Internal builds compile for 64-bit ARM phones only, which halves native compile time; store builds include every architecture. versionCode goes up by one with each build.

iPhone builds

iPhone and Mac builds run on our Mac mini with Xcode 26 or newer (Apple requires it for uploads). Signed builds use your own App Store Connect API key: we never hold an Apple password. Simulator builds come first; signed test builds, device registration and TestFlight uploads follow shortly.

Installing builds

Every finished build has a page at aipps.dev/i/<id> with a QR code. On Android, open it on the phone and tap Install; Android asks once to allow installs from the browser. Anyone with the link can install until the build expires.

Daily builds

Builds are counted per day (UTC) across all your apps. Most builds count as one; long or very large builds count more. The details are on the pricing page. An app's first build on a platform counts as one at most, since it fills empty caches.

API

Everything the command line does is plain HTTPS with your key in X-Api-Key:

GET  /api/me                      account and today's builds
POST /api/apps                    {"name", "framework", "android_package", "ios_bundle_id"}
POST /api/builds                  {"app", "platform", "profile"}
PUT  /api/builds/{id}/source      the project as .tar.gz
GET  /api/builds/{id}/logs?offset=n
GET  /api/builds/{id}/artifact

Full reference: /api/docs.