---
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 **Capawesome Platform** — one platform for Live Updates, Native Builds, App Store Publishing, and Insider SDKs.](https://capawesome.io) 

* [  Formbricks ](/docs/plugins/formbricks/)
* [  Geocoder ](/docs/plugins/geocoder/)
* [  Google Sign-In ](/docs/plugins/google-sign-in/)
* [  libSQL ](/docs/plugins/libsql/)
* [  Live Update ](/docs/plugins/live-update/)
* [  Managed Configurations ](/docs/plugins/managed-configurations/)
* [  Media Session ](/docs/plugins/media-session/)
* [  ML Kit ](/docs/plugins/mlkit/)
* [  NFC ](/docs/plugins/nfc/)
* [  OAuth ](/docs/plugins/oauth/)
* [  Pedometer ](/docs/plugins/pedometer/)
* [  Photo Editor ](/docs/plugins/photo-editor/)
* [  PostHog ](/docs/plugins/posthog/)
* [  Printer ](/docs/plugins/printer/)
* [  Purchases ](/docs/plugins/purchases/)
* [  RealtimeKit ](/docs/plugins/realtimekit/)
* [  Screen Orientation ](/docs/plugins/screen-orientation/)
* [  Screenshot ](/docs/plugins/screenshot/)
* [  Secure Preferences ](/docs/plugins/secure-preferences/)
* [  Speech Recognition ](/docs/plugins/speech-recognition/)
* [  Speech Synthesis ](/docs/plugins/speech-synthesis/)
* [  Share Target ](/docs/plugins/share-target/)
* [  Square Mobile Payments ](/docs/plugins/square-mobile-payments/)
* [  SQLite ](/docs/plugins/sqlite/)
* [  Superwall ](/docs/plugins/superwall/)
* [  Torch ](/docs/plugins/torch/)
* [  Wifi ](/docs/plugins/wifi/)
* [  Zip ](/docs/plugins/zip/)
* [  Cloud ](/docs/cloud/)
* [  Live Updates ](/docs/cloud/live-updates/)
* Advanced
* Integrations
* [  Native Builds ](/docs/cloud/native-builds/)
* [  Configuration ](/docs/cloud/native-builds/configuration/)
* [  Environments ](/docs/cloud/native-builds/environments/)
* Guides
* [  Sample Projects ](/docs/cloud/native-builds/sample-projects/)
* [  Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [  Automations ](/docs/cloud/automations/)
* [  Assist ](/docs/cloud/assist/)
* Account
* Organizations
* [  Organization and User Management ](/docs/cloud/organizations/memberships/)
* [  Single Sign-On (SSO) ](/docs/cloud/organizations/sso/)
* [  Teams ](/docs/cloud/organizations/teams/)
* [  Two-Factor Authentication ](/docs/cloud/organizations/two-factor-authentication/)
* [  Integrations ](/docs/cloud/integrations/)
* [  License Keys ](/docs/cloud/license-keys/)
* [  Webhooks ](/docs/cloud/webhooks/)
* [  Pricing ](https://capawesome.io/pricing/)
* [  FAQ ](/docs/cloud/faq/)
* [  Support ](/docs/cloud/support/)
* [  Contributing ](/docs/contributing/)
* [  LLMs ](/docs/llms/)
* [  Insiders ](/docs/insiders/)
* [  License ](https://capawesome.io/legal/eula/)
* [  Support ](/docs/insiders/support/)
* [  FAQ ](/docs/insiders/faq/)
* [  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](/docs/plugins/contacts/) plugin. 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/plugins/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/plugins/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/plugins/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/plugins/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/plugins/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/plugins/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/plugins/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/plugins/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/plugins/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/plugins/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/plugins/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](/docs/plugins/contacts/) plugin. Be sure to check out the [API Reference](/docs/plugins/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.

March 18, 2026 

 Back to top 