# Pcloudy Appium Versions

Last updated on : 09 Jan 2026

Pcloudy supports multiple versions of Appium to ensure compatibility with your existing test automation infrastructure while enabling you to adopt the latest features.

## Why Multiple Appium Versions?
- Flexibility: Choose the version that works best for your project
- Backward Compatibility: Continue using older versions while planning migration
- Latest Features: Access new capabilities in Appium 2.x and 3.x
- Stable Testing: Pin to specific versions for consistent test execution

### Appium Evolution on Pcloudy
Appium 1.x (Legacy) → Appium 2.x (Current) → Appium 3.x (Future)

## 2. Supported Appium Versions

### Currently Supported Versions
| Appium Version | Status | Recommended | Android Support | iOS Support | EOL Date |
|----|----|----|----|----|----|
| 3.x | ✅ Stable | ⭐ Yes | ✅ All | ✅ All | \- |
| 2.0.0 | ✅ Stable | ⭐ Yes | ✅ All | ✅ All | \- |
| 1.22.3 | ⚠️ Legacy | \- | ✅ All | Not Supported | Dec 31, 2025 |
| 1.22.2 | ⚠️ Legacy | \- | ✅ All | Not Supported | Dec 31, 2025 |

### Version Recommendations

For New Projects:
- Use Appium 2.0.0 or 3.x for best compatibility and features

For Existing Projects:
- Appium 1.x: Plan migration to 2.0.0 before EOL
- Appium 2.0.0: Stable and recommended
- Appium 3.x: Latest features, fully supported

## 3. Selecting Appium Versions
### Method 1: Using Pcloudy:options (Recommended)
This is the recommended way to specify Appium version on Pcloudy:

#### Java

```javascript title="Java"
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
import java.net.URL;
import java.util.HashMap;

public class AppiumVersionExample {
    public static void main(String[] args) throws Exception {
        DesiredCapabilities capabilities = new DesiredCapabilities();

        // Standard Appium capabilities
        capabilities.setCapability("appium:newCommandTimeout", 600);
        capabilities.setCapability("appium:launchTimeout", 90000);
        capabilities.setCapability("appium:platformVersion", "16.0.0");
        capabilities.setCapability("appium:platformName", "Android");
        capabilities.setCapability("appium:automationName", "uiautomator2");

        // Pcloudy-specific options
        HashMap<String, Object> PcloudyOptions = new HashMap<String, Object>();
        PcloudyOptions.put("Pcloudy_Username", "your.email@example.com");
        PcloudyOptions.put("Pcloudy_ApiKey", "your_api_key_here");
        PcloudyOptions.put("Pcloudy_DeviceFullName", "GOOGLE_Pixel10_Android_16.0.0_8fcb5");
        PcloudyOptions.put("Pcloudy_WildNet", false);
        PcloudyOptions.put("Pcloudy_EnableVideo", true);
        PcloudyOptions.put("Pcloudy_EnablePerformanceData", true);
        PcloudyOptions.put("Pcloudy_EnableDeviceLogs", false);

        // Specify Appium version
        PcloudyOptions.put("appiumVersion", "2.0.0");  // or "3.0.0", "1.22.3", etc.

        capabilities.setCapability("Pcloudy:options", PcloudyOptions);

        // Connect to Pcloudy Appium hub
        AndroidDriver driver = new AndroidDriver(
            new URL("https://device.Pcloudy.com/appiumcloud/wd/hub"), 
            capabilities
        );

        // Your test code here

        driver.quit();
    }
}
```


#### Python

