vCard Generator
TextEverything runs locally in your browser — nothing is uploaded
Turn a list of “name, phone, email” into vCard text (`.vcf`) that imports into a contacts app. One person per line, the email is optional, and a name may contain spaces or CJK. Version 3.0 and 4.0 are both supported, and you can add an organisation and an address. Two details decide whether the import works: folding is done by UTF-8 bytes (RFC 6350 caps a line at 75 octets, and a CJK character is 3 bytes, so folding by character count would split a name in half), and `\`, `;`, `,` and newlines in the text must be escaped (`;` and `,` are structural separators in vCard, and leaving one unescaped makes a client read a name as two fields). Everything is generated locally.
Features
- One person per line: `name, phone, email` (email optional)
- vCard version 3.0 or 4.0
- Optional organisation (`ORG`) and address (`ADR`)
- Folded by UTF-8 bytes, at most 75 octets per line, so CJK is never split
- `\`, `;`, `,` and newlines escaped correctly
- 3.0 emits `TEL;TYPE=CELL`, 4.0 emits `TEL;TYPE=cell`
- Optionally strip spaces, hyphens and brackets from phone numbers (the `+` is kept)
- A contact count, with the whole `.vcf` copyable
How to use
- Type one “name, phone, email” per line
- Pick the vCard version and add an organisation or address if you need them
- The .vcf text appears as you type
- Copy it, save it as a file, and import it into your phone or contacts app
FAQ
- Why is a long name split across two lines?
- Because RFC 6350 caps a vCard line at 75 octets (bytes); anything longer is folded onto the next line, which begins with a single space. The tool folds by UTF-8 byte count, so a multi-byte CJK character is never cut in half. Folding by character count would fold a 40-character Latin name (40 < 75) but not a 40-character CJK address, which then breaks on import.
- Why escape semicolons and commas?
- Because `;` and `,` are structural separators in vCard: `N:Family;Given;;;` uses semicolons between the parts of a name, and commas separate multiple values. A single unescaped semicolon inside a name or organisation is read by the client as two fields. The tool escapes `\`, `;`, `,` and newlines so the import restores the original text.
- Does stripping phone separators remove the leading + of an international number?
- No. It removes spaces, hyphens, brackets and dots; the `+` and the digits are kept, because the `+` is part of the international prefix and dropping it can make the number undialable.
- Is anything uploaded?
- No. Parsing, folding and escaping all run in the browser and the page makes no requests.
Related tools
Mock Data
GeneratorsDescribe your fields once and get realistic mock records, exportable as JSON, CSV, TSV, SQL, XML, YAML or TOML. All generated in your browser.
CSV Converter
FormatConvert CSV / TSV and JSON both ways: delimiter detection, correct quoting and embedded newlines, Excel BOM stripped, numbers only when lossless.
JSON Formatter
FormatFormat, validate and minify JSON in a collapsible tree with syntax highlighting and line numbers. Search, edit, delete or convert to Python dicts.
Text Diff
TextCompare two blocks of text online and highlight added, removed and unchanged lines, so only the lines that changed are marked. Runs in your browser.
Word Counter
TextCount Chinese characters and English words separately, alongside characters, lines, real UTF-8 bytes, reading and speaking time, and SMS segment counts.
Text Cleaner
TextClean up a column pasted out of a log or spreadsheet: deduplicate, sort, drop blank lines, trim whitespace and strip line numbers, all in your browser.