DeviceInfo Module

Complete API documentation for the DeviceInfo module.

Import

import { DeviceInfoModule } from 'react-native-nitro-device-info';

Core Device Information (9 APIs)

Synchronous properties providing instant access to basic device identity.

deviceId: string

Device model identifier.

const deviceId = DeviceInfoModule.deviceId;
// iOS: "iPhone14,2"
// Android: "SM-G998B"

brand: string

Device brand/manufacturer name.

const brand = DeviceInfoModule.brand;
// iOS: "Apple"
// Android: "Samsung", "Google", "OnePlus", etc.

model: string

Device model marketing name. Maps the hardware identifier to a human-readable name, falling back to a generic name for unknown devices.

const model = DeviceInfoModule.model;
// iOS: "iPhone 15 Pro", "iPad Air", "iPhone SE (3rd generation)"
// Android: Device-specific model name (e.g., "Pixel 7 Pro", "Galaxy S24")

systemName: string

Operating system name.

const systemName = DeviceInfoModule.systemName;
// iOS: "iOS" or "iPadOS"
// Android: "Android"

systemVersion: string

Operating system version string.

const systemVersion = DeviceInfoModule.systemVersion;
// iOS: "15.0", "16.2.1"
// Android: "12", "13", "14"

deviceType: DeviceType

Device type category.

const deviceType = DeviceInfoModule.deviceType;
// "Handset" | "Tablet" | "Tv" | "Desktop" | "GamingConsole" | "unknown"

uniqueId: string

Get unique device identifier.

const uniqueId = DeviceInfoModule.uniqueId;
// iOS: IDFV (Identifier for Vendor)
// Android: ANDROID_ID
// Example: "FCDBD8EF-62FC-4ECB-B2F5-92C9E79AC7F9"
  • iOS: Persists across app installs from the same vendor
  • Android: Usually persists across app installs

manufacturer: string

Get device manufacturer name.

const manufacturer = DeviceInfoModule.manufacturer;
// iOS: "Apple"
// Android: "Samsung", "Google", "Xiaomi", etc.

deviceName: string

Get user-assigned device name.

const deviceName = DeviceInfoModule.deviceName;
// Example: "John's iPhone", "My Galaxy S21"

Device Capabilities (7 APIs)

Boolean checks for device features and hardware availability.

isTablet: boolean

Check if device is a tablet.

const isTablet = DeviceInfoModule.isTablet;
// iPad → true
// iPhone → false
  • iOS: Based on UIDevice.userInterfaceIdiom
  • Android: Based on smallest screen width >= 600dp

isEmulator: boolean

Check if running in simulator/emulator.

const isEmulator = DeviceInfoModule.isEmulator;

deviceYearClass: number

Get estimated device year class based on hardware specifications.

const yearClass = DeviceInfoModule.deviceYearClass;

if (yearClass >= 2020) {
  enableHighEndFeatures();
} else if (yearClass >= 2015) {
  enableStandardFeatures();
} else {
  enableLowEndFeatures();
}

Returns an estimated "year class" representing when this device's hardware would have been considered flagship/high-end. Based on extended Facebook device-year-class algorithm updated for 2025.

RAM → Year Class mapping:

RAMYear ClassExample Devices
≤2 GB2013Budget devices
≤4 GB2015Mid-range 2015-2016
≤6 GB2017Flagship 2017-2018
≤8 GB2019Flagship 2019-2020
≤12 GB2021Flagship 2021-2022
≤16 GB2023Flagship 2023-2024
>16 GB2025Latest flagships

isCameraPresent: boolean

Check if camera is available.

const hasCamera = DeviceInfoModule.isCameraPresent;

isPinOrFingerprintSet: boolean

Check if PIN, fingerprint, or Face ID is configured.

const isSecure = DeviceInfoModule.isPinOrFingerprintSet;

isHardwareKeyStoreAvailable: boolean

Check if hardware-backed cryptographic key storage is available on the device.