```javascript title="Python"
from appium import webdriver
from appium.options.android import UiAutomator2Options

def create_driver():
    options = UiAutomator2Options()

    # Standard Appium capabilities
    options.new_command_timeout = 600
    options.platform_name = 'Android'
    options.platform_version = '16.0.0'
    options.automation_name = 'uiautomator2'

    # Pcloudy-specific options
    Pcloudy_options = {
        'Pcloudy_Username': 'your.email@example.com',
        'Pcloudy_ApiKey': 'your_api_key_here',
        'Pcloudy_DeviceFullName': 'GOOGLE_Pixel10_Android_16.0.0_8fcb5',
        'Pcloudy_WildNet': False,
        'Pcloudy_EnableVideo': True,
        'Pcloudy_EnablePerformanceData': True,
        'Pcloudy_EnableDeviceLogs': False,
        'appiumVersion': '2.0.0'  # Specify version
    }

    options.set_capability('Pcloudy:options', Pcloudy_options)

    # Connect to Pcloudy
    driver = webdriver.Remote(
        'https://device.Pcloudy.com/appiumcloud/wd/hub',
        options=options
    )

    return driver

## Use the driver
driver = create_driver()
## Your test code
driver.quit()
```


#### Javascript (Node.Js)

```javascript title="Javascript"
const { remote } = require('webdriverio');

const options = {
    protocol: 'https',
    hostname: 'device.Pcloudy.com',
    port: 443,
    path: '/appiumcloud/wd/hub',

    capabilities: {
        // Standard Appium capabilities
        'appium:newCommandTimeout': 600,
        'appium:platformName': 'Android',
        'appium:platformVersion': '16.0.0',
        'appium:automationName': 'uiautomator2',

        // Pcloudy-specific options
        'Pcloudy:options': {
            Pcloudy_Username: 'your.email@example.com',
            Pcloudy_ApiKey: 'your_api_key_here',
            Pcloudy_DeviceFullName: 'GOOGLE_Pixel10_Android_16.0.0_8fcb5',
            Pcloudy_WildNet: false,
            Pcloudy_EnableVideo: true,
            Pcloudy_EnablePerformanceData: true,
            Pcloudy_EnableDeviceLogs: false,
            appiumVersion: '2.0.0'  // Specify version
        }
    }
};

(async () => {
    const driver = await remote(options);

    // Your test code here

    await driver.deleteSession();
})();
```


#### C#

```javascript title="C#"
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
import java.net.URL;
import java.util.HashMap;

public class AppiumVersionExample {
    public static void main(String[] args) throws Exception {
        DesiredCapabilities capabilities = new DesiredCapabilities();

        // Standard Appium capabilities
        capabilities.setCapability("appium:newCommandTimeout", 600);
        capabilities.setCapability("appium:launchTimeout", 90000);
        capabilities.setCapability("appium:platformVersion", "16.0.0");
        capabilities.setCapability("appium:platformName", "Android");
        capabilities.setCapability("appium:automationName", "uiautomator2");

        // Pcloudy-specific options
        HashMap<String, Object> PcloudyOptions = new HashMap<String, Object>();
        PcloudyOptions.put("Pcloudy_Username", "your.email@example.com");
        PcloudyOptions.put("Pcloudy_ApiKey", "your_api_key_here");
        PcloudyOptions.put("Pcloudy_DeviceFullName", "GOOGLE_Pixel10_Android_16.0.0_8fcb5");
        PcloudyOptions.put("Pcloudy_WildNet", false);
        PcloudyOptions.put("Pcloudy_EnableVideo", true);
        PcloudyOptions.put("Pcloudy_EnablePerformanceData", true);
        PcloudyOptions.put("Pcloudy_EnableDeviceLogs", false);

        // Specify Appium version
        PcloudyOptions.put("appiumVersion", "2.0.0");  // or "3.0.0", "1.22.3", etc.

        capabilities.setCapability("Pcloudy:options", PcloudyOptions);

        // Connect to Pcloudy Appium hub
        AndroidDriver driver = new AndroidDriver(
            new URL("https://device.Pcloudy.com/appiumcloud/wd/hub"), 
            capabilities
        );

        // Your test code here

        driver.quit();
    }
}
```



### Appium 2.x
| Version | Release Date | EOL Date | Android Driver | iOS Driver | Notes |
|----|----|----|----|----|----|
| 2.0.0 | ⭐ Stable | \- | UiAutomator2 3.x | XCUITest 7.x | Recommended for production |
| 2.0.0-beta.71 | Sep 2024 | \- | UiAutomator2 3.x | XCUITest 7.x | Latest beta features |
| 2.0.0-beta.66 | Apr 2023 | \- | UiAutomator2 2.24.x | XCUITest 4.27.x | Older beta |

