The Revyl CLI provides bidirectional sync between local YAML test files and the Revyl cloud. Edit tests in your IDE or the web editor - changes sync both ways.
List Local Tests
View all tests in your project with their sync status:
Output:
NAME STATUS PLATFORM LAST MODIFIED
login-flow synced android 2 hours ago
checkout modified ios 5 minutes ago
onboarding outdated android 1 day ago
new-feature local-only android just now
Sync Statuses
| Status | Meaning |
|---|
synced | Local and remote are identical |
modified | Local changes not yet pushed |
outdated | Remote has newer changes |
local-only | Exists locally but not on remote |
remote-only | Exists on remote but not locally |
JSON Output
For scripting, use JSON output:
List Remote Tests
View all tests in your organization:
Options:
| Flag | Description |
|---|
--limit <n> | Limit number of results |
--platform <ios|android> | Filter by platform |
--json | Output as JSON |
Reconcile Project State
If local aliases drift from remote IDs (deleted tests, renamed workflows, stale app links),
use revyl sync to reconcile your .revyl/config.yaml mappings.
# Preview changes first
revyl sync --dry-run
# Reconcile only tests and auto-prune stale links
revyl sync --tests --prune
revyl sync reconciles tests, workflows, app links, and hot reload build references. Device session commands are unaffected.
Pull Tests from Remote
Download tests from Revyl to your local project:
# Pull all tests
revyl test pull
# Pull a specific test
revyl test pull login-flow
Pull Options
| Flag | Description |
|---|
--force | Overwrite local changes |
--dry-run | Show what would be pulled without making changes |
Example Output
Pulling tests from Revyl...
↓ login-flow.yaml (updated)
↓ checkout.yaml (new)
- onboarding.yaml (unchanged)
✓ Pulled 2 tests, 1 unchanged
If you have local modifications, pull will warn you. Use --force to overwrite, or push your changes first.
Push Tests to Remote
Upload local test changes to Revyl:
# Push all modified tests
revyl test push
# Push a specific test
revyl test push checkout
Push Options
| Flag | Description |
|---|
--force | Overwrite remote changes |
--dry-run | Show what would be pushed without making changes |
Example Output
Pushing tests to Revyl...
↑ checkout.yaml (updated)
↑ new-feature.yaml (created)
✓ Pushed 2 tests
View Differences
Compare local and remote versions of a test:
revyl test diff login-flow
Output shows a unified diff:
--- remote/login-flow.yaml
+++ local/login-flow.yaml
@@ -5,7 +5,7 @@
steps:
- instruction: "Tap the login button"
- - instruction: "Enter username"
+ - instruction: "Enter email address"
- validation: "Dashboard is visible"
Validate Test Files
Check YAML syntax and schema before pushing:
# Validate a specific file
revyl test validate .revyl/tests/checkout.yaml
# Validate all local tests
revyl test validate
Validation Output
Validating checkout.yaml...
✓ Schema valid
✓ Variables defined before use
⚠ Warning: Step 3 has no timeout specified
1 warning, 0 errors
Create a New Test
Create a new test and optionally open it in the browser:
revyl test create checkout-flow --platform android
Create Options
| Flag | Description |
|---|
--platform <ios|android> | Target platform (required) |
--build-var <id> | Associate with a build variant |
--no-open | Don’t open in browser |
--no-sync | Don’t sync to remote |
--force | Overwrite if exists |
--dry-run | Show what would be created |
What Happens
- Creates the test on the Revyl server via API
- Adds the test alias to
.revyl/config.yaml (unless --no-sync)
- Pulls the test YAML definition from the server to
.revyl/tests/<name>.yaml (unless --no-sync)
- Opens the test editor in your browser (unless
--no-open)
Open Test in Browser
Open an existing test in the Revyl web editor:
revyl test open login-flow
This resolves the test name through:
- Aliases in
config.yaml
- UUID lookup
- API search by name
Common Workflows
Daily Development
# Start of day: get latest tests
revyl test pull
# Make changes locally or in browser
# ...
# Check what changed
revyl test list
# Push your changes
revyl test push
Creating a New Test
# Create the test
revyl test create user-registration --platform ios
# Edit in browser or locally
# ...
# Validate before pushing
revyl test validate user-registration
# Push to remote
revyl test push user-registration
# Run it
revyl test run user-registration
Resolving Conflicts
# Check status
revyl test list
# Shows: checkout (outdated)
# View differences
revyl test diff checkout
# Option 1: Keep remote version
revyl test pull checkout --force
# Option 2: Keep local version
revyl test push checkout --force
# Option 3: Manually merge
# Edit .revyl/tests/checkout.yaml
revyl test push checkout
Repairing Stale Project Links
# 1) Preview what sync will change
revyl sync --dry-run
# 2) Apply test/workflow/app-link reconciliation
revyl sync
# 3) Confirm local test state
revyl test list
Tests are stored as YAML files in .revyl/tests/:
# .revyl/tests/login-flow.yaml
name: login-flow
platform: android
build_var_id: bv_android123
steps:
- instruction: "Tap the login button"
- instruction: "Enter '[email protected]' in the email field"
- instruction: "Enter 'password123' in the password field"
- instruction: "Tap Submit"
- validation: "Dashboard screen is visible"
See YAML Test Format for the complete schema reference.
Next Steps