const hasHardwareKeyStore = DeviceInfoModule.isHardwareKeyStoreAvailable;

if (hasHardwareKeyStore) {
  console.log('Hardware-backed key storage available');
  // Safe to store sensitive cryptographic keys
} else {
  console.log('No hardware-backed storage');
  // Use alternative security measures
}

Platform: Android, iOS (except for iOS Emulator)

isLowRamDevice: boolean

Check if device is classified as low RAM device.

const isLowRam = DeviceInfoModule.isLowRamDevice;
// Android API 19+: true/false
// iOS: false

Platform: Android API 19+


Display & Screen (7 APIs)

Screen and display-related properties.

getHasNotch(): boolean

Check if device has a display notch.

const hasNotch = DeviceInfoModule.getHasNotch();
// iPhone X, 11, 12, 13 → true
// iPhone SE, 8 → false
  • iOS only - Detects iPhone X and later models
  • Android: Always returns false

getHasDynamicIsland(): boolean

Check if device has Dynamic Island.

const hasDynamicIsland = DeviceInfoModule.getHasDynamicIsland();
// iPhone 14 Pro, 15 Pro → true
// iPhone 14, 13 → false
  • iOS 16+ only - iPhone 14 Pro and later
  • Android: Always returns false

isDisplayZoomed: boolean

Check if iOS Display Zoom is enabled.

const isZoomed = DeviceInfoModule.isDisplayZoomed;
// iOS: true/false based on display zoom setting
// Android: false

Platform: iOS only

getIsLandscape(): boolean

Check if device is in landscape orientation.

const isLandscape = DeviceInfoModule.getIsLandscape();

getBrightness(): number

Get current screen brightness level (0.0 to 1.0).

const brightness = DeviceInfoModule.getBrightness();
console.log(`Brightness: ${(brightness * 100).toFixed(0)}%`);
// iOS: 0.0 to 1.0
// Android: -1

Platform: iOS only

getFontScale(): number

Get current font scale multiplier.

const fontScale = DeviceInfoModule.getFontScale();
// Example: 1.0 (normal), 1.2 (large), 0.85 (small)

isLiquidGlassAvailable: boolean

Check if the liquid glass effect is available on the device.

const hasLiquidGlass = DeviceInfoModule.isLiquidGlassAvailable;

if (hasLiquidGlass) {
  console.log('Liquid glass effect available');
  // Can use new iOS 26+ design features
} else {
  console.log('Liquid glass not available');
  // Fallback to standard UI
}

Platform: iOS 26.0+


System Resources (7 APIs)

Memory, storage, and uptime information.

totalMemory: number

Get total device RAM in bytes.

const totalMemory = DeviceInfoModule.totalMemory;
// Example: 6442450944 (6 GB)
console.log(`Total RAM: ${(totalMemory / 1024 / 1024 / 1024).toFixed(1)}GB`);

getUsedMemory(): number

Get current app memory usage in bytes.

const usedMemory = DeviceInfoModule.getUsedMemory();
// Example: 134217728 (128 MB)
console.log(`Used Memory: ${(usedMemory / 1024 / 1024).toFixed(0)}MB`);

maxMemory: number

Get maximum memory available to app (in bytes).

const maxMemory = DeviceInfoModule.maxMemory;
// Android: max heap size
// iOS: -1

Platform: Android only

totalDiskCapacity: number

Get total internal storage size in bytes.

const totalDisk = DeviceInfoModule.totalDiskCapacity;
// Example: 128849018880 (120 GB)
console.log(`Total Storage: ${(totalDisk / 1024 / 1024 / 1024).toFixed(0)}GB`);

getFreeDiskStorage(): number

Get available free storage space in bytes.

const freeDisk = DeviceInfoModule.getFreeDiskStorage();
// Example: 51539607552 (48 GB)
console.log(`Free Storage: ${(freeDisk / 1024 / 1024 / 1024).toFixed(1)}GB`);