#### Appium 2.0.0 (Recommended)
Included Drivers:
- appium-uiautomator2-driver: 3.9.6
- appium-xcuitest-driver: 7.35.0
- appium-flutter-driver: 2.11.0
- appium-flutter-integration-driver: 1.1.3

Platform Support:
- ✅ Android 5.0 - 16.0
- ✅ iOS 10.0 - 18.0

Key Features:
- ✅ Plugin architecture
- ✅ Simplified setup
- ✅ Better performance
- ✅ Improved stability
- ✅ Modern automation patterns

### Appium 1.x (Legacy)
| Version | Release Date | EOL Date | Android Support | iOS Support | Notes |
|----|----|----|----|----|----|
| 1.22.3 | Apr 2022 | Dec 31, 2025 | ✅ Up to Android 12 | ✅ Up to iOS 15 | Final 1.x version |
| 1.22.2 | Jan 2022 | Dec 31, 2025 | ✅ Up to Android 12 | ✅ Up to iOS 15 | Legacy support |

⚠️ Important: Appium 1.x is end-of-life. Please migrate to Appium 2.0.0 or 3.x.

Limitations:
- ❌ Limited Android 13+ support
- ❌ Limited iOS 16+ support
- ❌ No new features
- ❌ No bug fixes

## 5. Platform Support Matrix
### Android Support

| Android Version | Appium 3.x | Appium 2.0.0 | Appium 1.22.x | Automation Name |
|----|----|----|----|----|
| Android 16.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 15.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 14.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 13.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 12.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 11.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 10.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 9.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 8.1 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 8.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 7.1 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 7.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 6.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator2 |
| Android 5.1 | ✅ Full | ✅ Full | ✅ Full | UiAutomator1 |
| Android 5.0 | ✅ Full | ✅ Full | ✅ Full | UiAutomator1 |

### iOS Support
| iOS Version | Appium 3.x | Appium 2.0.0 | Appium 1.22.x | Automation Name |
|----|----|----|----|----|
| iOS 18.0 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 17.5 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 17.0 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 16.6 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 16.0 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 15.7 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 15.0 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 14.8 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 14.0 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 13.7 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 13.0 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 12.5 | ✅ Full | ✅ Full | ✅ Full | XCUITest |
| iOS 11.4 | ✅ Full | ✅ Full | ✅ Full | XCUITest |

## 6. Capabilities Reference
### Complete Capability Example

