nano-faker
Lightweight, tree-shakable fake data generation for modern JavaScript
Minimal Bundle Size
Core package < 1KB gzipped. Each additional package adds only ~500B. Import only what you need.
Fully Tree-Shakable
ESM-only with granular exports. Your bundler eliminates unused code automatically.
Deterministic Output
Same seed always produces same results. Perfect for snapshot testing and reproducible demos.
Zero Dependencies
No external packages. Works in browsers and Node.js without any additional setup.
TypeScript First
Written in TypeScript with full type definitions. Excellent IDE autocomplete support.
Modern ESM
Built for modern JavaScript. No legacy CommonJS baggage or compatibility layers.
Quick Example
import { setSeed } from '@nano-faker/core';
import { firstName, lastName } from '@nano-faker/person';
import { email } from '@nano-faker/internet';
// Set seed for deterministic output
setSeed(12345);
console.log(firstName()); // "Alison"
console.log(lastName()); // "Anderson"
console.log(email()); // "alison.anderson42@gmail.com"
Getting Started
Install and start using nano-faker in minutes
Installation
Install only the packages you need using your preferred package manager:
# Using pnpm (recommended)
pnpm add @nano-faker/core @nano-faker/person @nano-faker/internet
# Using npm
npm install @nano-faker/core @nano-faker/person @nano-faker/internet
# Using yarn
yarn add @nano-faker/core @nano-faker/person @nano-faker/internet
Available Packages
@nano-faker/core
Foundation package with seeded RNG and utilities
< 1KB@nano-faker/number
Numeric data generation (age, id, otp, range)
~500B@nano-faker/person
Person data with syllable-based names
~500B@nano-faker/internet
Email, username, domain, URL, IP generation
~500B@nano-faker/patterns
Format-based generation with placeholders
~500BBasic Usage
Import functions directly from packages:
import { setSeed, random, int, float } from '@nano-faker/core';
import { firstName, lastName, fullName } from '@nano-faker/person';
import { email, username } from '@nano-faker/internet';
// Set seed for reproducible results
setSeed(12345);
// Generate data
const name = fullName(); // "Marcus Rodriguez"
const addr = email(); // "marcus.rodriguez42@gmail.com"
const user = username(); // "marcus_rodriguez42"
Deterministic Testing
Use seeds for consistent test data:
import { setSeed } from '@nano-faker/core';
import { fullName } from '@nano-faker/person';
describe('User tests', () => {
beforeEach(() => {
setSeed(12345); // Same seed = same data
});
it('should create user', () => {
const name = fullName();
expect(name).toMatchSnapshot(); // Always passes
});
});
Next Steps
- Explore the API Reference for detailed documentation
- Try the Playground to experiment with all functions
- View Examples for common use cases
Interactive Playground
Test all functions with live output
Core
Number
Person
Internet
Patterns
API Reference
Complete documentation for all packages
@nano-faker/core
Foundation package with seeded random number generation and utilities.
setSeed(seed: number): void
Set the seed for deterministic random number generation.
Parameters:
seed- Positive integer seed value
setSeed(12345);
const value = random(); // Always same with same seed
random(): number
Generate a random float between 0 (inclusive) and 1 (exclusive).
Returns:
Random float [0, 1)
const value = random(); // e.g., 0.7234
int(min: number, max: number): number
Generate a random integer between min and max (both inclusive).
Parameters:
min- Minimum value (inclusive)max- Maximum value (inclusive)
const age = int(18, 65); // e.g., 42
const dice = int(1, 6); // e.g., 4
float(min: number, max: number, precision?: number): number
Generate a random float between min and max.
Parameters:
min- Minimum value (inclusive)max- Maximum value (exclusive)precision- Number of decimal places (default: 2)
const price = float(10.0, 100.0, 2); // e.g., 45.67
pick<T>(array: T[]): T
Pick a random element from an array.
Parameters:
array- Array to pick from
const color = pick(['red', 'green', 'blue']); // e.g., 'green'
shuffle<T>(array: T[]): T[]
Shuffle an array using Fisher-Yates algorithm. Returns a new array.
Parameters:
array- Array to shuffle
const shuffled = shuffle([1, 2, 3, 4, 5]); // e.g., [3, 1, 5, 2, 4]
@nano-faker/number
Numeric data generation utilities.
age(min?: number, max?: number): number
Generate a random age.
Parameters:
min- Minimum age (default: 18)max- Maximum age (default: 80)
const userAge = age(); // e.g., 42
const childAge = age(5, 12); // e.g., 8
id(length?: number): string
Generate a numeric ID.
Parameters:
length- Length of the ID (default: 8)
const userId = id(); // e.g., "47382910"
const orderId = id(12); // e.g., "847362910485"
otp(length?: number): string
Generate a one-time password.
Parameters:
length- Length of the OTP (default: 6)
const code = otp(); // e.g., "472839"
const pin = otp(4); // e.g., "8473"
range(min: number, max: number): number
Generate a number within range.
Parameters:
min- Minimum value (inclusive)max- Maximum value (inclusive)
const score = range(0, 100); // e.g., 73
@nano-faker/person
Person data generation with syllable-based procedural names.
firstName(): string
Generate a procedural first name.
const name = firstName(); // e.g., "Alison", "Marcus"
lastName(): string
Generate a procedural last name.
const surname = lastName(); // e.g., "Anderson", "Rodriguez"
fullName(): string
Generate a full name (first + last).
const name = fullName(); // e.g., "Sarah Johnson"
gender(): string
Generate a random gender.
Returns:
One of: "male", "female", "non-binary", "other"
const g = gender(); // e.g., "female"
@nano-faker/internet
Internet-related data generation.
email(): string
Generate a random email address.
const addr = email(); // e.g., "sarah.johnson42@gmail.com"
username(): string
Generate a random username.
const user = username(); // e.g., "sarah_johnson42"
domain(): string
Generate a random domain name.
const d = domain(); // e.g., "example.com"
url(): string
Generate a random URL.
const link = url(); // e.g., "https://example.com"
ipv4(): string
Generate a random IPv4 address.
const ip = ipv4(); // e.g., "192.168.1.42"
@nano-faker/patterns
Pattern-based fake data generation.
fake(pattern: string): string
Generate fake data based on a pattern string.
Placeholders:
#→ Random digit (0-9)@→ Random lowercase letter (a-z)*→ Random alphanumeric character\→ Escape character
fake("USR-####-@@"); // e.g., "USR-4728-ab"
fake("###-##-####"); // e.g., "472-83-9102"
fake("***-***-***"); // e.g., "a7X-9Bz-K4m"
fake("\\#\\#\\#"); // "###" (escaped)
Examples
Common use cases and patterns
Testing with Snapshots
Use deterministic seeds for consistent test data:
import { setSeed } from '@nano-faker/core';
import { fullName, email } from '@nano-faker/person';
describe('User creation', () => {
beforeEach(() => {
setSeed(12345); // Same seed = same data
});
it('should create user with valid data', () => {
const user = {
name: fullName(),
email: email(),
};
expect(user).toMatchSnapshot();
// Snapshot will always match
});
});
Generating Test Data Arrays
Create arrays of fake data for testing:
import { setSeed } from '@nano-faker/core';
import { fullName, email } from '@nano-faker/person';
import { age } from '@nano-faker/number';
setSeed(12345);
const users = Array.from({ length: 10 }, (_, i) => ({
id: i + 1,
name: fullName(),
email: email(),
age: age(18, 65),
}));
console.log(users);
// Always generates same 10 users with same seed
Custom ID Formats
Use patterns to generate custom ID formats:
import { fake } from '@nano-faker/patterns';
// User IDs
const userId = fake("USR-####-@@@@");
// "USR-4728-abcd"
// Order numbers
const orderNum = fake("ORD-########");
// "ORD-47382910"
// License keys
const license = fake("****-****-****-****");
// "a7X9-BzK4-mP2q-R8vN"
// SSN-like patterns
const ssn = fake("###-##-####");
// "472-83-9102"
Mock API Responses
Generate realistic mock data for API development:
import { setSeed } from '@nano-faker/core';
import { fullName, email } from '@nano-faker/person';
import { age, id } from '@nano-faker/number';
import { ipv4 } from '@nano-faker/internet';
setSeed(Date.now()); // Different data each time
const mockUser = {
id: id(8),
name: fullName(),
email: email(),
age: age(18, 65),
lastLoginIp: ipv4(),
createdAt: new Date().toISOString(),
};
// Use in mock API handler
app.get('/api/users/:id', (req, res) => {
res.json(mockUser);
});
Seeded Randomization
Use seeds to create reproducible random data:
import { setSeed, shuffle, pick } from '@nano-faker/core';
const items = ['apple', 'banana', 'cherry', 'date', 'elderberry'];
// Same seed = same shuffle
setSeed(100);
console.log(shuffle(items));
// Always: ['cherry', 'apple', 'elderberry', 'date', 'banana']
setSeed(100);
console.log(shuffle(items));
// Same result again
// Different seed = different shuffle
setSeed(200);
console.log(shuffle(items));
// Different order
Combining Packages
Mix and match functions from different packages:
import { setSeed } from '@nano-faker/core';
import { firstName, lastName } from '@nano-faker/person';
import { domain } from '@nano-faker/internet';
import { fake } from '@nano-faker/patterns';
setSeed(12345);
// Create a complete user profile
const profile = {
firstName: firstName(),
lastName: lastName(),
username: `${firstName().toLowerCase()}_${fake("####")}`,
email: `${firstName().toLowerCase()}@${domain()}`,
userId: fake("USR-########"),
apiKey: fake("****-****-****-****"),
};
console.log(profile);