getUptime(): number

Get device uptime since boot in milliseconds, excluding deep sleep time.

const uptime = DeviceInfoModule.getUptime();
const hours = Math.floor(uptime / 1000 / 60 / 60);
const minutes = Math.floor((uptime / 1000 / 60) % 60);
console.log(`Device running for ${hours}h ${minutes}m`);

Platform behavior:

  • iOS: Uses systemUptime (excludes deep sleep)
  • Android: Uses uptimeMillis() (excludes deep sleep)

Both platforms return consistent "active time" since boot, matching the behavior of expo-device.getUptimeAsync().

startupTime: number

Get device boot time (milliseconds since epoch).

const bootTime = DeviceInfoModule.startupTime;
const bootDate = new Date(bootTime);
console.log(`Device booted: ${bootDate.toLocaleString()}`);

Note: Returns boot time, NOT app startup time


Battery & Power (4 APIs)

Battery and power state information.

getBatteryLevel(): number

Get current battery level (0.0 to 1.0).

const batteryLevel = DeviceInfoModule.getBatteryLevel();
console.log(`Battery: ${(batteryLevel * 100).toFixed(0)}%`);
// Output: "Battery: 75%"

getPowerState(): PowerState

Get comprehensive power state information.

const powerState = DeviceInfoModule.getPowerState();
console.log(`Battery: ${(powerState.batteryLevel * 100).toFixed(0)}%`);
console.log(`Status: ${powerState.batteryState}`);
console.log(`Low Power Mode: ${powerState.lowPowerMode}`); // iOS only

PowerState interface:

interface PowerState {
  batteryLevel: number; // 0.0 to 1.0
  batteryState: BatteryState; // 'unknown' | 'unplugged' | 'charging' | 'full'
  lowPowerMode: boolean; // iOS only
}

getIsBatteryCharging(): boolean

Check if battery is currently charging.

const isCharging = DeviceInfoModule.getIsBatteryCharging();

isLowBatteryLevel(threshold: number): boolean

Check if battery level is below threshold.

const isLowBattery = DeviceInfoModule.isLowBatteryLevel(0.2); // 20%
if (isLowBattery) {
  console.log('Battery is low, please charge');
}

Application Metadata (9 APIs)

App bundle and version information.

version: string

Get application version string.

const version = DeviceInfoModule.version;
// Example: "1.2.3"

buildNumber: string

Get application build number.

const buildNumber = DeviceInfoModule.buildNumber;
// Example: "42" or "20231025"

bundleId: string

Get bundle ID (iOS) or package name (Android).

const bundleId = DeviceInfoModule.bundleId;
// Example: "com.company.app"

applicationName: string

Get application display name.

const appName = DeviceInfoModule.applicationName;
// Example: "My Awesome App"

readableVersion: string

Get human-readable version string (version.buildNumber).

const readableVersion = DeviceInfoModule.readableVersion;
// Example: "1.2.3.42"

getFirstInstallTime(): Promise<number>

Get timestamp when app was first installed (ms since epoch).

const installTime = await DeviceInfoModule.getFirstInstallTime();
const installDate = new Date(installTime);
console.log(`Installed: ${installDate.toLocaleDateString()}`);

Performance: ~10-30ms

getLastUpdateTime(): Promise<number>

Get timestamp of most recent app update (ms since epoch).

const updateTime = await DeviceInfoModule.getLastUpdateTime();
const updateDate = new Date(updateTime);
console.log(`Last Updated: ${updateDate.toLocaleDateString()}`);

Performance: ~10-30ms Note: Returns -1 on iOS

firstInstallTimeSync: number

Synchronous variant (uses cached value from module initialization).

const firstInstallTimeSync = DeviceInfoModule.firstInstallTimeSync;

lastUpdateTimeSync: number

Synchronous variant (returns -1 on iOS).

const lastUpdateTimeSync = DeviceInfoModule.lastUpdateTimeSync;

