Skip to main content
The revyl init command sets up your project for local test management and build integration.

Initialize a Project

Navigate to your app’s root directory and run:
cd your-app
revyl init
The CLI launches an interactive wizard that walks you through:
  1. Project Setup — auto-detects your build system, creates .revyl/ directory and config.yaml
  2. Authentication — checks for existing credentials; opens browser login if needed
  3. Create Apps — select existing apps (with paginated list) or create new ones for each platform. If an app with the same name already exists, it is automatically linked.
  4. First Build — build and upload, upload an existing artifact, or skip. If the artifact is not found at the default path, you can provide an alternative location.
  5. Create First Test — creates a test on the server. If the name already exists, you can link to the existing test, rename, or skip. The test YAML is auto-synced to .revyl/tests/.
  6. Create Workflow — optionally groups tests into a workflow.

Example Output

Step 1/6  Project Setup

  Detecting build system...
  ✓ Detected: Expo
  ✓ Project config created

Step 2/6  Authentication

  ✓ Authenticated as [email protected]

Step 3/6  Create Apps

  Select app for ios:
    > [1] Create new app
      [2] Skip
  ✓ Created app "my-app-ios"

Step 4/6  First Build

  What would you like to do for ios?
    > [1] Build and upload
      [2] Upload existing artifact
      [3] Skip

Step 5/6  Create First Test

  ✓ Created test "login" (id: abc123...)
    Synced to .revyl/tests/login.yaml

Step 6/6  Create Workflow

  ✓ Created workflow "smoke-tests"

Init Options

FlagDescription
--project <id>Link to a specific Revyl project
-y, --non-interactiveSkip interactive wizard, just generate config
--detectOnly detect build system, don’t create files
--forceOverwrite existing configuration

Project Structure

After initialization, your project will have:
your-app/
├── .revyl/
│   ├── config.yaml      # Project configuration
│   ├── tests/           # Local test definitions (synced YAML)
│   │   └── login.yaml   # Auto-synced from server
│   └── .gitignore       # Excludes credentials
├── src/
└── ...

Configuration File

The .revyl/config.yaml file controls CLI behavior:
# Project identification
project:
  id: "proj_abc123"        # Optional: linked Revyl project
  name: "my-app"

# Build configuration
build:
  system: expo             # Auto-detected
  
  # Build platforms for different environments
  platforms:
    ios:
      command: "eas build --platform ios --local"
      output: "build/*.tar.gz"
      app_id: "70332b2b-4d0a-47f7-a522-568832c8ab6a"
    
    android:
      command: "./gradlew assembleDebug"
      output: "app/build/outputs/apk/debug/*.apk"
      app_id: "121063ac-60e6-4443-987a-7f82c269d493"

# Test aliases (name → UUID mapping)
tests:
  login-flow: "5910ce02-eace-40c8-8779-a8619681f2ac"
  checkout: "def456-..."
  onboarding: "ghi789-..."

# Workflow aliases
workflows:
  smoke-tests: "wf_abc123"
  regression: "wf_def456"

# Default settings
defaults:
  open_browser: true       # Open results in browser after run
  timeout: 600             # Default timeout in seconds

# Sync tracking (auto-managed)
last_synced_at: "2026-02-10T14:30:00Z"  # Updated by sync operations

Build Platforms

Build platforms let you configure different build commands for iOS, Android, debug, and release builds.

Single Platform Example

build:
  system: gradle
  command: "./gradlew assembleDebug"
  output: "app/build/outputs/apk/debug/app-debug.apk"

Multi-Platform Example

build:
  system: expo
  platforms:
    ios:
      command: "eas build --platform ios --local --profile development"
      output: "build/*.tar.gz"
      build_var_id: "bv_ios_dev"
    
    android:
      command: "eas build --platform android --local --profile development"
      output: "build/*.apk"
      build_var_id: "bv_android_dev"

Using Platforms

# Build and upload iOS
revyl build upload --platform ios

# Build and upload Android
revyl build upload --platform android

# Run full pipeline with specific platform
revyl test login-flow --platform android
iOS builds must be simulator .app bundles (or a zipped .app), not .ipa device builds. Ensure your build command produces a simulator build. See Build Guides for framework-specific instructions.

Test Aliases

Test aliases map friendly names to UUIDs, making commands easier to type:
tests:
  login: "5910ce02-eace-40c8-8779-a8619681f2ac"
  checkout: "abc123-def456-..."
Now you can run:
# Instead of:
revyl test run 5910ce02-eace-40c8-8779-a8619681f2ac

# You can use:
revyl test run login
When you run revyl test pull, aliases are automatically created from test names.

Workflow Aliases

Similarly, workflow aliases simplify workflow commands:
workflows:
  smoke: "wf_abc123"
  full-regression: "wf_def456"
revyl workflow run smoke

Linking to a Revyl Project

To link your local project to a Revyl project:
revyl init --project proj_abc123
Or add it manually to config.yaml:
project:
  id: "proj_abc123"

Detected Build Systems

The CLI auto-detects these build systems:
Build SystemDetection
Gradlebuild.gradle or build.gradle.kts
Xcode*.xcodeproj or *.xcworkspace
Expoapp.json with expo key
Flutterpubspec.yaml with flutter dependency
React Nativepackage.json with react-native dependency

Next Steps