```javascript title="Json"
import org.openqa.selenium.remote.DesiredCapabilities; 
import io.appium.java_client.android.AndroidDriver; 
import java.net.URL; 
import java.util.HashMap; 

DesiredCapabilities capabilities = new DesiredCapabilities(); 

// ============================================ 
// STANDARD APPIUM CAPABILITIES 
// ============================================ 

// Platform Capabilities 
capabilities.setCapability("appium:platformName", "Android");  // or "iOS" 
capabilities.setCapability("appium:platformVersion", "16.0.0"); 
capabilities.setCapability("appium:deviceName", "Google Pixel 10"); 
capabilities.setCapability("appium:automationName", "uiautomator2");  // or "XCUITest" for iOS 

// App Capabilities 
capabilities.setCapability("appium:app", "cloud://APP_ID");  // App uploaded to Pcloudy 
// OR 
capabilities.setCapability("appium:appPackage", "com.example.app"); 
capabilities.setCapability("appium:appActivity", ".MainActivity"); 

// Timeout Capabilities 
capabilities.setCapability("appium:newCommandTimeout", 600);  // seconds 
capabilities.setCapability("appium:launchTimeout", 90000);  // milliseconds 

// ============================================ 
// PCLOUDY-SPECIFIC OPTIONS 
// ============================================ 

HashMap<String, Object> PcloudyOptions = new HashMap<String, Object>(); 

// Authentication (Required) 
PcloudyOptions.put("Pcloudy_Username", "your.email@example.com"); 
PcloudyOptions.put("Pcloudy_ApiKey", "your_api_key_here"); 

// Device Selection (Required) 
PcloudyOptions.put("Pcloudy_DeviceFullName", "GOOGLE_Pixel10_Android_16.0.0_8fcb5"); 
// OR use device selection criteria 
PcloudyOptions.put("Pcloudy_DeviceName", "Pixel 10"); 
PcloudyOptions.put("Pcloudy_PlatformName", "Android"); 
PcloudyOptions.put("Pcloudy_PlatformVersion", "16.0.0"); 

// Appium Version (Recommended) 
PcloudyOptions.put("appiumVersion", "2.0.0");  // "2.0.0", "3.0.0", "1.22.3", etc. 

// Test Configuration 
PcloudyOptions.put("Pcloudy_BuildName", "MyApp_Build_123"); 
PcloudyOptions.put("Pcloudy_ProjectName", "MyApp_Tests"); 
PcloudyOptions.put("Pcloudy_TestName", "Login_Test"); 
PcloudyOptions.put("Pcloudy_Tags", "smoke,regression"); 

// Media Recording 
PcloudyOptions.put("Pcloudy_EnableVideo", true);  // Record session video 
PcloudyOptions.put("Pcloudy_EnableScreenshots", true);  // Take screenshots 

// Logging & Debugging 
PcloudyOptions.put("Pcloudy_EnableDeviceLogs", true);  // Device logs 
PcloudyOptions.put("Pcloudy_EnableNetworkLogs", true);  // Network traffic logs 
PcloudyOptions.put("Pcloudy_EnablePerformanceData", true);  // CPU, memory, battery 

// Network Simulation 
PcloudyOptions.put("Pcloudy_WildNet", false);  // Set true for network simulation 
PcloudyOptions.put("Pcloudy_NetworkProfile", "4G");  // 2G, 3G, 4G, 5G, LTE 

// Device Settings 
PcloudyOptions.put("Pcloudy_DeviceOrientation", "portrait");  // portrait, landscape 
PcloudyOptions.put("Pcloudy_Language", "en"); 
PcloudyOptions.put("Pcloudy_Timezone", "America/New_York"); 

// Advanced Options 
PcloudyOptions.put("Pcloudy_AutoWebView", true);  // Auto-switch to WebView 
PcloudyOptions.put("Pcloudy_AutoAcceptAlerts", true);  // Auto-accept system alerts 
PcloudyOptions.put("Pcloudy_SkipUninstall", false);  // Keep app after test 

// Apply Pcloudy options 
capabilities.setCapability("Pcloudy:options", PcloudyOptions); 

// ============================================ 
// CREATE DRIVER 
// ============================================ 

AndroidDriver driver = new AndroidDriver( 
    new URL("https://device.Pcloudy.com/appiumcloud/wd/hub"),  
    capabilities 
);
```

## 7. Version-Specific Features
### Appium 3.x Features
New in 3.x:

- ✅ Enhanced driver architecture
- ✅ Improved plugin system
- ✅ Better error messages
- ✅ Performance optimizations
- ✅ Simplified configuration

Example:

```java title="Java"
PcloudyOptions.put("appiumVersion", "3.0.0");
capabilities.setCapability("appium:settings[ignoreUnimportantViews]", true);
```

### Appium 2.x Features
New in 2.x:
- ✅ Plugin architecture
- ✅ Driver extensions
- ✅ Simplified setup
- ✅ Better logging
- ✅ Improved stability

Example:

```java title="Java"
PcloudyOptions.put("appiumVersion", "2.0.0");
capabilities.setCapability("appium:settings[allowInvisibleElements]", false);
```

### Appium 1.x Features
Legacy features:
- ⚠️ Basic automation
- ⚠️ Limited OS support
- ⚠️ Older driver versions

Example:

```java title="Java"
PcloudyOptions.put("appiumVersion", "1.22.3");
// Limited to Android 12 and iOS 15
```

