✓ Verified 💻 Development ✓ Enhanced Data

Carddav Contacts

Sync and manage CardDAV contacts (Google, iCloud, Nextcloud, etc.) using vdirsyncer + khard.

Rating
4.5 (358 reviews)
Downloads
4,636 downloads
Version
1.0.0

Overview

Sync and manage CardDAV contacts (Google, iCloud, Nextcloud, etc.) using vdirsyncer + khard.

Complete Documentation

View Source →

CardDAV Contacts (vdirsyncer + khard)

vdirsyncer syncs CardDAV contacts to local .vcf files. khard reads and manages them via CLI.

Sync First

Always sync before querying to ensure you have the latest contacts:

bash
vdirsyncer sync

Quick Search (Smart)

If configured with default_action = list (standard), you can search directly without subcommands:

bash
khard "john"                     # Search for "john" in all fields
khard "pilar"                    # Search for "pilar"

List & Search (Explicit)

Use list if you need specific flags or if the implicit search doesn't match your config.

bash
khard list                       # List all contacts
khard list "john"                # Search explicitly
khard list -a work               # List only from 'work' address book
khard list -p                    # Parsable output (tab-separated)

View Contact Details

bash
khard show "john doe"            # Show details (pretty print)
khard show --format yaml "john"  # Show as YAML (good for editing)

Quick Field Lookup

Extract specific info (great for piping):

bash
khard email "john"               # List emails only
khard phone "john"               # List phone numbers only
khard postaddress "john"         # List postal addresses

Management

bash
khard new                        # Create new contact (interactive editor)
khard edit "john"                # Edit contact (interactive editor)
khard remove "john"              # Delete contact
khard move "john" -a work        # Move to another address book

Configuration Setup

1. Configure vdirsyncer (~/.config/vdirsyncer/config)

ini
[pair google_contacts]
a = "google_contacts_remote"
b = "google_contacts_local"
collections = ["from a", "from b"]
conflict_resolution = "a wins"

[storage google_contacts_remote]
type = "carddav"
url = "https://www.googleapis.com/.well-known/carddav"
username = "[email protected]"
password.fetch = ["command", "cat", "~/.config/vdirsyncer/google_app_password"]

[storage google_contacts_local]
type = "filesystem"
path = "~/.local/share/vdirsyncer/contacts/"
fileext = ".vcf"

2. Configure khard (~/.config/khard/khard.conf)

Critically, set default_action = list to enable quick search.

ini
[addressbooks]
[[google]]
path = ~/.local/share/vdirsyncer/contacts/default/

[general]
default_action = list
editor = vim
merge_editor = vimdiff

[contact table]
display = formatted_name
sort = last_name

3. Initialize

bash
mkdir -p ~/.local/share/vdirsyncer/contacts
vdirsyncer discover google_contacts
vdirsyncer sync

Installation

Terminal bash

openclaw install carddav-contacts
    
Copied!

💻Code Examples

khard "pilar" # Search for "pilar"

khard-pilar--search-for-pilar.txt
## List & Search (Explicit)

Use `list` if you need specific flags or if the implicit search doesn't match your config.

khard show --format yaml "john" # Show as YAML (good for editing)

khard-show---format-yaml-john--show-as-yaml-good-for-editing.txt
## Quick Field Lookup

Extract specific info (great for piping):

khard move "john" -a work # Move to another address book

khard-move-john--a-work--move-to-another-address-book.txt
## Configuration Setup

### 1. Configure vdirsyncer (`~/.config/vdirsyncer/config`)

fileext = ".vcf"

fileext--vcf.txt
### 2. Configure khard (`~/.config/khard/khard.conf`)

Critically, set `default_action = list` to enable quick search.
example.sh
khard list                       # List all contacts
khard list "john"                # Search explicitly
khard list -a work               # List only from 'work' address book
khard list -p                    # Parsable output (tab-separated)
example.sh
khard email "john"               # List emails only
khard phone "john"               # List phone numbers only
khard postaddress "john"         # List postal addresses
example.sh
khard new                        # Create new contact (interactive editor)
khard edit "john"                # Edit contact (interactive editor)
khard remove "john"              # Delete contact
khard move "john" -a work        # Move to another address book
example.txt
[pair google_contacts]
a = "google_contacts_remote"
b = "google_contacts_local"
collections = ["from a", "from b"]
conflict_resolution = "a wins"

[storage google_contacts_remote]
type = "carddav"
url = "https://www.googleapis.com/.well-known/carddav"
username = "[email protected]"
password.fetch = ["command", "cat", "~/.config/vdirsyncer/google_app_password"]

[storage google_contacts_local]
type = "filesystem"
path = "~/.local/share/vdirsyncer/contacts/"
fileext = ".vcf"
example.txt
[addressbooks]
[[google]]
path = ~/.local/share/vdirsyncer/contacts/default/

[general]
default_action = list
editor = vim
merge_editor = vimdiff

[contact table]
display = formatted_name
sort = last_name
example.sh
mkdir -p ~/.local/share/vdirsyncer/contacts
vdirsyncer discover google_contacts
vdirsyncer sync

Tags

#devops_and-cloud

Quick Info

Category Development
Model Gemini 2.0
Complexity One-Click
Author jcromero
Last Updated 3/10/2026
🚀
Optimized for
Gemini 2.0
💎

Ready to Install?

Get started with this skill in seconds

openclaw install carddav-contacts