Network (6 APIs)

Network connectivity APIs (excluding carrier).

getIpAddress(): Promise<string>

Get device local IP address.

const ipAddress = await DeviceInfoModule.getIpAddress();
// Example: "192.168.1.100", "10.0.0.5"

Performance: ~20-50ms

getIpAddressSync(): string

Synchronous variant (with 5-second cache).

const ipAddressSync = DeviceInfoModule.getIpAddressSync();

getMacAddress(): Promise<string>

Get device MAC address.

const macAddress = await DeviceInfoModule.getMacAddress();
// iOS: "02:00:00:00:00:00" (hardcoded since iOS 7 for privacy)
// Android: "00:11:22:33:44:55" (actual MAC)

Performance: ~20-50ms

getMacAddressSync(): string

Synchronous variant.

const macAddressSync = DeviceInfoModule.getMacAddressSync();

getUserAgent(): Promise<string>

Get HTTP User-Agent string.

const userAgent = await DeviceInfoModule.getUserAgent();
// Example: "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) ..."

Performance:

  • iOS: 100-500ms (requires WebView initialization, cached after first call)
  • Android: sync capable

getIsAirplaneMode(): boolean

Check if airplane mode is enabled.

const isAirplaneMode = DeviceInfoModule.getIsAirplaneMode();
// Android: true/false
// iOS: false (not available)

Platform: Android only


Carrier Information (7 APIs)

Cellular carrier data for telecom apps, analytics, and geo-detection.

getCarrier(): Promise<string>

Get cellular carrier name.

const carrier = await DeviceInfoModule.getCarrier();
// Example: "Verizon", "AT&T", "T-Mobile"

Performance: ~20-50ms

getCarrierSync(): string

Synchronous variant (with 5-second cache).

const carrierSync = DeviceInfoModule.getCarrierSync();

carrierAllowsVOIP: boolean

Check if carrier allows VoIP calls on its network.

const allowsVOIP = DeviceInfoModule.carrierAllowsVOIP;
// iOS: true/false based on carrier policy
// Android: always true (no equivalent API)

Platform: iOS only (always returns true on Android)

carrierIsoCountryCode: string

Get ISO 3166-1 alpha-2 country code for the carrier.

const countryCode = DeviceInfoModule.carrierIsoCountryCode;
// Example: "US", "KR", "JP", "DE"
// Returns "" if no SIM card

mobileCountryCode: string

Get Mobile Country Code (MCC) per ITU-T Recommendation E.212.

const mcc = DeviceInfoModule.mobileCountryCode;
// Example: "310" (USA), "450" (Korea), "440" (Japan)
// Returns "" if no carrier

Common MCC values:

CountryMCC
USA310-316
Korea450
Japan440-441
China460
Germany262

mobileNetworkCode: string

Get Mobile Network Code (MNC) that identifies the carrier within a country.

const mnc = DeviceInfoModule.mobileNetworkCode;
// Example: "260" (T-Mobile US), "05" (SKT Korea)
// Returns "" if no carrier

mobileNetworkOperator: string

Get combined MCC + MNC string.

const operator = DeviceInfoModule.mobileNetworkOperator;
// Example: "310260" (T-Mobile US), "45005" (SKT Korea)
// Equivalent to: mobileCountryCode + mobileNetworkCode
// Returns "" if no carrier

Use cases:

  • Carrier-specific feature toggling
  • Regional content delivery
  • Telecom analytics
  • Fraud detection (geo-location verification)

Audio Accessories (4 APIs)

Audio device detection.

isHeadphonesConnected(): Promise<boolean>

Check if headphones are connected (wired or Bluetooth).

const hasHeadphones = await DeviceInfoModule.isHeadphonesConnected();

Performance: ~10-30ms

getIsHeadphonesConnected(): boolean

Synchronous variant.

const isHeadphonesConnected = DeviceInfoModule.getIsHeadphonesConnected();

