---
description: Capacitor plugin to access network information such as connection status and type, and to listen for network changes on Android, iOS, and the web.
title: Capacitor Network Plugin for Android, iOS & Web - Capawesome
image: https://capawesome.io/docs/assets/images/social/sdks/capacitor/network.png
---

<!doctype html> 

[Skip to content ](#capacitor-network-plugin) 

[📲 Introducing **Build Sharing** — get your builds onto testers' devices with a link & QR code. No account required. ](/blog/share-mobile-app-builds-with-testers/) 

* [ SDKs ](/docs/sdks/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Geofences ](/docs/sdks/capacitor/geofences/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Health ](/docs/sdks/capacitor/health/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Intercom ](/docs/sdks/capacitor/intercom/)
* [ Intune ](/docs/sdks/capacitor/intune/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ LLM ](/docs/sdks/capacitor/llm/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ MapLibre ](/docs/sdks/capacitor/maplibre/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* Network [ Network ](/docs/sdks/capacitor/network/)
* [ API ](#api)
* [ Enums ](#enums)
* [ Network Information ](#network-information)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ License ](#license)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Tauri ](/docs/sdks/capacitor/tauri/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Watch ](/docs/sdks/capacitor/watch/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ YouTube Player ](/docs/sdks/capacitor/youtube-player/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Set Up Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Notifications
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Network Restrictions ](/docs/cloud/organizations/network-restrictions/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ API ](#api)
* [ Enums ](#enums)
* [ Network Information ](#network-information)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ License ](#license)

Build and Ship Mobile Apps Faster

Cloud builds, OTA live updates, and automated store releases — everything your mobile team needs in one platform.

[Start for free ](https://console.cloud.capawesome.io/?utm%5Fsource=docs&utm%5Fmedium=sidebar%5Fcta&utm%5Fcampaign=docs%5Fcta) [See our plans ](https://capawesome.io/pricing/?utm%5Fsource=docs&utm%5Fmedium=sidebar%5Fcta&utm%5Fcampaign=docs%5Fcta) 

# Capacitor Network Plugin[¶](#capacitor-network-plugin "Permanent link")

Capacitor plugin to access network information.

[ ![Deliver Live Updates to your Capacitor app with Capawesome Cloud](../../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](https://cloud.capawesome.io/) 

## Features[¶](#features "Permanent link")

The Capacitor Network plugin is one of the most complete network information solutions for Capacitor apps. Here are some of the key features:

* 📶 **Network status**: Read whether the device is connected and how (Wi-Fi, cellular, ethernet, VPN).
* 🌍 **Internet reachability**: Detect whether the connection has verified access to the internet (Android).
* 💸 **Data saving & cost**: Detect whether the connection is constrained (Data Saver or Low Data Mode) or expensive (metered).
* 🛰️ **Satellite networks**: Detect satellite transport on Android 15+ and ultra-constrained connections on iOS 26+.
* ✈️ **Airplane mode**: Read whether the airplane mode is enabled (Android).
* 👂 **Change events**: Listen for changes to the network status.
* 🌐 **Web support**: Read the network status on the web.
* 🤝 **Compatibility**: Works alongside the [Wifi](https://capawesome.io/docs/sdks/capacitor/wifi/) plugin.
* 📦 **CocoaPods & SPM**: Supports CocoaPods and Swift Package Manager for iOS.
* 🔁 **Up-to-date**: Always supports the latest Capacitor version.

Missing a feature? Just [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues) and we'll take a look!

## Use Cases[¶](#use-cases "Permanent link")

The Network plugin is typically used whenever an app needs to react to the device's connectivity, for example:

* **Offline detection**: Show an offline banner or disable network-dependent features when the connection is lost.
* **Conditional downloads**: Only download large files when the device is connected via Wi-Fi instead of a cellular network.
* **Reliable syncing**: On Android, check whether the connection has verified internet access before starting a sync, avoiding false positives caused by captive portals or VPNs.
* **Airplane mode hints**: On Android, detect that airplane mode is enabled and inform the user why no connection is available.

## Compatibility[¶](#compatibility "Permanent link")

| Plugin Version | Capacitor Version | Status         |
| -------------- | ----------------- | -------------- |
| 0.x.x          | \>=8.x.x          | Active support |

## Guides[¶](#guides "Permanent link")

* [How to Detect the Network Status in Capacitor](https://capawesome.io/blog/how-to-detect-the-network-status-in-a-capacitor-app/): Check the connection type, listen for changes, and handle offline and metered connections.
* [How to Detect Satellite Networks in Capacitor](https://capawesome.io/blog/how-to-detect-satellite-networks-in-a-capacitor-app/): Detect satellite and ultra-constrained networks on Android 15+ and iOS 26 and adapt to limited bandwidth.

## Installation[¶](#installation "Permanent link")

You can use our **AI-Assisted Setup** to install the plugin. Add the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:

`[](#%5F%5Fcodelineno-0-1)npx skills add capawesome-team/skills --skill capacitor-plugins
`

Then use the following prompt:

`` [](#%5F%5Fcodelineno-1-1) Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-network` plugin in my project.
 ``

If you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:

`[](#%5F%5Fcodelineno-2-1)npm install @capawesome/capacitor-network
[](#%5F%5Fcodelineno-2-2)npx cap sync
`

On **Android**, the plugin declares the [ACCESS\_NETWORK\_STATE](https://developer.android.com/reference/android/Manifest.permission#ACCESS%5FNETWORK%5FSTATE) permission in its manifest, so no additional configuration is required.

## Configuration[¶](#configuration "Permanent link")

No configuration required for this plugin.

## Usage[¶](#usage "Permanent link")

The following examples show how to get the current network status, check whether airplane mode is enabled, and listen for changes to the network status.

### Get the current network status[¶](#get-the-current-network-status "Permanent link")

Read whether the device is currently connected, the type of the connection (e.g. Wi-Fi or cellular) and, on Android, whether the connection has verified access to the internet:

`[](#%5F%5Fcodelineno-3-1)import { Network } from '@capawesome/capacitor-network';
[](#%5F%5Fcodelineno-3-2)
[](#%5F%5Fcodelineno-3-3)const getStatus = async () => {
[](#%5F%5Fcodelineno-3-4)  const status = await Network.getStatus();
[](#%5F%5Fcodelineno-3-5)  return status;
[](#%5F%5Fcodelineno-3-6)};
`

### Detect satellite networks[¶](#detect-satellite-networks "Permanent link")

Read whether the device is connected via a satellite network. Only available on Android:

`[](#%5F%5Fcodelineno-4-1)import { ConnectionType, Network } from '@capawesome/capacitor-network';
[](#%5F%5Fcodelineno-4-2)
[](#%5F%5Fcodelineno-4-3)const isSatellite = async () => {
[](#%5F%5Fcodelineno-4-4)  const { connectionType } = await Network.getStatus();
[](#%5F%5Fcodelineno-4-5)  return connectionType === ConnectionType.Satellite;
[](#%5F%5Fcodelineno-4-6)};
`

Android only uses constrained satellite networks for apps that identify themselves as optimized for them. If your app is optimized for extremely limited bandwidth and variable latency, add the following element to the `application` element in your `AndroidManifest.xml`:

`[](#%5F%5Fcodelineno-5-1)<meta-data
[](#%5F%5Fcodelineno-5-2)  android:name="android.telephony.PROPERTY_SATELLITE_DATA_OPTIMIZED"
[](#%5F%5Fcodelineno-5-3)  android:value="PACKAGE_NAME"
[](#%5F%5Fcodelineno-5-4)/>
`

Replace `PACKAGE_NAME` with your app's package name. This plugin does not add this element automatically, because each app must decide whether it is suitable for constrained satellite access. Push notifications must additionally be sent with the `bandwidth_constrained_ok` flag to be delivered on such a network. See [Constrained satellite networks](https://developer.android.com/develop/connectivity/satellite/constrained-networks) for more information.

On **iOS**, carrier-provided satellite connections are reported as `CELLULAR` with `ultraConstrained` set to `true`, because Apple does not expose satellite as a connection type.

### Detect ultra-constrained networks[¶](#detect-ultra-constrained-networks "Permanent link")

Read whether the connection is severely limited in bandwidth, such as a carrier-provided satellite network. Only available on Android and iOS 26+:

`[](#%5F%5Fcodelineno-6-1)import { Network } from '@capawesome/capacitor-network';
[](#%5F%5Fcodelineno-6-2)
[](#%5F%5Fcodelineno-6-3)const isUltraConstrained = async () => {
[](#%5F%5Fcodelineno-6-4)  const { ultraConstrained } = await Network.getStatus();
[](#%5F%5Fcodelineno-6-5)  return ultraConstrained;
[](#%5F%5Fcodelineno-6-6)};
`

On **Android**, this is `true` on satellite networks and on networks that the system reports as bandwidth-constrained. Satellite networks are always reported as ultra-constrained, while bandwidth-constraint detection requires Android 16+ (API level 36) or [U Extensions](https://developer.android.com/guide/sdk-extensions) 16+, which can be present on eligible devices running Android 14 or later.

On **iOS**, detecting this state requires no entitlement. However, if your app wants to transfer data over such a network, it must allow this per request (see [allowsUltraConstrainedNetworkAccess](https://developer.apple.com/documentation/foundation/urlrequest/allowsultraconstrainednetworkaccess)) and may need the [com.apple.developer.networking.carrier-constrained.appcategory](https://developer.apple.com/documentation/bundleresources/entitlements/com.apple.developer.networking.carrier-constrained.appcategory) entitlement to be allowed on all carriers. This plugin neither adds entitlements nor modifies your `URLSession` or `NWParameters` configuration. See [Configuring your app for ultra-constrained networks](https://developer.apple.com/documentation/bundleresources/configuring-your-app-for-ultra-constrained-networks) for more information.

### Check whether airplane mode is enabled[¶](#check-whether-airplane-mode-is-enabled "Permanent link")

Read whether the airplane mode is currently enabled. Only available on Android:

`[](#%5F%5Fcodelineno-7-1)import { Network } from '@capawesome/capacitor-network';
[](#%5F%5Fcodelineno-7-2)
[](#%5F%5Fcodelineno-7-3)const isAirplaneModeEnabled = async () => {
[](#%5F%5Fcodelineno-7-4)  const { enabled } = await Network.isAirplaneModeEnabled();
[](#%5F%5Fcodelineno-7-5)  return enabled;
[](#%5F%5Fcodelineno-7-6)};
`

### Listen for changes to the network status[¶](#listen-for-changes-to-the-network-status "Permanent link")

Get notified whenever the network status of the device changes. The device is only observed while at least one listener is attached:

`[](#%5F%5Fcodelineno-8-1)import { Network } from '@capawesome/capacitor-network';
[](#%5F%5Fcodelineno-8-2)
[](#%5F%5Fcodelineno-8-3)const addNetworkStatusChangeListener = async () => {
[](#%5F%5Fcodelineno-8-4)  await Network.addListener('networkStatusChange', status => {
[](#%5F%5Fcodelineno-8-5)    console.log('Network status changed:', status);
[](#%5F%5Fcodelineno-8-6)  });
[](#%5F%5Fcodelineno-8-7)};
`

When you no longer need updates, remove all listeners:

`[](#%5F%5Fcodelineno-9-1)import { Network } from '@capawesome/capacitor-network';
[](#%5F%5Fcodelineno-9-2)
[](#%5F%5Fcodelineno-9-3)const removeAllListeners = async () => {
[](#%5F%5Fcodelineno-9-4)  await Network.removeAllListeners();
[](#%5F%5Fcodelineno-9-5)};
`

## API[¶](#api "Permanent link")

* [getStatus()](#getstatus)
* [isAirplaneModeEnabled()](#isairplanemodeenabled)
* [addListener('networkStatusChange', ...)](#addlistenernetworkstatuschange-)
* [removeAllListeners()](#removealllisteners)
* [Interfaces](#interfaces)
* [Enums](#enums)

### getStatus()[¶](#getstatus "Permanent link")

`[](#%5F%5Fcodelineno-10-1)getStatus() => Promise<GetStatusResult>
`

Get the current network status of the device.

Only available on Android, iOS and Web.

**Returns:** `Promise<[GetStatusResult](#getstatusresult)>`

**Since:** 0.1.0

---

### isAirplaneModeEnabled()[¶](#isairplanemodeenabled "Permanent link")

`[](#%5F%5Fcodelineno-11-1)isAirplaneModeEnabled() => Promise<IsAirplaneModeEnabledResult>
`

Get whether the airplane mode is currently enabled.

Only available on Android.

**Returns:** `Promise<[IsAirplaneModeEnabledResult](#isairplanemodeenabledresult)>`

**Since:** 0.1.0

---

### addListener('networkStatusChange', ...)[¶](#addlistenernetworkstatuschange "Permanent link")

`[](#%5F%5Fcodelineno-12-1)addListener(eventName: 'networkStatusChange', listenerFunc: (event: GetStatusResult) => void) => Promise<PluginListenerHandle>
`

Listen for changes to the network status of the device.

The device is only observed while at least one listener is attached.

Only available on Android, iOS and Web.

| Param            | Type                                                 |
| ---------------- | ---------------------------------------------------- |
| **eventName**    | 'networkStatusChange'                                |
| **listenerFunc** | (event: [GetStatusResult](#getstatusresult)) => void |

**Returns:** `Promise<[PluginListenerHandle](#pluginlistenerhandle)>`

**Since:** 0.1.0

---

### removeAllListeners()[¶](#removealllisteners "Permanent link")

`[](#%5F%5Fcodelineno-13-1)removeAllListeners() => Promise<void>
`

Remove all listeners for this plugin.

**Since:** 0.1.0

---

### Interfaces[¶](#interfaces "Permanent link")

#### GetStatusResult[¶](#getstatusresult "Permanent link")

| Prop                  | Type                              | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | Since |
| --------------------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **connected**         | boolean                           | Whether the device is currently connected to a network.                                                                                                                                                                                                                                                                                                                                                                                                                          | 0.1.0 |
| **connectionType**    | [ConnectionType](#connectiontype) | The type of the currently active network connection.                                                                                                                                                                                                                                                                                                                                                                                                                             | 0.1.0 |
| **internetReachable** | boolean \| null                   | Whether the active network connection has verified access to the internet. This is null on platforms that cannot validate internet access (iOS and Web), where connectivity does not guarantee reachability. Only available on Android.                                                                                                                                                                                                                                          | 0.1.0 |
| **constrained**       | boolean \| null                   | Whether the active network connection is subject to data saving restrictions, such as Data Saver on Android or Low Data Mode on iOS. This is false if the device is not connected to a network and null on browsers that do not expose this information.                                                                                                                                                                                                                         | 0.1.2 |
| **expensive**         | boolean \| null                   | Whether the active network connection is considered expensive, for example a metered Wi-Fi or cellular network. This is false if the device is not connected to a network and null on platforms that cannot determine the cost of the connection (Web).                                                                                                                                                                                                                          | 0.1.2 |
| **ultraConstrained**  | boolean \| null                   | Whether the active network connection is severely limited in bandwidth, such as a carrier-provided satellite network. This is false if the device is not connected to a network and null on platforms that cannot determine this (Web and iOS below 26). On Android, satellite networks are always reported as ultra-constrained. Detecting other bandwidth-constrained networks requires Android 16+ (API level 36) or U Extensions 16+. Only available on Android and iOS 26+. | 0.1.2 |

#### IsAirplaneModeEnabledResult[¶](#isairplanemodeenabledresult "Permanent link")

| Prop        | Type    | Description                                     | Since |
| ----------- | ------- | ----------------------------------------------- | ----- |
| **enabled** | boolean | Whether the airplane mode is currently enabled. | 0.1.0 |

#### PluginListenerHandle[¶](#pluginlistenerhandle "Permanent link")

| Prop       | Type                |
| ---------- | ------------------- |
| **remove** | () => Promise<void> |

### Enums[¶](#enums "Permanent link")

#### ConnectionType[¶](#connectiontype "Permanent link")

| Members       | Value       | Description                                                                 | Since |
| ------------- | ----------- | --------------------------------------------------------------------------- | ----- |
| **Cellular**  | 'CELLULAR'  | The device is connected via a cellular network.                             | 0.1.0 |
| **Ethernet**  | 'ETHERNET'  | The device is connected via a wired ethernet network.                       | 0.1.0 |
| **None**      | 'NONE'      | The device is not connected to any network.                                 | 0.1.0 |
| **Satellite** | 'SATELLITE' | The device is connected via a satellite network. Only available on Android. | 0.1.2 |
| **Unknown**   | 'UNKNOWN'   | The type of the network connection could not be determined.                 | 0.1.0 |
| **Vpn**       | 'VPN'       | The device is connected via a virtual private network (VPN).                | 0.1.0 |
| **Wifi**      | 'WIFI'      | The device is connected via a Wi-Fi network.                                | 0.1.0 |

## Network Information[¶](#network-information "Permanent link")

Keep the following platform differences in mind when accessing network information:

* **Android**: The network status is read from the [ConnectivityManager](https://developer.android.com/reference/android/net/ConnectivityManager). The `internetReachable` property reflects the [NET\_CAPABILITY\_VALIDATED](https://developer.android.com/reference/android/net/NetworkCapabilities#NET%5FCAPABILITY%5FVALIDATED) capability, which fixes false positives when a VPN or captive portal is active.
* **iOS**: The network status is read from the [NWPathMonitor](https://developer.apple.com/documentation/network/nwpathmonitor) of the Network framework. The `internetReachable` property is always `null` because iOS cannot distinguish validated internet access from mere connectivity. VPN connections are reported as `UNKNOWN`. The `isAirplaneModeEnabled()` method is not available because there is no public API for it.
* **Web**: The network status is read from [navigator.onLine](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine) and the [Network Information API](https://developer.mozilla.org/en-US/docs/Web/API/Network%5FInformation%5FAPI) (where supported). The `internetReachable` property is always `null`. The `isAirplaneModeEnabled()` method is not available.

## FAQ[¶](#faq "Permanent link")

### How is this plugin different from other similar plugins?[¶](#how-is-this-plugin-different-from-other-similar-plugins "Permanent link")

It reports connectivity and the connection type (Wi-Fi, cellular, ethernet, or VPN) on Android, iOS, and the web, and on Android it adds verified internet reachability that avoids false positives from captive portals or VPNs, plus an airplane-mode check. You can read the status once or listen for change events, with the device observed only while a listener is attached, all through a fully typed API with typed connection-type enums. It supports both CocoaPods and Swift Package Manager on iOS, is honest about platform limits by returning `null` where reachability cannot be validated, and is actively maintained against the latest Capacitor and OS versions.

### What is the difference between `connected` and `internetReachable`?[¶](#what-is-the-difference-between-connected-and-internetreachable "Permanent link")

The `connected` property tells you whether the device is connected to any network, while `internetReachable` tells you whether that connection has verified access to the internet. A device can be connected to a network without actually reaching the internet, for example behind a captive portal or when a VPN is active. The `internetReachable` property is only available on Android, where it reflects the `NET_CAPABILITY_VALIDATED` capability of the connection.

### Why is `internetReachable` always `null` on iOS and Web?[¶](#why-is-internetreachable-always-null-on-ios-and-web "Permanent link")

iOS and the Web platform cannot distinguish validated internet access from mere network connectivity, so the plugin returns `null` instead of a potentially misleading value. On these platforms, being connected to a network does not guarantee that the internet is reachable. See the [Network Information](#network-information) section for the platform-specific details.

### What is the difference between the `SATELLITE` connection type and `ultraConstrained`?[¶](#what-is-the-difference-between-the-satellite-connection-type-and-ultraconstrained "Permanent link")

The `SATELLITE` connection type tells you what the connection is, while `ultraConstrained` tells you that it is severely limited in bandwidth. Satellite is only reported as a connection type on Android, because iOS exposes this condition as a property of the connection instead. The two do not always match: a satellite network is not necessarily reported as bandwidth-constrained, and a bandwidth-constrained network is not necessarily a satellite network.

### Can I check whether airplane mode is enabled on iOS or Web?[¶](#can-i-check-whether-airplane-mode-is-enabled-on-ios-or-web "Permanent link")

No, the `isAirplaneModeEnabled()` method is only available on Android. On iOS, there is no public API to read the airplane mode state, and the Web platform does not expose this information either.

### Do I need any permissions to use this plugin?[¶](#do-i-need-any-permissions-to-use-this-plugin "Permanent link")

No, the plugin works without any additional configuration. On Android, the plugin already declares the required `ACCESS_NETWORK_STATE` permission in its own manifest, see the [Installation](#installation) section.

### Why is a VPN connection reported as `UNKNOWN` on iOS?[¶](#why-is-a-vpn-connection-reported-as-unknown-on-ios "Permanent link")

On iOS, the network status is read from the `NWPathMonitor` of the Network framework, and VPN connections are reported as `UNKNOWN`. The `VPN` connection type is only reported on platforms that can detect it, such as Android. See the [Network Information](#network-information) section for more platform differences.

### Can I use this plugin with Ionic, React, Vue or Angular?[¶](#can-i-use-this-plugin-with-ionic-react-vue-or-angular "Permanent link")

Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects.

## Related Plugins[¶](#related-plugins "Permanent link")

* [Battery](https://capawesome.io/docs/sdks/capacitor/battery/): Access battery information of the device.
* [Bluetooth Low Energy](https://capawesome.io/docs/sdks/capacitor/bluetooth-low-energy/): Communicate with Bluetooth Low Energy (BLE) devices in the central and peripheral role.
* [NFC](https://capawesome.io/docs/sdks/capacitor/nfc/): Read, write, and emulate NFC tags with advanced features like HCE and raw command handling.
* [Sim](https://capawesome.io/docs/sdks/capacitor/sim/): Read SIM card and carrier information.
* [Wifi](https://capawesome.io/docs/sdks/capacitor/wifi/): Manage Wi-Fi connectivity, including adding, connecting, and disconnecting networks.

## Newsletter[¶](#newsletter "Permanent link")

Stay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).

## Changelog[¶](#changelog "Permanent link")

See [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/network/CHANGELOG.md).

## License[¶](#license "Permanent link")

See [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/network/LICENSE).

July 8, 2026 

Back to top

```json
{"@context": "https://schema.org", "@graph": [{"@type": "TechArticle", "@id": "https://capawesome.io/docs/sdks/capacitor/network/#article", "headline": "Capacitor Network Plugin for Android, iOS & Web", "name": "Capacitor Network Plugin for Android, iOS & Web", "description": "Capacitor plugin to access network information such as connection status and type, and to listen for network changes on Android, iOS, and the web.", "inLanguage": "en", "url": "https://capawesome.io/docs/sdks/capacitor/network/", "mainEntityOfPage": "https://capawesome.io/docs/sdks/capacitor/network/", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "about": {"@id": "https://capawesome.io/docs/sdks/capacitor/network/#software"}}, {"@type": "SoftwareSourceCode", "@id": "https://capawesome.io/docs/sdks/capacitor/network/#software", "name": "Capacitor Network Plugin for Android, iOS & Web", "description": "Capacitor plugin to access network information such as connection status and type, and to listen for network changes on Android, iOS, and the web.", "url": "https://capawesome.io/docs/sdks/capacitor/network/", "programmingLanguage": "TypeScript", "runtimePlatform": "Capacitor", "codeRepository": "https://github.com/capawesome-team", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}}]}
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "How is this plugin different from other similar plugins?", "acceptedAnswer": {"@type": "Answer", "text": "It reports connectivity and the connection type (Wi-Fi, cellular, ethernet, or VPN) on Android, iOS, and the web, and on Android it adds verified internet reachability that avoids false positives from captive portals or VPNs, plus an airplane-mode check. You can read the status once or listen for change events, with the device observed only while a listener is attached, all through a fully typed API with typed connection-type enums. It supports both CocoaPods and Swift Package Manager on iOS, is honest about platform limits by returning null where reachability cannot be validated, and is actively maintained against the latest Capacitor and OS versions."}}, {"@type": "Question", "name": "What is the difference between connected and internetReachable?", "acceptedAnswer": {"@type": "Answer", "text": "The connected property tells you whether the device is connected to any network, while internetReachable tells you whether that connection has verified access to the internet. A device can be connected to a network without actually reaching the internet, for example behind a captive portal or when a VPN is active. The internetReachable property is only available on Android, where it reflects the NET_CAPABILITY_VALIDATED capability of the connection."}}, {"@type": "Question", "name": "Why is internetReachable always null on iOS and Web?", "acceptedAnswer": {"@type": "Answer", "text": "iOS and the Web platform cannot distinguish validated internet access from mere network connectivity, so the plugin returns null instead of a potentially misleading value. On these platforms, being connected to a network does not guarantee that the internet is reachable. See the Network Information section for the platform-specific details."}}, {"@type": "Question", "name": "What is the difference between the SATELLITE connection type and ultraConstrained?", "acceptedAnswer": {"@type": "Answer", "text": "The SATELLITE connection type tells you what the connection is, while ultraConstrained tells you that it is severely limited in bandwidth. Satellite is only reported as a connection type on Android, because iOS exposes this condition as a property of the connection instead. The two do not always match: a satellite network is not necessarily reported as bandwidth-constrained, and a bandwidth-constrained network is not necessarily a satellite network."}}, {"@type": "Question", "name": "Can I check whether airplane mode is enabled on iOS or Web?", "acceptedAnswer": {"@type": "Answer", "text": "No, the isAirplaneModeEnabled() method is only available on Android. On iOS, there is no public API to read the airplane mode state, and the Web platform does not expose this information either."}}, {"@type": "Question", "name": "Do I need any permissions to use this plugin?", "acceptedAnswer": {"@type": "Answer", "text": "No, the plugin works without any additional configuration. On Android, the plugin already declares the required ACCESS_NETWORK_STATE permission in its own manifest, see the Installation section."}}, {"@type": "Question", "name": "Why is a VPN connection reported as UNKNOWN on iOS?", "acceptedAnswer": {"@type": "Answer", "text": "On iOS, the network status is read from the NWPathMonitor of the Network framework, and VPN connections are reported as UNKNOWN. The VPN connection type is only reported on platforms that can detect it, such as Android. See the Network Information section for more platform differences."}}, {"@type": "Question", "name": "Can I use this plugin with Ionic, React, Vue or Angular?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects."}}], "url": "https://capawesome.io/docs/sdks/capacitor/network/"}
```
