Three vCard Versions, and the Same Person in Each
Published 9/9/2026 · 3 min read · File tools
Daniel Okonkwo — Front-end developer and tech writer at OneKitly
Web performance · File formats
Checked against 3 sources
The version is on the second line of every card, right after BEGIN:VCARD, and it changes how the rest is written. In 2.1, still produced by older phones and mail clients, a type is a bare parameter: TEL;CELL and TEL;WORK;VOICE, no equals sign. In 3.0, which almost every address book exports and everything reads, the same line is TEL;TYPE=CELL and TEL;TYPE=WORK,VOICE. In 4.0, the current standard, many values become URIs: TEL;VALUE=uri:tel:+33612345678, and a birthday is written 19780412 rather than 1978-04-12. The viewer reads all three, which is why a card from a 2009 phone and one from this year's address book display side by side — but it does not rewrite them into each other, so a 4.0 phone number keeps its tel: prefix and a 4.0 birthday keeps its compact form. When you write, 3.0 travels furthest.
2.1 marks types without an equals sign, 3.0 is what everything reads, 4.0 writes some values as URIs — so a phone can arrive as tel:+33612345678, prefix included. Knowing which you have explains most import surprises.
Why three versions are all still in circulation
Address books are copied forward, not rewritten. A card created on a phone in 2008 has been exported, imported and re-exported a dozen times since, and every one of those steps preserved the version it was born in unless something deliberately upgraded it. The result is that a working address book is often a mixture, and a file of five hundred contacts can contain all three — which is why a reader that only handles one of them appears to lose contacts at random.
The parser here takes the parameters as they come — with an equals sign or without — which is what lets a mixed file open in one go. What it will not do is silently normalise a card from one version into another, because that would be an edit, and an edit you did not ask for is the last thing you want applied to five hundred contacts at once.
| Line | vCard 2.1 | vCard 3.0 | vCard 4.0 |
|---|---|---|---|
| Mobile | TEL;CELL: | TEL;TYPE=CELL: | TEL;TYPE=cell;VALUE=uri:tel: |
| Birthday | BDAY:19780412 | BDAY:1978-04-12 | BDAY:19780412 |
| Read by the viewer | Yes | Yes | Yes, prefix kept |
| Best for writing | No — legacy | Yes | Only if the destination asks for it |
Frequently asked questions
- How do I find out which version a file uses?
- Open it in any text editor and read the second line: VERSION:2.1, VERSION:3.0 or VERSION:4.0. A single .vcf can hold hundreds of cards and they can be of different versions, since a file is just cards written one after another — an address book assembled from several sources often is.
- My imported numbers start with tel:. How do I clean that up?
- That is a 4.0 file read literally. Export to CSV, remove the prefix with a find-and-replace across the phones column, and rebuild the .vcf from the corrected sheet — the round trip costs you the type labels, which a 4.0 URI number had already made awkward anyway. If you have only a handful, editing them in the destination is quicker.
- Do accented names and photos survive between versions?
- Names do: all three versions carry UTF-8 in practice, and the viewer decodes what it reads. Photos are a different matter — an embedded PHOTO is base64 inside the card and can make a single contact hundreds of kilobytes, and neither the CSV nor the JSON export carries it. If your cards have photographs, keep the .vcf as the copy of record.
Articles you may find interesting
All guides →Related tools
Sources
Spotted a mistake in this article?