Recipes: build, run & distribute pipelines
Recipes are the data-driven, editable step lists behind every build and deploy. Duplicate a preset, edit a command, and it travels with your project.
Last updated 2026-07-02
A recipe is an ordered list of steps that AppRelay runs to build, run, or distribute a lane. Recipes are data, not code: AppRelay ships presets for every toolchain and channel, and you can duplicate any of them and edit the steps. Your edited recipes travel inside the project's .relay archive, so a team can share a curated pipeline the same way they share a project.
Anatomy of a recipe
- Kind
- What the recipe does:
build,run, ordistribute. - Adapter / channel
- The toolchain or distribution channel it belongs to.
- Steps
- An ordered list; each step is a command template plus a progress marker and a pass/fail signal.
- Built-in flag
- Shipped presets are marked built-in and read-only — you duplicate them to edit.
Anatomy of a step
- Title
- What appears on the checklist.
- Command
- A template like
{gradlew} :app:bundleRelease. Variables resolve at run time — see template variables. - Marker
- A substring of the streamed output that signals this step has started, so the checklist advances live.
- Pass signal
exitZero, aregexmatch, afileExistscheck, ormanualconfirmation.- Working directory
- Optional override of the lane's working directory for this step.
Built-in recipes
Every adapter and channel in the library ships with at least one seeded recipe, so a freshly onboarded project can build and ship without you writing anything. Representative examples:
| Recipe | Does |
|---|---|
xcode.archive-export-upload | Archive, export, and upload to App Store Connect |
gradle.bundle-release + playConsole.upload-track | Build an AAB and upload to a Play track |
expo.eas-build + expo.eas-submit | Build and submit with EAS |
flutter.build-appbundle | Build a Flutter app bundle |
node.build + vercel.deploy / s3.sync-invalidate | Build a web app and deploy to Vercel or S3+CloudFront |
electron.make + githubReleases.publish | Package an Electron app and publish a GitHub release |
npm.publish · homebrew.bump-formula · docker.build-push | Publish to a registry / tap / Docker |
Authoring a recipe
- Find the closest built-in. In the project editor's Recipes section, browse the library.
- Duplicate it. This gives you an editable copy; the original stays intact.
- Edit the steps. Change a command, add or remove a step, adjust a marker or pass signal, or use a different template variable.
- Attach it. Point a lane's toolchain (for build/run) or a distribution (for distribute) at your recipe.
- Run it from a release and confirm the checklist reflects your changes.
Keep steps linear — push logic to a script
customShell step that calls a script in your repo — a fastlane lane, a Makefile target, or an npm script. That's where that logic belongs, and AppRelay simply orchestrates and observes it.In other words, AppRelay does not reimplement Fastlane, EAS, or the Vercel CLI — it calls them. Recipes are the thin, visible glue that runs your tools in order and reports progress.
Recipes are shared and portable
Recipes live at the workspace level and are shared across projects, and they're written into the .relay archive on export. Duplicate-and-edit a step, export, and re-import on another machine — your change comes with it.