Getting Started

Two native implementations, identical features and CLI:

RuntimePackageRegistryRequires
Node.js / TypeScript@abhay557/indian-fakedatanpmNode 18+
Pythonindian-fakedataPyPIPython 3.8+

Both are dependency-free and work offline. Current version: 2.1.0.

Install

npm install @abhay557/indian-fakedata      # TypeScript / Node.js
pip install indian-fakedata               # Python

First run — CLI

# Node.js
npx @abhay557/indian-fakedata -c 1

# Python (or globally installed Node package)
indian-fakedata -c 1

You get one complete profile: identity, biometrics, appearance (face, skin tone, eyes, hair, build), Aadhaar/PAN/voter IDs, address, religion, caste, language, education, occupation, income, household assets, psychology and more.

More examples

# 1,000 profiles as CSV
indian-fakedata -c 1000 -f csv -o profiles.csv

# 50K Tamil Nadu Hindus, JSONL
indian-fakedata -c 50000 -f jsonl -o tn.jsonl --state "Tamil Nadu" --religion Hindu

# A full family from one seed
indian-fakedata --family --seed 011

Seeds accept numbers or strings — -s 7 and -s "011" both work, and the same seed always reproduces the same output within a runtime.

First run — API

TypeScript

import { generate } from '@abhay557/indian-fakedata';

const profiles = generate({ count: 5 });
profiles.forEach(p => {
  console.log(`[${p.id}] ${p.firstName} ${p.lastName} (${p.gender}, ${p.age})`);
  console.log(`Location: ${p.district}, ${p.state} | Caste: ${p.caste}`);
  console.log(`Religion: ${p.religion} | Education: ${p.education}`);
});

Python

from indian_fakedata import generate

profiles = generate(count=5)

for p in profiles:
    print(f"[{p['id']}] {p['firstName']} {p['lastName']} ({p['gender']}, {p['age']})")
    print(f"Location: {p['district']}, {p['state']} | Caste: {p['caste']}")
    print(f"Religion: {p['religion']} | Education: {p['education']}")

What next?