npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@fazelstudio/mimic-data

v1.4.1

Published

Lightweight, zero-dependency library for generating realistic dummy data with strong localization support

Readme

@fazelstudio/mimic-data

npm version CI License

A lightweight TypeScript library with zero runtime dependencies for generating realistic, locale-aware dummy data. Inspired by Faker.js, but smaller and focused on accurate localization.

Features

  • 🌍 212 Locales covering 150+ countries and territories across 6 continents
  • 🪶 Zero Dependencies — no runtime dependencies, ~650KB bundled with all locales
  • 📦 Tree-shakeable — import only what you need, unused code is eliminated
  • 🔧 TypeScript Native — strict types, generics, full IDE autocompletion
  • 🎯 Locale-First — native-language data, proper address formats, region-specific phone/zip patterns
  • 🔁 Reproducible — seeded random generator for deterministic test data

Installation

npm install @fazelstudio/mimic-data
yarn add @fazelstudio/mimic-data
pnpm add @fazelstudio/mimic-data
bun add @fazelstudio/mimic-data

Quick Start

import { createMimic } from '@fazelstudio/mimic-data';

const mimic = createMimic('id_ID');

console.log(mimic.identity.fullName());
// "Budi Santoso"

console.log(mimic.location.fullAddress());
// "Jl. Merdeka No. 123, RT 5/RW 3, Jakarta, DKI Jakarta 12345"

API Reference

createMimic(locale?: string): Mimic

Creates a Mimic instance for the specified locale. Defaults to en_US when omitted.

const mimic = createMimic('ja_JP');
const mimicDefault = createMimic(); // uses en_US

Module Exports

| Export | Description | |-----------------------|------------------------------------| | createMimic | Factory function to create Mimic | | Mimic | Main data generation class | | locales | Object with all locale definitions | | Random | Random number utility class | | localeRegistry | Locale registry for advanced usage | | getAvailableLocales | Returns canonical locale codes | | getAllLocaleCodes | Returns locale codes + aliases |

Mimic Methods

identity

| Method | Returns | Description | |----------------------|-------------|-------------| | firstName(gender?) | string | Random first name (male / female / random) | | lastName() | string | Random last name | | fullName(gender?) | string | Full name in locale format | | gender() | Gender | Random gender | | age(range?) | number | Age (default 18–65) | | dateOfBirth(range?) | Date | Date of birth | | person(gender?, range?) | PersonData | Complete person object | | persons(count, gender?, range?) | PersonData[] | Multiple persons | | uniquePersons(count, gender?, range?) | PersonData[] | Unique persons (by full name) |

location

| Method | Returns | Description | |--------|---------|-------------| | street() | string | Random street name | | city() | string | Random city | | state() | string | Random state / province | | zipCode() | string | Random zip / postal code | | fullAddress() | string | Formatted full address | | address() | AddressData | Complete address object | | addresses(count) | AddressData[] | Multiple addresses | | uniqueAddresses(count) | AddressData[] | Unique addresses |

physical

| Method | Returns | Description | |--------|---------|-------------| | height() | { value, unit } | Height (metric or imperial) | | weight() | { value, unit } | Weight (metric or imperial) | | data() | PhysicalData | Complete physical data | | datas(count) | PhysicalData[] | Multiple physical data |

work

| Method | Returns | Description | |--------|---------|-------------| | jobTitle() | string | Random job title | | department() | string | Random department | | data() | WorkData | Complete work data | | datas(count) | WorkData[] | Multiple work data | | uniqueJobTitles(count) | string[] | Unique job titles | | uniqueDepartments(count) | string[] | Unique departments |

contact

| Method | Returns | Description | |--------|---------|-------------| | email(firstName?, lastName?) | string | Email address | | phone() | string | Phone number (region-appropriate) | | website(name?) | string | Website URL from company name | | data(firstName?, lastName?) | ContactData | Complete contact data | | datas(count) | ContactData[] | Multiple contact data |

company