getIsWiredHeadphonesConnected(): boolean

Check if wired headphones are connected.

const hasWiredHeadphones = DeviceInfoModule.getIsWiredHeadphonesConnected();

getIsBluetoothHeadphonesConnected(): boolean

Check if Bluetooth headphones are connected.

const hasBluetoothHeadphones = DeviceInfoModule.getIsBluetoothHeadphonesConnected();

Location Services (3 APIs)

Location provider information.

isLocationEnabled(): Promise<boolean>

Check if location services are enabled.

const isLocationEnabled = await DeviceInfoModule.isLocationEnabled();

Performance: ~10-30ms

getIsLocationEnabled(): boolean

Synchronous variant.

const isLocationEnabled = DeviceInfoModule.getIsLocationEnabled();

getAvailableLocationProviders(): string[]

Get list of enabled location providers.

const providers = DeviceInfoModule.getAvailableLocationProviders();
// ["gps", "network"]

Localization (1 API)

Language and regional settings.

systemLanguage: string

Get device system language in BCP 47 format.

const language = DeviceInfoModule.systemLanguage;
// iOS: "en-US", "ko-KR", "ja-JP", "zh-Hans-CN"
// Android: "en-US", "ko-KR", "ja-JP", "zh-Hans-CN"

Examples:

LanguageCode
English (US)en-US
Koreanko-KR
Japaneseja-JP
Simplified Chinesezh-Hans-CN
French (France)fr-FR
Germande-DE

Use Case:

const language = DeviceInfoModule.systemLanguage;

if (language.startsWith('ko')) {
  console.log('Korean device detected');
} else if (language.startsWith('ja')) {
  console.log('Japanese device detected');
}

CPU & Architecture (3 APIs)

Processor and ABI information.

supportedAbis: string[]

Get supported CPU architectures.

const abis = DeviceInfoModule.supportedAbis;
// iOS: ["arm64"]
// Android: ["arm64-v8a", "armeabi-v7a"]

supported32BitAbis: string[]

Get list of supported 32-bit ABIs.

const abis32 = DeviceInfoModule.supported32BitAbis;
// iOS: []
// Android API 21+: ["armeabi-v7a", "x86"]

Platform: Android API 21+, returns [] on iOS

supported64BitAbis: string[]

Get list of supported 64-bit ABIs.

const abis64 = DeviceInfoModule.supported64BitAbis;
// iOS: ["arm64"]
// Android API 21+: ["arm64-v8a", "x86_64"]

Android Platform (20+ APIs)

Android-specific APIs and build information.

apiLevel: number

Get Android API level.

const apiLevel = DeviceInfoModule.apiLevel;
// Android 12 → 31
// Android 13 → 33
// iOS → -1

Platform: Android only

Get Android navigation mode.

const navMode = DeviceInfoModule.navigationMode;
// Android with gesture nav → "gesture"
// Android with 3-button nav → "buttons"
// Android with 2-button nav → "twobuttons"
// iOS → "unknown"

Type: 'gesture' | 'buttons' | 'twobuttons' | 'unknown'

Platform: Android only (returns "unknown" on iOS)

Values:

ValueDescription
gestureFull gesture navigation (swipe-based)
buttonsTraditional 3-button navigation (Back, Home, Recent)
twobuttons2-button navigation (Back, Home with swipe up)
unknownCannot determine (always on iOS)

Use Case:

const navMode = DeviceInfoModule.navigationMode;

if (navMode === 'gesture') {
  // Avoid bottom gesture conflicts
  // Add extra bottom padding for bottom sheets
  console.log('Using gesture navigation - add extra padding');
} else if (navMode === 'buttons') {
  // Traditional navigation bar is present
  console.log('Using button navigation');
}

Note: Navigation mode detection requires Android 10 (API 29) or later. On older Android versions, returns "buttons" since gesture navigation was not available.

getHasGms(): boolean

Check if Google Mobile Services is available.

