Skip to content

API Reference

All functions are named exports from vietnamese-name-generator.

typescript
import { generate, parseName, addressCalculate } from 'vietnamese-name-generator';

A default namespace export is also available:

typescript
import vn from 'vietnamese-name-generator';
vn.generate({ seed: 42 });

Generation

FunctionReturnsDescription
generate(options?)INameResultSingle name with full metadata
generateMany(count, options?)INameResult[]Batch unique names
generateFullName(options?)stringSingle full name string
generateManyFullNames(count, options?)string[]Batch full name strings
generateEmail(options?)IEmailResultEmail from generated name
generateUsername(options?)IUsernameResultUsername from generated name
generateNickname(options?)INicknameResultTraditional protective nickname
generatePetName(options?)IPetNameResultVietnamese pet name
generateManyPetNames(count, options?)IPetNameResult[]Batch pet names
generateGenZNickname(options?)IGenZNicknameResultGenZ nickname (JP/KR/EN influenced)

generate(options?)

Generate a single realistic Vietnamese name with full metadata.

Parameters:

OptionTypeDefaultDescription
genderEGenderrandom'male', 'female', or 'unisex'
regionERegionrandom'north', 'central', or 'south'
eraEErarandom'traditional' or 'modern'
compoundNamebooleanfalseUse two-syllable given name
meaningCategoryEMeaningCategoryFilter by meaning category
withMiddleNamebooleantrueInclude middle name
seednumberDeterministic output
formatENameFormat | ENameFormat[]Format variants to include
styleTNameStyleCross-cultural style: 'japanese', 'korean', 'western', 'hybrid'
securebooleanfalseUse crypto-secure RNG

Returns: INameResult

typescript
interface INameResult {
  surname: string;
  middleName: string;
  givenName: string;
  fullName: string;
  romanized: IRomanizedName;
  gender: EGender;
  region: ERegion;
  era: EEra;
  formatted: Partial<Record<ENameFormat, string>>;
}

Example:

typescript
import { generate, EGender, ERegion } from 'vietnamese-name-generator';

// Basic usage
generate();

// With options
generate({ gender: EGender.Female, region: ERegion.South, seed: 42 });

// Cross-cultural
generate({ style: 'japanese', seed: 1 });
// { surname: 'Nguyen', middleName: 'Minh', givenName: 'Sakura', ... }

generateMany(count, options?)

Generate multiple unique names. Takes the same options as generate().

typescript
import { generateMany, EGender } from 'vietnamese-name-generator';

const listName = generateMany(10, { gender: EGender.Male, seed: 1 });

generateNickname(options?)

Generate a traditional Vietnamese protective nickname (ten xau de nuoi).

typescript
import { generateNickname } from 'vietnamese-name-generator';

generateNickname({ category: 'animal' });
// { nickname: 'Coc', meaning: 'toad', culturalNote: '...' }

generatePetName(options?)

Generate a Vietnamese pet name from 150+ names across 7 categories.

typescript
import { generatePetName } from 'vietnamese-name-generator';

generatePetName({ category: 'byFood' });
// { name: 'Pho', meaning: 'pho noodle soup', category: 'byFood' }

generateGenZNickname(options?)

Generate a GenZ-style nickname with 6 cultural styles.

Parameters:

OptionTypeDescription
namestringOptional input Vietnamese name
styleTGenZNicknameStyle'social-handle', 'jp-suffix', 'kr-suffix', 'cute', 'meme', 'english-viet'
seednumberDeterministic output
typescript
import { generateGenZNickname } from 'vietnamese-name-generator';

generateGenZNickname({ name: 'Nguyen Minh Anh', style: 'jp-suffix', seed: 1 });
// { nickname: 'Anh-chan', style: 'jp-suffix', origin: 'japanese-honorific', culturalNote: '...' }

generateGenZNickname({ style: 'social-handle', seed: 4 });
// { nickname: 'dreamy.linh', style: 'social-handle', ... }
StyleDescriptionExamples
social-handleTikTok/Instagram handlesminh.03, itz.linh, _an_
jp-suffixJapanese honorific suffixesLinh-chan, Minh-kun, An-sama
kr-suffixKorean honorificsMinh oppa, Linh unnie, An-ah
cuteVietnamese cute nicknamesBe An, Mimi, Gau, Xoai
memeVietnamese internet memesKevin Nguyen, Pho Mai Que
english-vietEnglish + VN surnameJenny Pham, Ryan Tran

Parsing & Validation

FunctionReturnsDescription
parseName(input)IParsedNameSplit full name into surname/middle/given
validateName(input)IValidationResultValidate Vietnamese name with specific failure reasons
detectGender(input)IGenderResultInfer gender from middle + given name signals

parseName(input)

typescript
import { parseName } from 'vietnamese-name-generator';

parseName('Nguyen Van An');
// { surname: 'Nguyen', middleName: 'Van', givenName: 'An', fullName: 'Nguyen Van An' }

validateName(input)

typescript
import { validateName } from 'vietnamese-name-generator';

validateName('Nguyen Van An');
// { valid: true, reasons: [] }

validateName('X');
// { valid: false, reasons: ['...'] }

detectGender(input)

typescript
import { detectGender } from 'vietnamese-name-generator';

detectGender('Nguyen Thi Mai');
// { gender: 'female', confidence: 'high', signals: { middleName: { gender: 'female', value: 'Thi' }, givenName: { gender: 'female', value: 'Mai' } } }

