HomeGuidesReferenceLearn

Reference version

ArchiveExpo SnackDiscord and ForumsNewsletter
This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 51).

Expo Network iconExpo Network

GitHub

npm

A library that provides access to the device's network such as its IP address, MAC address, and airplane mode status.

Android
iOS
Web

expo-network provides useful information about the device's network such as its IP address, MAC address, and airplane mode status.

Installation

Terminal
npx expo install expo-network

If you are installing this in an existing React Native app (bare workflow), start by installing expo in your project. Then, follow the additional instructions as mentioned by library's README under "Installation in bare React Native projects" section.

Configuration

On Android, this module requires permissions to access the network and Wi-Fi state. The permissions ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE are added automatically.

API

import * as Network from 'expo-network';

Hooks

Android
iOS
Web

useNetworkState()

Returns the current network state of the device. This method initiates a listener for network state changes and cleans up before unmounting.

Returns:

NetworkState

The current network state of the device, including connectivity and type.

Example

const networkState = useNetworkState();
console.log(`Current network type: ${networkState.type}`);

Methods

Android
iOS
Web

Network.getIpAddressAsync()

Gets the device's current IPv4 address. Returns 0.0.0.0 if the IP address could not be retrieved.

On web, this method uses the third-party ipify service to get the public IP address of the current device.

Returns:

Promise<string>

A Promise that fulfils with a string of the current IP address of the device's main network interface. Can only be IPv4 address.

Example

await Network.getIpAddressAsync();
// "92.168.32.44"
Android
iOS
Web

Network.getNetworkStateAsync()

Gets the device's current network connection state.

On web, navigator.connection.type is not available on browsers. So if there is an active network connection, the field type returns NetworkStateType.UNKNOWN. Otherwise, it returns NetworkStateType.NONE.

Returns:

Promise<NetworkState>

A Promise that fulfils with a NetworkState object.

Example

await Network.getNetworkStateAsync();
// {
//   type: NetworkStateType.CELLULAR,
//   isConnected: true,
//   isInternetReachable: true,
// }
Android

Network.isAirplaneModeEnabledAsync()

Tells if the device is in airplane mode.

Returns:

Promise<boolean>

Returns a Promise that fulfils with a boolean value for whether the device is in airplane mode or not.

Example

await Network.isAirplaneModeEnabledAsync();
// false

Event Subscriptions

Android
iOS
Web

Network.addNetworkStateListener(listener)

NameTypeDescription
listener(event: NetworkState) => void

Callback to execute when the network state changes. The callback is provided with a single argument that is an object containing information about the network state.


Adds a listener that will fire whenever the network state changes.

Returns:

EventSubscription

A subscription object with a remove function to unregister the listener.

Example

const subscription = addNetworkStateListener(({ type, isConnected, isInternetReachable }) => {
  console.log(`Network type: ${type}, Connected: ${isConnected}, Internet Reachable: ${isInternetReachable}`);
});

Types

Android
iOS
Web

NetworkState

NameTypeDescription
isConnected
(optional)
boolean

If there is an active network connection. Note that this does not mean that internet is reachable. This field is false if the type is either Network.NetworkStateType.NONE or Network.NetworkStateType.UNKNOWN, true otherwise.

isInternetReachable
(optional)
boolean

If the internet is reachable with the currently active network connection. On Android, this depends on NetInfo.isConnected() (API level < 29) or ConnectivityManager.getActiveNetwork() (API level >= 29). On iOS, this value will always be the same as isConnected.

type
(optional)
NetworkStateType

A NetworkStateType enum value that represents the current network connection type.

Android
iOS
Web

NetworkStateEvent

Type: NetworkState

Represents an event that provides the updated network state when there is a change in the network status. This is passed as the argument to listeners registered with addNetworkStateListener().

Enums

Android
iOS
Web

NetworkStateType

An enum of the different types of devices supported by Expo.

NetworkStateType Values

Only for:
Android

BLUETOOTH

NetworkStateType.BLUETOOTH = "BLUETOOTH"

Active network connection over Bluetooth.

Only for:
Android
iOS

CELLULAR

NetworkStateType.CELLULAR = "CELLULAR"

Active network connection over mobile data or DUN-specific mobile connection when setting an upstream connection for tethering.

Only for:
Android
iOS

ETHERNET

NetworkStateType.ETHERNET = "ETHERNET"

Active network connection over Ethernet.

NONE

NetworkStateType.NONE = "NONE"

No active network connection detected.

Only for:
Android

OTHER

NetworkStateType.OTHER = "OTHER"

Active network connection over other network connection types.

UNKNOWN

NetworkStateType.UNKNOWN = "UNKNOWN"

The connection type could not be determined.

Only for:
Android

VPN

NetworkStateType.VPN = "VPN"

Active network connection over VPN.

Only for:
Android
iOS

WIFI

NetworkStateType.WIFI = "WIFI"

Active network connection over Wi-Fi.

Only for:
Android

WIMAX

NetworkStateType.WIMAX = "WIMAX"

Active network connection over WiMAX.

Error codes

CodeDescription
ERR_NETWORK_IP_ADDRESSOn Android, there may be an unknown Wi-Fi host when trying to access WifiManager in getIpAddressAsync. On iOS, no network interfaces could be retrieved.
ERR_NETWORK_UNDEFINED_INTERFACEAn undefined interfaceName was passed as an argument in getMacAddressAsync.
ERR_NETWORK_SOCKET_EXCEPTIONAn error was encountered in creating or accessing the socket in getMacAddressAsync.
ERR_NETWORK_INVALID_PERMISSION_INTERNETThere are invalid permissions for android.permission.ACCESS_WIFI_STATE in getMacAddressAsync.
ERR_NETWORK_NO_ACCESS_NETWORKINFOUnable to access network information