---
description: The Capawesome May update is here! This update includes new features and improvements for Capawesome Cloud and our Plugins.
title: Capawesome May 2025 Update - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/2025-may-update.png
---

[ Skip to content](#capawesome-may-2025-update) 

[ 🔐 Introducing the **Capacitor Vault** plugin — store secrets behind biometrics or a device passcode.](/blog/announcing-the-capacitor-vault-plugin/) 

* [  SDKs ](/docs/sdks/)
* [  Formbricks ](/docs/sdks/capacitor/formbricks/)
* [  Geocoder ](/docs/sdks/capacitor/geocoder/)
* [  Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [  Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [  libSQL ](/docs/sdks/capacitor/libsql/)
* [  Live Update ](/docs/sdks/capacitor/live-update/)
* [  Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [  Media Session ](/docs/sdks/capacitor/media-session/)
* [  ML Kit ](/docs/sdks/capacitor/mlkit/)
* [  Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [  NFC ](/docs/sdks/capacitor/nfc/)
* [  OAuth ](/docs/sdks/capacitor/oauth/)
* [  Pedometer ](/docs/sdks/capacitor/pedometer/)
* [  Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [  PostHog ](/docs/sdks/capacitor/posthog/)
* [  Printer ](/docs/sdks/capacitor/printer/)
* [  Purchases ](/docs/sdks/capacitor/purchases/)
* [  RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [  Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [  Screenshot ](/docs/sdks/capacitor/screenshot/)
* [  Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [  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/)
* [  Torch ](/docs/sdks/capacitor/torch/)
* [  Vault ](/docs/sdks/capacitor/vault/)
* [  Wifi ](/docs/sdks/capacitor/wifi/)
* [  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/)
* [  Overwrite 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 or Yarn ](/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/)
* Account
* [  Organization ](/docs/cloud/organizations/)
* [  Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [  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

* [  Cloud ](#cloud)
* [  Plugins ](#plugins)

# Capawesome May 2025 Update[¶](#capawesome-may-2025-update "Permanent link")

The Capawesome May update is here! This update includes new features and improvements for [Capawesome Cloud](/docs/cloud/) and our [Plugins](/docs/sdks/capacitor/). Let's take a look at the most important changes.

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

## Blog[¶](#blog "Permanent link")

Check out our latest blog post [How to Securely Store Credentials with Capacitor](/blog/how-to-securely-store-credentials-with-capacitor/) to learn how to securely store credentials and authenticate users using the [Capacitor Biometrics plugin](/docs/sdks/capacitor/biometrics/) and [Capacitor Secure Preferences plugin](/docs/sdks/capacitor/secure-preferences/) plugins. It's a cross-platform solution that works on both Android and iOS, and it provides a secure way to store sensitive information such as passwords, tokens, or other credentials.

## CLI[¶](#cli "Permanent link")

The [Capawesome CLI](/docs/cloud/cli/) has been updated with several new commands and improvements this month.

### New `apps:channels:get` command[¶](#new-appschannelsget-command "Permanent link")

The new `apps:channels:get` command allows you to retrieve information about a specific channel in your app. You can use this command to get details such as the channel's ID, name, and metadata. In combination with the `--json` option, you can easily integrate this command into your scripts or workflows to automate tasks related to your app's channels. 

For example, the following command retrieves the information about a specific channel in JSON format and extracts the channel ID using [jq](https://github.com/jqlang/jq):

`[](#%5F%5Fcodelineno-0-1)npx @capawesome/cli apps:channels:get --app-id my-app-id --channel-id my-channel-id --json | jq ".id"
`

### New `apps:channels:list` command[¶](#new-appschannelslist-command "Permanent link")

The new `apps:channels:list` command allows you to list all channels in your app. You can use this command to get an overview of all channels and their metadata. Again, you can use the `--json` option to get the output in JSON format, which makes it easy to integrate into your scripts or workflows. Thanks to the `--limit` and `--offset` options, you can also paginate through the list of channels.

`[](#%5F%5Fcodelineno-1-1)npx @capawesome/cli apps:channels:list --app-id my-app-id --limit 10 --offset 0 --json
`

### New `apps:channels:update` command[¶](#new-appschannelsupdate-command "Permanent link")

The new `apps:channels:update` command allows you to update the name or bundle limit of a specific channel in your app.

`[](#%5F%5Fcodelineno-2-1)npx @capawesome/cli apps:channels:update --app-id my-app-id --channel-id my-channel-id --name "New Channel Name" --bundle-limit 100
`

## Cloud[¶](#cloud "Permanent link")

### New Logs page[¶](#new-logs-page "Permanent link")

We have introduced a new Logs page in the Capawesome Cloud Console. This page allows you to view and filter logs for your app, making it easier to debug your implementation when getting started. View detailed information on requests and responses, including status and body, to help you identify issues before they become critical. Read more about the new Logs page in the [docs](/docs/cloud/live-updates/logs/).

![Capawesome Cloud App Logs](/docs/assets/images/posts/20250601_Cloud_Logs.png) 

Capawesome Cloud App Logs

## Plugins[¶](#plugins "Permanent link")

### Audio Recorder[¶](#audio-recorder "Permanent link")

The [Capacitor Audio Recorder plugin](/docs/sdks/capacitor/audio-recorder/) got several new features and improvements this month.

##### New `bitRate` property[¶](#new-bitrate-property "Permanent link")

The `StartRecordingOptions` now includes a new `bitRate` property. This property allows you to specify the audio encoding bit rate in bits per second (bps) for the recorded audio. This gives you more control over the audio quality and file size of the recording.

`[](#%5F%5Fcodelineno-3-1)import { AudioRecorder } from '@capawesome-team/capacitor-audio-recorder';
[](#%5F%5Fcodelineno-3-2)
[](#%5F%5Fcodelineno-3-3)const startRecording = async () => {
[](#%5F%5Fcodelineno-3-4)  await AudioRecorder.startRecording({
[](#%5F%5Fcodelineno-3-5)    bitRate: 128000, // 128 kbps
[](#%5F%5Fcodelineno-3-6)  });
[](#%5F%5Fcodelineno-3-7)};
`

##### New `duration` property[¶](#new-duration-property "Permanent link")

The `StopRecordingResult` and `RecordingStoppedEvent` now include a new `duration` property. This property provides the duration of the recorded audio in milliseconds, allowing you to easily access the length of the recording.

`` [](#%5F%5Fcodelineno-4-1)import { AudioRecorder } from '@capawesome-team/capacitor-audio-recorder';
[](#%5F%5Fcodelineno-4-2)
[](#%5F%5Fcodelineno-4-3)const stopRecording = async () => {
[](#%5F%5Fcodelineno-4-4)  const { blob, duration, uri } = await AudioRecorder.stopRecording();
[](#%5F%5Fcodelineno-4-5)  console.log(`Recording duration: ${duration} ms`);
[](#%5F%5Fcodelineno-4-6)};
 ``

##### New `sampleRate` property[¶](#new-samplerate-property "Permanent link")

The `StartRecordingOptions` now includes a new `sampleRate` property. This property allows you to specify the sample rate for the recorded audio. Just like the `bitRate` property, this gives you more control over the audio quality and file size of the recording. The sample rate is specified in Hertz (Hz) and can be set to common values such as 44100 Hz or 48000 Hz.

`[](#%5F%5Fcodelineno-5-1)import { AudioRecorder } from '@capawesome-team/capacitor-audio-recorder';
[](#%5F%5Fcodelineno-5-2)
[](#%5F%5Fcodelineno-5-3)const startRecording = async () => {
[](#%5F%5Fcodelineno-5-4)  await AudioRecorder.startRecording({
[](#%5F%5Fcodelineno-5-5)    sampleRate: 44100,
[](#%5F%5Fcodelineno-5-6)  });
[](#%5F%5Fcodelineno-5-7)};
`

This property is optional and defaults to 44100 if not specified.

##### New `recordingPaused` event[¶](#new-recordingpaused-event "Permanent link")

In order to handle audio interruptions, the plugin now emits a new `recordingPaused` event. This event is triggered when the recording is paused, allowing you to handle any necessary actions in your app.

`[](#%5F%5Fcodelineno-6-1)import { AudioRecorder } from '@capawesome-team/capacitor-audio-recorder';
[](#%5F%5Fcodelineno-6-2)
[](#%5F%5Fcodelineno-6-3)AudioRecorder.addListener('recordingPaused', () => {
[](#%5F%5Fcodelineno-6-4)  console.log('Recording paused');
[](#%5F%5Fcodelineno-6-5)});
`

### Biometrics[¶](#biometrics "Permanent link")

We have published a new [Capacitor Biometrics plugin](/docs/sdks/capacitor/biometrics/). This plugin allows you to use biometric authentication (such as fingerprint or face recognition) in your Capacitor app. The plugin provides a simple API for authenticating users and checking if biometric authentication is available on the device. The plugin is available on Android and iOS.

`[](#%5F%5Fcodelineno-7-1)import { Biometrics, ErrorCode } from '@capawesome-team/capacitor-biometrics';
[](#%5F%5Fcodelineno-7-2)
[](#%5F%5Fcodelineno-7-3)
[](#%5F%5Fcodelineno-7-4)const authenticate = async () => {
[](#%5F%5Fcodelineno-7-5)  try {
[](#%5F%5Fcodelineno-7-6)    await Biometrics.authenticate({
[](#%5F%5Fcodelineno-7-7)      title: 'Authentication Required',
[](#%5F%5Fcodelineno-7-8)      subtitle: 'Please authenticate to continue',
[](#%5F%5Fcodelineno-7-9)      cancelButtonText: 'Cancel',
[](#%5F%5Fcodelineno-7-10)      iosFallbackButtonText: 'Use Passcode',
[](#%5F%5Fcodelineno-7-11)    });
[](#%5F%5Fcodelineno-7-12)  } catch (error) {
[](#%5F%5Fcodelineno-7-13)    if (error.code === ErrorCode.USER_CANCELED) {
[](#%5F%5Fcodelineno-7-14)      console.log('User canceled the authentication.');
[](#%5F%5Fcodelineno-7-15)    } else if (error.code === ErrorCode.NOT_ENROLLED) {
[](#%5F%5Fcodelineno-7-16)      console.log('No biometric authentication enrolled.');
[](#%5F%5Fcodelineno-7-17)    } else if (error.code === ErrorCode.NOT_AVAILABLE) {
[](#%5F%5Fcodelineno-7-18)      console.log('Biometric authentication not available.');
[](#%5F%5Fcodelineno-7-19)    } else {
[](#%5F%5Fcodelineno-7-20)      console.log('Another error occurred:', error);
[](#%5F%5Fcodelineno-7-21)    }
[](#%5F%5Fcodelineno-7-22)  }
[](#%5F%5Fcodelineno-7-23)};
`

Check out the [announcement post](/blog/announcing-the-capacitor-biometrics-plugin/) for more details.

### Contacts[¶](#contacts "Permanent link")

The [Capacitor Contacts plugin](/docs/sdks/capacitor/contacts/) has received several new features and improvements this month.

##### New `displayContactById(...)` method[¶](#new-displaycontactbyid-method "Permanent link")

The `displayContactById(...)` method allows you to display a contact in the system's default contacts app. This is useful for apps that need to show contact details without having to implement a custom UI.

`[](#%5F%5Fcodelineno-8-1)import { Contacts } from '@capawesome-team/capacitor-contacts';
[](#%5F%5Fcodelineno-8-2)
[](#%5F%5Fcodelineno-8-3)const displayContact = async (id: string) => {
[](#%5F%5Fcodelineno-8-4)  await Contacts.displayContactById({
[](#%5F%5Fcodelineno-8-5)    id,
[](#%5F%5Fcodelineno-8-6)  });
[](#%5F%5Fcodelineno-8-7)};
`

You just need to pass the contact ID of the contact you want to display. The system will then open the default contacts app and show the contact details.

##### New `updateContactById(...)` and `displayUpdateContactById(...)` methods[¶](#new-updatecontactbyid-and-displayupdatecontactbyid-methods "Permanent link")

The `updateContactById(...)` method allows you to update an existing contact by its ID. This is useful for apps that need to modify contact details without having to create a new contact.

`[](#%5F%5Fcodelineno-9-1)import { Contacts } from '@capawesome-team/capacitor-contacts';
[](#%5F%5Fcodelineno-9-2)
[](#%5F%5Fcodelineno-9-3)const updateContactById = async (id: string) => {
[](#%5F%5Fcodelineno-9-4)  await Contacts.updateContactById({
[](#%5F%5Fcodelineno-9-5)    id,
[](#%5F%5Fcodelineno-9-6)    contact: {
[](#%5F%5Fcodelineno-9-7)      givenName: 'John',
[](#%5F%5Fcodelineno-9-8)      familyName: 'Doe'
[](#%5F%5Fcodelineno-9-9)    }
[](#%5F%5Fcodelineno-9-10)  });
[](#%5F%5Fcodelineno-9-11)};
`

It's important to note that all fields are required to be provided when updating a contact, even if you only want to change one field. Fields that are not provided will be removed from the contact. This behavior will be improved in a future release to allow partial updates.

In addition, the `displayUpdateContactById(...)` method allows you to display a contact in the system's default contacts app with the option to update it. 

`[](#%5F%5Fcodelineno-10-1)import { Contacts } from '@capawesome-team/capacitor-contacts';
[](#%5F%5Fcodelineno-10-2)
[](#%5F%5Fcodelineno-10-3)const displayUpdateContact = async (id: string) => {
[](#%5F%5Fcodelineno-10-4)  await Contacts.displayUpdateContactById({
[](#%5F%5Fcodelineno-10-5)    id,
[](#%5F%5Fcodelineno-10-6)  });
[](#%5F%5Fcodelineno-10-7)};
`

This way, you don't have to implement a custom UI for updating contacts, and you can leverage the system's default contacts app for this purpose.

##### New `countContacts(...)` method[¶](#new-countcontacts-method "Permanent link")

The `countContacts(...)` method allows you to count the number of contacts in the device's contacts database. This allows you to show the number of contacts in your app without having to fetch all contacts.

`` [](#%5F%5Fcodelineno-11-1)import { Contacts } from '@capawesome-team/capacitor-contacts';
[](#%5F%5Fcodelineno-11-2)
[](#%5F%5Fcodelineno-11-3)const countContacts = async () => {
[](#%5F%5Fcodelineno-11-4)  const { count } = await Contacts.countContacts();
[](#%5F%5Fcodelineno-11-5)  console.log(`Number of contacts: ${count}`);
[](#%5F%5Fcodelineno-11-6)};
 ``

##### Accounts and Groups support[¶](#accounts-and-groups-support "Permanent link")

The plugin now supports Android accounts and iOS groups. This allows you to manage contacts that are associated with specific accounts or groups, making it easier to organize and access contacts in your app.

For example, on Android, you can retrieve the accounts associated with the device using the `getAccounts(...)` method:

`[](#%5F%5Fcodelineno-12-1)import { Contacts } from "@capawesome-team/capacitor-contacts";
[](#%5F%5Fcodelineno-12-2)
[](#%5F%5Fcodelineno-12-3)const getAccounts = async () => {
[](#%5F%5Fcodelineno-12-4)  const { accounts } = await Contacts.getAccounts();
[](#%5F%5Fcodelineno-12-5)  return accounts;
[](#%5F%5Fcodelineno-12-6)};
`

You can then create a contact and associate it with an account using the `account` property of the `Contact` object:

`[](#%5F%5Fcodelineno-13-1)import { Contacts } from "@capawesome-team/capacitor-contacts";
[](#%5F%5Fcodelineno-13-2)
[](#%5F%5Fcodelineno-13-3)const createContact = async () => {
[](#%5F%5Fcodelineno-13-4)  return Contacts.createContact({
[](#%5F%5Fcodelineno-13-5)    contact: {
[](#%5F%5Fcodelineno-13-6)      account: {
[](#%5F%5Fcodelineno-13-7)        name: 'john@doe.tld',
[](#%5F%5Fcodelineno-13-8)        type: 'com.google'
[](#%5F%5Fcodelineno-13-9)      },
[](#%5F%5Fcodelineno-13-10)      givenName: 'John',
[](#%5F%5Fcodelineno-13-11)      familyName: 'Doe'
[](#%5F%5Fcodelineno-13-12)    },
[](#%5F%5Fcodelineno-13-13)  });
[](#%5F%5Fcodelineno-13-14)};
`

On iOS, you can retrieve the groups associated with the device using the `getGroups(...)` method:

`[](#%5F%5Fcodelineno-14-1)import { Contacts } from "@capawesome-team/capacitor-contacts";
[](#%5F%5Fcodelineno-14-2)
[](#%5F%5Fcodelineno-14-3)const getGroups = async () => {
[](#%5F%5Fcodelineno-14-4)  const { groups } = await Contacts.getGroups();
[](#%5F%5Fcodelineno-14-5)  return groups;
[](#%5F%5Fcodelineno-14-6)};
`

Just like with accounts, you can create a contact and associate it with one (or more) group(s) using the `groupIds` property of the `Contact` object:

`[](#%5F%5Fcodelineno-15-1)import { Contacts } from "@capawesome-team/capacitor-contacts";
[](#%5F%5Fcodelineno-15-2)
[](#%5F%5Fcodelineno-15-3)const createContact = async () => {
[](#%5F%5Fcodelineno-15-4)  return Contacts.createContact({
[](#%5F%5Fcodelineno-15-5)    contact: {
[](#%5F%5Fcodelineno-15-6)      groupIds: ['904DE809-D144-4562-8552-DFEB91F0E4BD:ABGroup'],
[](#%5F%5Fcodelineno-15-7)      givenName: 'John',
[](#%5F%5Fcodelineno-15-8)      familyName: 'Doe'
[](#%5F%5Fcodelineno-15-9)    },
[](#%5F%5Fcodelineno-15-10)  });
[](#%5F%5Fcodelineno-15-11)};
`

You can even create a new group using the [createGroup(...)](/docs/sdks/capacitor/contacts/#creategroup) method:

`[](#%5F%5Fcodelineno-16-1)import { Contacts } from "@capawesome-team/capacitor-contacts";
[](#%5F%5Fcodelineno-16-2)
[](#%5F%5Fcodelineno-16-3)const createGroup = async () => {
[](#%5F%5Fcodelineno-16-4)  return Contacts.createGroup({
[](#%5F%5Fcodelineno-16-5)    group: {
[](#%5F%5Fcodelineno-16-6)      name: 'Friends'
[](#%5F%5Fcodelineno-16-7)    }
[](#%5F%5Fcodelineno-16-8)  });
[](#%5F%5Fcodelineno-16-9)};
`

##### Pagination support[¶](#pagination-support "Permanent link")

That's not all! The plugin now supports pagination for fetching contacts. This allows you to fetch contacts in smaller chunks, which can improve performance and reduce memory usage, especially when dealing with a large number of contacts.

`[](#%5F%5Fcodelineno-17-1)import { Contacts } from '@capawesome-team/capacitor-contacts';
[](#%5F%5Fcodelineno-17-2)
[](#%5F%5Fcodelineno-17-3)const getContacts = async () => {
[](#%5F%5Fcodelineno-17-4)  const { contacts } = await Contacts.getContacts({
[](#%5F%5Fcodelineno-17-5)    limit: 10, // Fetch 10 contacts at a time
[](#%5F%5Fcodelineno-17-6)    offset: 0, // Start from the first contact
[](#%5F%5Fcodelineno-17-7)  });
[](#%5F%5Fcodelineno-17-8)  console.log(contacts);
[](#%5F%5Fcodelineno-17-9)};
`

### Secure Preferences[¶](#secure-preferences "Permanent link")

We have published a new [Capacitor Secure Preferences plugin](/docs/sdks/capacitor/secure-preferences/). This plugin is a drop-in replacement for the [Capacitor Preferences](https://capacitorjs.com/docs/apis/preferences) plugin and and allows you to securely store key/value pairs such as passwords, tokens or other sensitive information. 

`[](#%5F%5Fcodelineno-18-1)import { SecurePreferences } from '@capawesome-team/capacitor-secure-preferences';
[](#%5F%5Fcodelineno-18-2)
[](#%5F%5Fcodelineno-18-3)const set = async () => {
[](#%5F%5Fcodelineno-18-4)  await SecurePreferences.set({
[](#%5F%5Fcodelineno-18-5)    key: 'password',
[](#%5F%5Fcodelineno-18-6)    value: '123456',
[](#%5F%5Fcodelineno-18-7)  });
[](#%5F%5Fcodelineno-18-8)};
[](#%5F%5Fcodelineno-18-9)
[](#%5F%5Fcodelineno-18-10)const get = async () => {
[](#%5F%5Fcodelineno-18-11)  const { value } = await SecurePreferences.get({
[](#%5F%5Fcodelineno-18-12)    key: 'password',
[](#%5F%5Fcodelineno-18-13)  });
[](#%5F%5Fcodelineno-18-14)  console.log(value);
[](#%5F%5Fcodelineno-18-15)};
`

Check out the [announcement post](/blog/announcing-the-capacitor-secure-preferences-plugin/) for more details.

### Wifi[¶](#wifi "Permanent link")

#### New `addNetwork(...)` method[¶](#new-addnetwork-method "Permanent link")

The [Capacitor Wifi plugin](/docs/sdks/capacitor/wifi/) now includes a new `addNetwork(...)` method. This method displays a system dialog that allows the user to add a new Wi-Fi network with predefined credentials. This is useful for apps that require the user to connect to a specific Wi-Fi network.

`[](#%5F%5Fcodelineno-19-1)import { Wifi } from '@capawesome-team/capacitor-wifi';
[](#%5F%5Fcodelineno-19-2)
[](#%5F%5Fcodelineno-19-3)const addNetwork = async () => {
[](#%5F%5Fcodelineno-19-4)  await Wifi.addNetwork({
[](#%5F%5Fcodelineno-19-5)    ssid: 'MyNetwork',
[](#%5F%5Fcodelineno-19-6)    password: 'MyPassword',
[](#%5F%5Fcodelineno-19-7)  });
[](#%5F%5Fcodelineno-19-8)}
`

Here is a short video demonstrating how this looks like in practice on Android:

June 8, 2026 

 Back to top 