const hasGms = DeviceInfoModule.getHasGms();
// Android with Play Services → true
// Huawei devices without GMS → false
// iOS → false

Platform: Android only

getHasHms(): boolean

Check if Huawei Mobile Services is available.

const hasHms = DeviceInfoModule.getHasHms();
// Huawei devices → true
// Other Android/iOS → false

Platform: Android (Huawei devices) only

hasSystemFeature(feature: string): boolean

Check if specific system feature is available.

const hasNfc = DeviceInfoModule.hasSystemFeature('android.hardware.nfc');
// Android → true/false based on hardware
// iOS → false

Platform: Android only

Common features:

  • android.hardware.camera
  • android.hardware.nfc
  • android.hardware.bluetooth
  • android.hardware.wifi

systemAvailableFeatures: string[]

Get list of all available system features.

const features = DeviceInfoModule.systemAvailableFeatures;
// Android: ["android.hardware.camera", "android.hardware.nfc", ...]
// iOS: []

Platform: Android only

supportedMediaTypeList: string[]

Get list of supported media/codec types.

const mediaTypes = DeviceInfoModule.supportedMediaTypeList;
// Android: ["video/avc", "audio/mp4a-latm", ...]
// iOS: []

Platform: Android only

Android Build Information

Synchronous properties providing Android system build information.

Platform: Android only (all return "unknown" or default values on iOS)

const serialNumber = DeviceInfoModule.serialNumber; // Requires READ_PHONE_STATE on Android 8.0+
const androidId = DeviceInfoModule.androidId;
const previewSdkInt = DeviceInfoModule.previewSdkInt; // Android API 23+, 0 for release
const securityPatch = DeviceInfoModule.securityPatch; // Android API 23+, "YYYY-MM-DD"
const codename = DeviceInfoModule.codename; // "REL" for release
const incremental = DeviceInfoModule.incremental;
const board = DeviceInfoModule.board;
const bootloader = DeviceInfoModule.bootloader;
const device = DeviceInfoModule.device; // Board/platform name
const display = DeviceInfoModule.display; // Build display ID
const fingerprint = DeviceInfoModule.fingerprint; // Unique build identifier
const hardware = DeviceInfoModule.hardware;
const host = DeviceInfoModule.host; // Build host machine
const product = DeviceInfoModule.product;
const tags = DeviceInfoModule.tags; // Comma-separated
const type = DeviceInfoModule.type; // "user", "userdebug", "eng"
const baseOs = DeviceInfoModule.baseOs; // Android API 23+
const radioVersion = DeviceInfoModule.radioVersion;
const buildId = DeviceInfoModule.buildId;

iOS Platform (2 APIs)

iOS-specific APIs.

getDeviceToken(): Promise<string>

Get Apple DeviceCheck token.

try {
  const deviceToken = await DeviceInfoModule.getDeviceToken();
  console.log('DeviceCheck token:', deviceToken);
} catch (error) {
  console.error('DeviceCheck error:', error);
}

Performance: ~500-2000ms (network request to Apple servers) Platform: iOS 11+ only (throws error on Android)

syncUniqueId(): Promise<string>

Synchronize unique ID to iCloud Keychain.

const uniqueId = await DeviceInfoModule.syncUniqueId();
// iOS: Saves IDFV to Keychain (persists across reinstalls)
// Android: Returns getUniqueId() without Keychain sync

Performance: ~10-50ms (Keychain I/O) Platform: iOS (no-op on Android)


Installation & Distribution (3 APIs)

App installation and distribution metadata.

installerPackageName: string

Get package name of the app store that installed this app.

const installer = DeviceInfoModule.installerPackageName;
// iOS: "com.apple.AppStore", "com.apple.TestFlight"
// Android: "com.android.vending" (Play Store)

getInstallReferrer(): Promise<string>

Get install referrer information (Android Play Store).

const referrer = await DeviceInfoModule.getInstallReferrer();
// Android with Play Services: referrer data
// iOS: "unknown"

