TypeScript / Node.js API

npm install @abhay557/indian-fakedata

Requires Node.js 18+. Zero runtime dependencies. ES module, type definitions included.

Core generation

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

// Generate 5 profiles
const profiles = generate({ count: 5 });

// Seeded + constrained
const tn = generate({
  count: 3,
  seed: '011',                    // numbers or strings
  constraints: {
    state: 'Tamil Nadu',
    gender: 'female',
    areaType: 'rural',
    minAge: 18,
    maxAge: 45,
  },
});

// Memory-efficient stream for large datasets
for (const p of generateStream({ count: 100000 })) {
  // process one by one
}

// Distribution summary (national religion frequencies, etc.)
const summary = getDistributionSummary();

GeneratorOptions

FieldTypeDescription
countnumberNumber of profiles (default 1)
seednumber | stringReproducibility seed (default random)
constraintsGenerationConstraintsDemographic filters (below)
includeProbabilityMetricsbooleanInclude probability chain (default true)

GenerationConstraints

FieldValues
statee.g. 'Maharashtra', 'Tamil Nadu'
gender'male' | 'female' | 'other'
religion'Hindu' | 'Muslim' | 'Christian' | 'Sikh' | 'Buddhist' | 'Jain'
castee.g. 'Brahmin', 'Maratha', 'Jat'
socialCategory'SC' | 'ST' | 'OBC' | 'General'
areaType'urban' | 'rural'
minAge / maxAgenumber (0–100)
educationEducationLevel string
occupationOccupationalSector string
maritalStatusMaritalStatus string
surnamePin an exact surname (used by family generation)

Enrichment API

import {
  generateEnriched,
  generateEnrichedStream,
  simulateOutcomes,
  generateNarrative,
  generateAllNarratives,
  generateAgentPersona,
} from '@abhay557/indian-fakedata';

const enriched = generateEnriched({
  count: 1,
  includeOutcomes: true,      // Layer 2: credit score, health risk, wages
  narrativeTypes: ['all'],    // Layer 3: loan apps, Hinglish chats, OPD records
  includeAgentPersona: true,  // Layer 4: LLM system prompt and worldview
  biasLevel: 0.3,             // 0.0 meritocracy to 1.0 max historical bias
})[0];

console.log(enriched.profile.firstName, enriched.outcomes.credit.creditScore);
console.log(enriched.agentPersona.systemPrompt);

User / Family / Persona (faker-style)

import {
  generateUser,
  generateUsers,
  generateFamily,
  generatePersona,
} from '@abhay557/indian-fakedata';

// One profile (README sample shape)
const user = generateUser({ seed: 7 });

// Many users from one seed
const users = generateUsers({ count: 5, seed: '011' });

// A highly educated female developer from Karnataka
const dev = generateUser({
  highlyEducated: true,
  gender: 'female',
  constraints: { state: 'Karnataka' },
});

// Whole household: spouse, parents, children, siblings
const family = generateFamily({ seed: '011' });
// family: { head, spouse?, parents: { father?, mother? }, children: [], siblings: [] }

// User + LLM-ready persona
const { user: u, persona } = generatePersona({ seed: '011' });
// persona.systemPrompt, persona.fullPrompt, persona.beliefs,
// persona.memorySeeds, persona.behaviorRules
console.log(user.educationTimeline);   // chronological school/college history
console.log(user.personalityTraits);   // descriptive traits from Big Five
console.log(user.moviePreferences);    // genres, languages, anime preferences
console.log(user.appearance);          // face, skin tone, eyes, hair, build
console.log(user.employmentTimeline);  // v2.0.9: chronological job spells
console.log(user.skills);              // v2.0.9: skills, certs, languages

Validation, privacy & personas (v2.0.9)

import {
  validateProfile,
  getProfileSchema,
  stripPII,
  generateAgentPersona,
} from '@abhay557/indian-fakedata';

const { valid, errors } = validateProfile(user);
const schema = getProfileSchema();          // versioned JSON Schema
const safe = stripPII(user);                // share-safe copy
const hindi = generateAgentPersona(user, { language: 'hindi' });

Exporters

import { generateEnriched, saveProfilesToFile, formatProfiles } from '@abhay557/indian-fakedata';

const dataset = generateEnriched({ count: 50, includeOutcomes: true });

saveProfilesToFile(dataset, './output.json', 'json');
saveProfilesToFile(dataset, './output.jsonl', 'jsonl');
saveProfilesToFile(dataset, './output.csv', 'csv');  // flattened automatically
const csvString = formatProfiles(dataset, 'csv');

Custom data

import { loadDatabase, getDefaultDatabase } from '@abhay557/indian-fakedata';

// Merge custom JSON files (states.json, religions.json, casteMap.json,
// firstNames.json, surnames.json, districts.json) from a directory
const db = loadDatabase('./my-data-dir');

Core types

DemographicProfile, GeneratorOptions, GenerationConstraints, ProbabilityMetrics, EnrichmentOptions, EnrichedProfile, Gender, EducationLevel, OccupationalSector, MaritalStatus, AreaType, SocialCategory, BloodGroup, DietaryPreference, EmploymentSector, RationCardType, HealthInsuranceType, DisabilityType, PoliticalLeaning, ReligiosityLevel, BigFivePersonality, CognitiveProfile, Interests, Habits, EducationDetails, CulturalProfile, HouseholdAssets, CompiledDatabase, SeededRNG, UserOptions, UsersOptions, FamilyOptions, FamilyUnit, SimulatedOutcomes, NarrativeDocument, AgentPersona.

Low-level utilities (advanced)

createRNG, weightedSample, weightedSampleFromRecord — for building custom generation logic on the same seeded RNG core.