| Method | Returns | Description | |--------|---------|-------------| | name() | string | Company name | | industry() | string | Industry | | catchPhrase() | string | Company tagline | | data() | CompanyData | Complete company data | | datas(count) | CompanyData[] | Multiple company data |

Mimic instance-level

| Method | Returns | Description | |--------|---------|-------------| | setLocale(locale) | void | Switch locale at runtime | | generateMockEntities(count, options?) | MockEntity[] | Generate complete entities | | generateUniqueMockEntities(count, options?) | MockEntity[] | Unique complete entities |

Usage Examples

Seeded Random (Deterministic Data)

import { createMimic, Random } from '@fazelstudio/mimic-data';

Random.seed(12345);

const mimic = createMimic('en_US');
const person1 = mimic.identity.person('male', { min: 25, max: 35 });

Random.seed(12345);
const person2 = mimic.identity.person('male', { min: 25, max: 35 });

console.log(person1.fullName === person2.fullName); // true

Random.unseed();

Bulk Generation

import { createMimic } from '@fazelstudio/mimic-data';

const mimic = createMimic('id_ID');

const persons = mimic.identity.persons(100);
const addresses = mimic.location.uniqueAddresses(50);

const employees = mimic.generateMockEntities(200, {
  gender: 'female',
  ageRange: { min: 20, max: 40 },
});

Complete Employee Record

const mimic = createMimic('id_ID');

const employee = {
  ...mimic.identity.person('male', { min: 25, max: 40 }),
  ...mimic.location.address(),
  ...mimic.physical.data(),
  ...mimic.work.data(),
  ...mimic.contact.data(),
  ...mimic.company.data(),
};

console.log(employee);
// {
//   firstName: "Budi",
//   lastName: "Santoso",
//   fullName: "Budi Santoso",
//   gender: "male",
//   age: 32,
//   dateOfBirth: 1992-05-15T00:00:00.000Z,
//   street: "Jl. Merdeka",
//   city: "Jakarta",
//   state: "DKI Jakarta",
//   zipCode: "12345",
//   fullAddress: "Jl. Merdeka No. 123, RT 5/RW 3, Jakarta, DKI Jakarta 12345",
//   height: 175,
//   weight: 70,
//   heightUnit: "cm",
//   weightUnit: "kg",
//   jobTitle: "Software Engineer",
//   department: "Engineering",
//   email: "[email protected]",
//   phone: "+62 812-3456-7890",
//   website: "www.budi-santoso.com",
//   name: "Techflow Solutions",
//   industry: "Technology",
//   catchPhrase: "Empower innovative solutions"
// }

TypeScript Types

import type {
  Gender,
  MetricSystem,
  PersonData,
  AddressData,
  PhysicalData,
  WorkData,
  ContactData,
  CompanyData,
  AgeRange,
  LocaleDefinition,
} from '@fazelstudio/mimic-data';

const person: PersonData = mimic.identity.person('female');

Type Definitions

type Gender = 'male' | 'female';
type MetricSystem = 'metric' | 'imperial';

interface PersonData {
  firstName: string;
  lastName: string;
  fullName: string;
  gender: Gender;
  age: number;
  dateOfBirth: Date;
}

interface AddressData {
  street: string;
  city: string;
  state: string;
  zipCode: string;
  fullAddress: string;
}

interface PhysicalData {
  height: number;
  weight: number;
  heightUnit: 'cm' | 'ft';
  weightUnit: 'kg' | 'lb';
}

interface WorkData {
  jobTitle: string;
  department: string;
}

interface ContactData {
  email: string;
  phone: string;
  website: string;
}

interface CompanyData {
  name: string;
  industry: string;
  catchPhrase: string;
}

interface AgeRange {
  min?: number;
  max?: number;
}

Random Utilities

import { Random } from '@fazelstudio/mimic-data';

Random.seed(12345);