Performance: ~50-200ms (Play Services API call) Platform: Android only (requires Google Play Services)

isSideLoadingEnabled(): boolean

Check if sideloading (installing from unknown sources) is enabled.

const canSideload = DeviceInfoModule.isSideLoadingEnabled();

if (canSideload) {
  console.warn('Device allows sideloading - potential security risk');
}

Platform behavior difference:

  • Android 7 and below: Returns whether the device allows unknown sources globally (checks Settings.Global.INSTALL_NON_MARKET_APPS)
  • Android 8.0+: Returns whether THIS APP has permission to install other apps (per-app permission via canRequestPackageInstalls())
  • iOS: Always returns false (sideloading not possible without jailbreak)

Important: On Android 8.0+, even if the user has enabled "Install unknown apps" for other apps, this will return false unless they specifically granted permission to this app.

Use cases:

  • Security policy enforcement
  • Distribution channel detection
  • Enterprise deployment verification

Platform: Android (returns false on iOS)


Legacy Compatibility (2 APIs)

Deprecated APIs for backward compatibility.

totalDiskCapacityOld: number

Get total disk capacity using legacy Android API.

const totalDiskOld = DeviceInfoModule.totalDiskCapacityOld;
// Android: Uses old StatFs API (pre-Jelly Bean compatibility)
// iOS: Alias to totalDiskCapacity

getFreeDiskStorageOld(): number

Get free disk storage using legacy Android API.

const freeDiskOld = DeviceInfoModule.getFreeDiskStorageOld();
// Android: Uses old StatFs API (pre-Jelly Bean compatibility)
// iOS: Alias to getFreeDiskStorage()

Performance Notes

Synchronous Methods (<1ms)

All synchronous methods use cached values and return instantly:

  • Core device properties
  • Device capabilities
  • Display & screen
  • System resources (memory, disk)
  • Battery information
  • Application metadata
  • CPU & architecture

Asynchronous Methods

Performance varies by operation type:

  • Fast (10-30ms): Install times, location status, headphone detection
  • Medium (20-50ms): Network queries (IP, MAC, carrier)
  • Slow (100-500ms): UserAgent (iOS WebView init, cached after first call)
  • Very Slow (500-2000ms): DeviceCheck token (network request)

Caching

Network-related synchronous properties use 5-second caches:

  • getIpAddressSync()
  • getMacAddressSync()
  • getCarrierSync()

This provides fast access while keeping data reasonably fresh.


Platform Compatibility Matrix

FeatureiOSAndroidNotes
Core device info✅✅All platforms
Device capabilities✅✅All platforms
Display & screen✅✅Notch/Dynamic Island iOS only
System resources✅✅All platforms
Battery info✅✅Low power mode iOS only
Application metadata✅✅All platforms
Network✅✅MAC hardcoded on iOS 7+
Carrier info (MCC/MNC)✅✅Empty string if no SIM
carrierAllowsVOIP✅⚠️Android always returns true
Audio accessories✅✅All platforms
Location services✅✅All platforms
Localization✅✅BCP 47 format
CPU & architecture✅✅All platforms
Android platform❌✅Android only
iOS platform✅❌iOS only
Installation metadata✅✅All platforms
Legacy compatibility✅✅All platforms
getUptime✅✅Both exclude deep sleep
deviceYearClass✅✅Extended 2025 algorithm
isSideLoadingEnabled❌✅Android only (per-app on 8.0+)
Navigation mode❌✅Android only (API 29+)
getHasNotch/Dynamic Island✅❌iOS only
Hardware KeyStore✅✅All platforms
GMS/HMS detection❌✅Android only
DeviceCheck✅❌iOS 11+ only
Display Zoom✅❌iOS only
Brightness✅❌iOS only
Liquid Glass✅❌iOS 26.0+ only (requires Xcode 16+)
System features❌✅Android only
Media codecs❌✅Android only

Next Steps