Address & Honorifics

See the dedicated Address & Honorifics page for the full deep dive.

FunctionReturnsDescription
addressCalculate(name, options?)IAddressResultVietnamese address term with pronoun pair
pronounPairGet(speakerAge, addresseeAge, options?)IPronounPairGet self/addressee pronoun pair
salutation(name, options?)ISalutationResultSimple honorific (deprecated, use addressCalculate)

Formatting & i18n

FunctionReturnsDescription
romanize(input)stringRemove Vietnamese diacritics
formatName(parts, format)stringFormat as full/abbreviated/reversed/slug
normalize(input)stringNFC Unicode normalization
accentInsensitiveMatch(text, query)booleanSearch ignoring diacritics
accentInsensitiveEqual(a, b)booleanCompare ignoring diacritics
sortVietnamese(names, options?)string[]Sort by given name (Vietnamese convention)
vietnameseNameComparator(options?)FunctionComparator for Array.sort()
VIETNAMESE_NAME_REGEXRegExpValidates Vietnamese characters

romanize(input)

typescript
import { romanize } from 'vietnamese-name-generator';

romanize('Nguyen Van An');
// 'Nguyen Van An'

romanize('Phan Ngoc Kim Trang');
// 'Phan Ngoc Kim Trang'

sortVietnamese(names, options?)

Sorts names by given name first (Vietnamese convention), not by surname.

typescript
import { sortVietnamese } from 'vietnamese-name-generator';

sortVietnamese(['Nguyen Van Binh', 'Tran Thi An', 'Le Van Cuong']);
// ['Tran Thi An', 'Nguyen Van Binh', 'Le Van Cuong']

accentInsensitiveMatch(text, query)

typescript
import { accentInsensitiveMatch } from 'vietnamese-name-generator';

accentInsensitiveMatch('Nguyen', 'Nguyen');
// true

Cultural Data

FunctionReturnsDescription
getHanViet(name)THanVietEntry | nullChinese character origin + meaning
getElementInfo(element)IElementInfoFive Elements relationships
getNameElement(name)EElement | nullWhich element a name belongs to
getNamesByElement(element, options?)string[]Names belonging to an element
getBirthYearElement(year)EElementElement from Heavenly Stems cycle
getMeaning(name)INameMeaningMeaning category, gender/region/era distribution
getSurnameInfo(surname)ISurnameInfoFrequency, rank, regional variants
getRegionalVariant(surname, region)stringConvert Hoang/Huynh, Vu/Vo
nameSimilarity(name1, name2)ISimilarityResultCompare names with diacritics/variant tolerance
getStatistics()IStatisticsResultDataset overview counts
getTopSurnames(options?)IRankedName[]Top N surnames by frequency

getHanViet(name)

Look up the Sino-Vietnamese (Han Viet) character origin and meaning of a name.

typescript
import { getHanViet } from 'vietnamese-name-generator';

getHanViet('Minh');
// { character: '明', meaning: 'bright/intelligent', alternates: [{ character: '銘', meaning: 'inscribe' }] }

getBirthYearElement(year)

Determine the Five Element from a birth year using the Heavenly Stems cycle.

typescript
import { getBirthYearElement } from 'vietnamese-name-generator';

getBirthYearElement(1990);
// 'kim' (Metal)

getNamesByElement(element, options?)

typescript
import { getNamesByElement, EElement } from 'vietnamese-name-generator';

getNamesByElement(EElement.Thuy);
// ['Thuy', 'Ha', 'Hai', 'Giang', 'Linh', ...]

getSurnameInfo(surname)

typescript
import { getSurnameInfo } from 'vietnamese-name-generator';

getSurnameInfo('Nguyen');
// { surname: 'Nguyen', frequency: 0.38, rank: 1, regionalVariants: { north: 'Nguyen', south: 'Nguyen' } }

Faker.js Compatible

A drop-in adapter for faker.js-style usage.

typescript
import { fakerVi } from 'vietnamese-name-generator';

fakerVi.person.firstName();        // 'An'
fakerVi.person.lastName();         // 'Nguyen'
fakerVi.person.fullName();         // 'Nguyen Van An'
fakerVi.person.sex();              // 'male'
fakerVi.person.prefix('female');   // 'Ba'
fakerVi.internet.email();          // 'an.nguyen@gmail.com'
fakerVi.internet.username();       // 'annguyen'

Enums & Types

Enum/TypeValues
EGender'male', 'female', 'unisex'
ERegion'north', 'central', 'south'
EEra'traditional', 'modern'
TNameStyle'japanese', 'korean', 'western', 'hybrid'
EMeaningCategory'strength', 'virtue', 'nature', 'precious', 'beauty', 'celestial', 'season', 'intellect', 'prosperity'
ENameFormat'full', 'abbreviated', 'reversed', 'slug'
EElement'kim' (Metal), 'moc' (Wood), 'thuy' (Water), 'hoa' (Fire), 'tho' (Earth)
EFormality'written-formal', 'spoken-formal', 'professional', 'casual', 'intimate'
EHonorificCategory'royal', 'mandarin', 'scholar', 'family', 'age-based', 'professional', 'religious', 'genz', 'regional'
EReligion'buddhism', 'catholicism', 'cao-dai', 'hoa-hao', 'folk'
EFeudalRank'emperor', 'consort', 'prince', 'princess', 'nobility', 'mandarin', 'scholar'

Released under the MIT License.