---
description: Capacitor plugin to read, write, or select device contacts with advanced features like filtering and pagination.
title: Announcing the Contacts Plugin for Capacitor - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/announcing-the-capacitor-contacts-plugin.png
---

[ Skip to content](#announcing-the-capacitor-contacts-plugin) 

[ 🔐 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

* [  Conclusion ](#conclusion)

* Related links

# Announcing the Capacitor Contacts Plugin[¶](#announcing-the-capacitor-contacts-plugin "Permanent link")

Today we are excited to announce our brand new [Capacitor Contacts plugin](/docs/sdks/capacitor/contacts/). This plugin allows you to access the device's contacts and provides cross-platform support for Android, iOS, and Web. The project is now available for all Capawesome [Insiders](/docs/insiders/).

Let's take a quick look at the [API](/docs/sdks/capacitor/contacts/#api) and how you can use the plugin to retrieve and manage contacts.

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

To install the Capacitor Contacts plugin, please refer to the [Installation](/docs/sdks/capacitor/contacts/#installation) section in the plugin documentation.

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

Let's take a look at the basic usage of the plugin. You can find the complete API reference in the [API](/docs/sdks/capacitor/contacts/#api) section of the documentation.

### Create a contact[¶](#create-a-contact "Permanent link")

First, let's create a new contact. You can use the [createContact(...)](/docs/sdks/capacitor/contacts/#createcontact) method to create a new contact:

`[](#%5F%5Fcodelineno-0-1)import { Contacts, EmailAddressType, PhoneNumberType, PostalAddressType } from "@capawesome-team/capacitor-contacts";
[](#%5F%5Fcodelineno-0-2)
[](#%5F%5Fcodelineno-0-3)const createContact = async () => {
[](#%5F%5Fcodelineno-0-4)  const createContact = async () => {
[](#%5F%5Fcodelineno-0-5)  return Contacts.createContact({
[](#%5F%5Fcodelineno-0-6)    contact: {
[](#%5F%5Fcodelineno-0-7)      givenName: 'John',
[](#%5F%5Fcodelineno-0-8)      familyName: 'Doe',
[](#%5F%5Fcodelineno-0-9)      emailAddresses: [
[](#%5F%5Fcodelineno-0-10)        {
[](#%5F%5Fcodelineno-0-11)          value: 'mail@example.com',
[](#%5F%5Fcodelineno-0-12)          type: EmailAddressType.Home,
[](#%5F%5Fcodelineno-0-13)          isPrimary: true
[](#%5F%5Fcodelineno-0-14)        }
[](#%5F%5Fcodelineno-0-15)      ],
[](#%5F%5Fcodelineno-0-16)      phoneNumbers: [
[](#%5F%5Fcodelineno-0-17)        {
[](#%5F%5Fcodelineno-0-18)          value: '1234567890',
[](#%5F%5Fcodelineno-0-19)          type: PhoneNumberType.Mobile,
[](#%5F%5Fcodelineno-0-20)          isPrimary: true
[](#%5F%5Fcodelineno-0-21)        }
[](#%5F%5Fcodelineno-0-22)      ],
[](#%5F%5Fcodelineno-0-23)      postalAddresses: [
[](#%5F%5Fcodelineno-0-24)        {
[](#%5F%5Fcodelineno-0-25)          street: '123 Main St',
[](#%5F%5Fcodelineno-0-26)          city: 'Springfield',
[](#%5F%5Fcodelineno-0-27)          state: 'IL',
[](#%5F%5Fcodelineno-0-28)          postalCode: '62701',
[](#%5F%5Fcodelineno-0-29)          country: 'USA',
[](#%5F%5Fcodelineno-0-30)          type: PostalAddressType.Home,
[](#%5F%5Fcodelineno-0-31)          isPrimary: true
[](#%5F%5Fcodelineno-0-32)        }
[](#%5F%5Fcodelineno-0-33)      ]
[](#%5F%5Fcodelineno-0-34)    }
[](#%5F%5Fcodelineno-0-35)  });
[](#%5F%5Fcodelineno-0-36)};
`

This method takes a `Contact` object as a parameter, which contains the contact's information such as name, email addresses, phone numbers, and postal addresses.

### Retrieve contacts[¶](#retrieve-contacts "Permanent link")

You can retrieve contacts from the device's address book using the [getContacts(...)](/docs/sdks/capacitor/contacts/#getcontacts) method:

`[](#%5F%5Fcodelineno-1-1)import { Contacts } from "@capawesome-team/capacitor-contacts";
[](#%5F%5Fcodelineno-1-2)
[](#%5F%5Fcodelineno-1-3)const getContacts = async () => {
[](#%5F%5Fcodelineno-1-4)  const { contacts } = await Contacts.getContacts({
[](#%5F%5Fcodelineno-1-5)    fields: ['givenName', 'familyName', 'emailAddresses', 'phoneNumbers', 'postalAddresses'],
[](#%5F%5Fcodelineno-1-6)  });
[](#%5F%5Fcodelineno-1-7)  return contacts;
[](#%5F%5Fcodelineno-1-8)};
`

This method returns an array of contacts, each containing the requested fields. You can specify which fields you want to retrieve using the `fields` parameter. This is useful to limit the amount of data returned and improve performance.

There is also a `getContactById(...)` method that allows you to retrieve a contact by its ID:

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

This method takes the contact ID as a parameter and returns the contact with the specified ID. This is useful if you want to retrieve a specific contact without having to search for it in the list of all contacts.

### Update a contact[¶](#update-a-contact "Permanent link")

To update an existing contact, you can use the [updateContact(...)](/docs/sdks/capacitor/contacts/#updatecontact) method:

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

This method takes the contact ID and a `Contact` object as parameters. You can update the contact's information such as name, email addresses, phone numbers, and postal addresses. This is useful if you want to modify an existing contact's information.

All contact fields are required 

All contact fields are required to be provided, even if they are not updated. Fields that are not provided will be removed from the contact. This bevavior will be changed in v8.0.0 of the plugin. From then on, only the fields that are provided will be updated, and the other fields will remain unchanged. If you want to remove a field, you can set it to `null`.

### Delete a contact[¶](#delete-a-contact "Permanent link")

You can delete a contact using the [deleteContact(...)](/docs/sdks/capacitor/contacts/#deletecontact) method:

`[](#%5F%5Fcodelineno-4-1)import { Contacts } from "@capawesome-team/capacitor-contacts";
[](#%5F%5Fcodelineno-4-2)
[](#%5F%5Fcodelineno-4-3)const deleteContact = async (contactId: string) => {
[](#%5F%5Fcodelineno-4-4)  await Contacts.deleteContact({ id: contactId });
[](#%5F%5Fcodelineno-4-5)};
`

This method takes the contact ID as a parameter and deletes the contact with the specified ID. This is useful if you want to remove a contact from the device's address book.

### Pick a contact[¶](#pick-a-contact "Permanent link")

You can let the user pick a contact from the device's address book using the [pickContact(...)](/docs/sdks/capacitor/contacts/#pickcontact) method:

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

This method opens the device's contact picker and returns the selected contact. This way, you can let the user select a contact while respecting their privacy and without having to implement your own contact picker UI.

### Accounts[¶](#accounts "Permanent link")

On Android, you can retrieve the accounts associated with the device using the [getAccounts(...)](/docs/sdks/capacitor/contacts/#getaccounts) method:

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

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

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

### Groups[¶](#groups "Permanent link")

On iOS, you can retrieve the groups associated with the device using the [getGroups(...)](/docs/sdks/capacitor/contacts/#getgroups) method:

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

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

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

## Conclusion[¶](#conclusion "Permanent link")

We hope you are as excited as we are about the new [Capacitor Contacts plugin](/docs/sdks/capacitor/contacts/). Be sure to check out the [API Reference](/docs/sdks/capacitor/contacts/#api) to see what else you can do with this plugin. If you are missing any features, just [create a feature request](https://github.com/capawesome-team/capacitor-plugins/issues/new/choose) in the [GitHub repository](https://github.com/capawesome-team/capacitor-plugins). Make sure you follow us on [X](https://x.com/capawesomeio) so you don't miss any future updates.

June 8, 2026 

 Back to top 