Random.int(1, 100);       // random integer
Random.float(1.5, 10.5, 2); // random float with decimal places
Random.boolean();         // true / false
Random.pick(['a', 'b']);  // random element
Random.shuffle([1, 2, 3]); // shuffled array copy
Random.multiple(fn, 10);  // generate multiple values
Random.unique(fn, 20);    // generate unique values

Available Locales

Americas (37)

en_US, es_US, en_CA, fr_CA, es_MX, pt_BR, es_AR, es_CL, es_CO, es_PE, es_VE, es_EC, es_BO, es_PY, es_GT, es_CR, es_DO, es_CU, es_SV, es_HN, es_NI, es_PA, es_UY, en_JM, en_TT, en_GY, en_BZ, en_BS, en_BB, en_AG, en_DM, en_GD, en_KN, en_LC, en_VC, fr_HT, nl_SR

Europe (56)

en_GB, en_IE, ga_IE, cy_GB, de_DE, de_AT, de_CH, fr_CH, it_CH, fr_FR, fr_BE, nl_BE, it_IT, es_ES, ca_ES, pt_PT, nl_NL, de_LU, fr_LU, de_LI, ru_RU, pl_PL, tr_TR, sv_SE, nb_NO, da_DK, fi_FI, el_GR, cs_CZ, hu_HU, ro_RO, uk_UA, sk_SK, hr_HR, rs_RS, lt_LT, lv_LV, et_EE, bg_BG, is_IS, sq_AL, bs_BA, mk_MK, sl_SI, mt_MT, be_BY, sr_ME, ro_MD, el_CY, tr_CY, fo_FO, ca_AD, fr_MC, it_SM, it_VA, en_GI

Asia-Pacific (44)

zh_CN, zh_TW, zh_HK, ja_JP, ko_KR, id_ID, ms_MY, th_TH, vi_VN, km_KH, lo_LA, my_MM, mn_MN, en_SG, en_PH, en_AU, en_NZ, en_IN, hi_IN, bn_IN, si_LK, bn_BD, ne_NP, dz_BT, dv_MV, ur_PK, en_PK, ps_AF, kk_KZ, ky_KG, tg_TJ, tk_TM, uz_UZ, ka_GE, hy_AM, az_AZ, ms_BN, pt_TL, zh_MO, pt_MO

Middle East & Africa (75)

ar_SA, ar_AE, ar_EG, ar_MA, ar_DZ, ar_TN, ar_LY, ar_SD, ar_IQ, ar_KW, ar_QA, ar_BH, ar_OM, ar_YE, ar_JO, ar_LB, ar_SY, he_IL, fa_IR, ar_PS, ar_MR, ar_KM, ar_DJ, en_ZA, af_ZA, en_NA, en_BW, en_ZW, en_ZM, en_LS, en_SZ, en_NG, en_GH, en_SL, en_LR, en_GM, en_UG, en_KE, sw_KE, sw_TZ, rw_RW, so_SO, am_ET, mg_MG, fr_CM, fr_CI, fr_SN, fr_ML, fr_NE, fr_BF, fr_BJ, fr_TG, fr_GA, pt_AO, pt_MZ, pt_CV, pt_GW, pt_ST, en_MU, fr_SC, en_SC, fr_GN, es_GQ, en_SS, ti_ER

Every locale has multiple aliases (e.g. en_US / en / us / usa). See the source for the full list.

Development

# Install
npm install

# Build
npm run build

# Watch mode
npm run dev

# Run tests
npm test

# Type check
npm run type-check

# Lint & format
npm run lint
npm run format

Migrating from Faker.js

| Faker.js | mimic-data | |----------------------------|------------------------------| | faker.person.fullName() | mimic.identity.fullName() | | faker.location.street() | mimic.location.street() | | faker.phone.number() | mimic.contact.phone() | | faker.company.name() | mimic.company.name() |

mimic-data focuses on accurate localization and zero dependencies — if you need those, it's a natural fit.

License

MIT © Fazel


mimic-data — Realistic dummy data, localized. Everywhere.