## 8. Migration Guides
### Migrating from Appium 1.x to 2.x
#### Key Changes
1.  Driver Installation: Drivers are now separate packages
2.  Capabilities: Use appium: prefix for W3C compliance
3.  Server: Appium server runs differently

#### Migration Steps
Step 1: Update Appium Version

```java title="Java"
// OLD (Appium 1.x)
PcloudyOptions.put("appiumVersion", "1.22.3");

// NEW (Appium 2.x)
PcloudyOptions.put("appiumVersion", "2.0.0");
```

Step 2: Update Capabilities

```java title="Java"
// OLD (Appium 1.x) - No prefix
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName", "Pixel 10");

// NEW (Appium 2.x) - Use appium: prefix
capabilities.setCapability("appium:platformName", "Android");
capabilities.setCapability("appium:deviceName", "Pixel 10");
```

Step 3: Update Automation Name

```java title="Java"
// Ensure you're using modern automation names
capabilities.setCapability("appium:automationName", "uiautomator2"); // Android
capabilities.setCapability("appium:automationName", "XCUITest"); // iOS
```

Step 4: Test Thoroughly
- Run your test suite
- Check for deprecation warnings
- Verify all functionality works

### Migrating from Appium 2.x to 3.x
#### Key Changes
1.  Driver versions: Updated to latest
2.  Better performance: Improved speed
3.  Enhanced features: New capabilities

#### Migration Steps
Step 1: Update Version

```java title="Java"
PcloudyOptions.put("appiumVersion", "3.0.0");
```

Step 2: Review Capabilities
- Most Appium 2.x capabilities work in 3.x
- Check release notes for any deprecations

Step 3: Test & Validate
- Run tests on both versions
- Compare results
- Update as needed

## 9. Best Practices
### Version Selection
✅ DO:
- Use Appium 2.0.0 or 3.x for new projects
- Pin to specific version for stability
- Test new versions before production use
- Keep versions consistent across team

❌ DON'T:
- Use Appium 1.x for new projects
- Use beta versions in production
- Mix versions randomly
- Forget to update regularly

### Capability Configuration

```java title="Java"
// Good: Organized with comments
HashMap<String, Object> PcloudyOptions = new HashMap<String, Object>();

// Authentication
PcloudyOptions.put("Pcloudy_Username", "user@example.com");
PcloudyOptions.put("Pcloudy_ApiKey", "api_key");

// Device & Version
PcloudyOptions.put("Pcloudy_DeviceFullName", "device_name");
PcloudyOptions.put("appiumVersion", "2.0.0");

// Features
PcloudyOptions.put("Pcloudy_EnableVideo", true);
PcloudyOptions.put("Pcloudy_EnablePerformanceData", true);
```

### Testing Strategy
1.  Start with latest stable (Appium 2.0.0)
2.  Pin version in capabilities
3.  Monitor changelogs for updates
4.  Test before upgrading in production
5.  Have fallback plan to previous version

## FAQ
### Q1: Which Appium version should I use?
A: For new projects, use Appium 2.0.0 or 3.x. They provide the best compatibility and features.

### Q2: How do I know which version I'm using?
A: Check the appiumVersion capability in your test configuration, or check the Pcloudy dashboard session details.

### Q3: Can I use different versions for different tests?
A: Yes, specify appiumVersion in each test's capabilities.

### Q4: What happens if I don't specify appiumVersion?
A: Pcloudy uses the latest stable version (currently 2.0.0).

### Q5: When should I upgrade from Appium 1.x?
A: As soon as possible. Appium 1.x reaches EOL on December 31, 2025, and doesn't support Android 13+/iOS 16+ properly.

### Q6: Do I need to install Appium locally?
A: No, Pcloudy provides Appium servers in the cloud. Just specify the version in capabilities.

### Q7: Can I use custom Appium drivers?
A: Standard drivers (UiAutomator2, XCUITest, Flutter) are available. Contact support for custom drivers.

### Q8: How do I report issues with specific Appium versions?
A: Contact Pcloudy support with:
- Appium version used
- Error message
- Test code snippet
- Device details
