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

jabber

v1.6.0

Published

Pronounceable lorem ipsum alternative — fake words, names, emails and paragraphs, with zero dependencies.

Downloads

26,978

Readme

Jabber Node.js Package npm version StandWithUkraine RussianWarship

SWUbanner

Generate pronounceable fake words, names, emails and paragraphs that read like a real language — with zero dependencies. Unlike lorem ipsum, you can steer the output toward your own vocabulary with theme words.

Jabber builds words by alternating consonants and vowels, so everything it produces is sayable — lisuda, qikan, mubo hiru yug — rather than repeating the same Latin boilerplate on every page.

image

Try it live: CodeSandbox (JavaScript) · StackBlitz (TypeScript)

Why Jabber?

| | Jabber | lorem-ipsum | @faker-js/faker | | --- | --- | --- | --- | | Runtime dependencies | none | none | none | | Unpacked size | 15.7 kB | 40 kB | 2.9 MB | | Output | invented, pronounceable words | fixed Latin corpus | real words from locale data | | Steer output to your own vocabulary | yes, via theme words | no | limited | | Realistic structured data (addresses, dates, IBANs…) | no | no | yes |

Sizes are npm's reported unpacked size for lorem-ipsum 3.0.0 and @faker-js/faker 10.6.0 at the time of writing.

Reach for Jabber when you want filler text that looks like a language without looking like every other lorem ipsum block, and when you want a fraction of it to be your own domain vocabulary. Reach for faker when you need genuinely realistic structured data.

Installation

npm install jabber

Works in Node.js and in the browser. No runtime dependencies.

Quickstart

const Jabber = require("jabber");

const jabber = new Jabber();

jabber.createWord(6);         // "lisuda"
jabber.createWord(5, true);   // "Qikan"
jabber.createFullName();      // "Mr. Cepoz Jo"
jabber.createEmail();         // "[email protected]"
jabber.createParagraph(30);
// "Dupedo huyu lubil ducona belub qegorukup fad polisi mubo hiru yug. Mirucara cak
//  falu cacunubuq juca. Hudur puki licucu kudabi lo re binu temuper zimemis yuc
//  modutama tarab bogeraroda tolin."

Importing

Jabber is written in TypeScript and ships its own type declarations. Every import style works:

// CommonJS
const Jabber = require("jabber");
// TypeScript / ES modules
import Jabber from "jabber";

// or, equivalently
import Jabber = require("jabber");

Upgrading from 1.5.x or earlier? Those builds used export default, which compiles to exports.default, so require("jabber") returned { default: [class Jabber] } and new Jabber() threw TypeError: Jabber is not a constructor. As of 1.6.0 require("jabber") returns the class directly. require("jabber").default still resolves to the same class, so existing code keeps working.

Command line

No install needed — run it straight through npx:

npx jabber -w 9      # one 9-letter word
npx jabber -p 25     # a paragraph of 25 words
npx jabber -h        # help

| Flag | Description | | --- | --- | | -w <length> | Create a word of the given length | | -p <words> | Create a paragraph of the given number of words | | -h | Show help (also the default with no arguments) |

The CLI covers words and paragraphs. Names, emails, theme words and custom alphabets are available through the API.

API

new Jabber(themeWords?, themeWordDensity?, extraVowels?, extraConsonants?)

| Parameter | Type | Default | Description | | --- | --- | --- | --- | | themeWords | string[] | [] | Custom words that should appear in the output | | themeWordDensity | number | 3 | Roughly 1 theme word per this many words | | extraVowels | string | "" | Additional vowel characters | | extraConsonants | string | "" | Additional consonant characters |

Methods

| Method | Returns | Description | | --- | --- | --- | | createWord(length, capitalize?, avoidThemeWords?) | string | A word of length characters. capitalize (default false) uppercases the first letter. avoidThemeWords (default false) forces a generated word even when theme words are configured. | | createParagraph(words) | string | A paragraph of words words, split into sentences with capitalised openings and a trailing period. | | createFullName(salutation?) | string | A two-part name. salutation (default true) prefixes a random Mr. or Ms. . Never uses theme words. | | createEmail(customDomain?) | string | An address of the form word.word@domain. customDomain defaults to domain.com. Never uses theme words. |

const jabber = new Jabber();

jabber.createFullName();              // "Mr. Cepoz Jo"
jabber.createFullName(false);         // "Dolano Bucigulabu"
jabber.createEmail();                 // "[email protected]"
jabber.createEmail("jabber.io");      // "[email protected]"

Theme words

Theme words make filler text look like it belongs to a subject instead of reading as pure nonsense. Pass them to the constructor with a density:

const themeWords = [
  "Engagement",
  "Impressions",
  "Organic",
  "Reach",
  "Social graph",
];

const jabber = new Jabber(themeWords, 2);

jabber.createWord(6, true);   // "Impressions"
jabber.createParagraph(25);
// "Social graph Social graph nucene toreveb. Impressions jokuzonak. Culubo. Nutibopuw
//  Organic bedu Organic cocucajame Organic kucebuvi Engagement Engagement Impressions
//  Impressions Impressions pepobanif muhor. Genejuja Reach nif mepumeluci."

themeWordDensity is a 1-in-N chance per word, so lower means denser:

| Density | Chance any given word is a theme word | | --- | --- | | 1 | 100% — theme words only | | 2 | 50% — every other word | | 3 (default) | ~33% | | 10 | 10% | | 100 | 1% |

Two things to know:

  • A returned theme word ignores the length you asked for — createWord(6) may hand back "Social graph". Theme words are used verbatim.
  • Pass avoidThemeWords as the third argument when you need a generated word regardless: jabber.createWord(6, false, true) → "padazu", "lunora", "durize". This is why createFullName() and createEmail() never contain theme words.

Custom alphabets

The built-in alphabet is English. Add characters to shift the flavour of the output — useful for mocking up interfaces in another language:

// extra vowels "äöü", extra consonant "ß"
const jabber = new Jabber([], 3, "äöü", "ß");

jabber.createWord(8);
// "türabikü", "locäweco", "zicaheca", "cejumaju", "cätäbuco"

Characters are appended to the existing sets, so the more you add, the more often they appear relative to the defaults.

Notes and limitations

  • Output is not reproducible. Jabber uses Math.random() with no seeding, so every call differs. If you need stable values for snapshot tests, capture the output once and store it as a fixture.
  • Not cryptographically secure. Math.random() is not a CSPRNG. Never use Jabber to generate passwords, tokens, secrets or identifiers that must be unguessable.
  • Words are not real words. That is the point, but it means the output will not pass a spellcheck and is unsuitable where real dictionary words are required.

Performance

Jabber is extremely light weight, which makes it very performant.

image

Contributing

Issues and pull requests are welcome at dejavu1987/jabber. See CONTRIBUTING.md for setup, project layout and pull request guidelines, and CODE_OF_CONDUCT.md for community expectations.

git clone https://github.com/dejavu1987/jabber.git
cd jabber
npm install

npm test              # run the test suite
npm run test-coverage # run with a coverage report
npm run build         # compile TypeScript to build/

Contributors

Thank you to everyone who has put work into Jabber.

Avatar grid generated by contrib.rocks — it updates itself as new contributors land, and links through to the full contributors graph.

Special thanks to @Revadike, who spotted and fixed a formatting slip in these very docs (a333729) — small fixes to documentation are genuinely appreciated.

Routine dependency bumps are handled by Dependabot, which is why it appears in the commit log but not in the grid above.

Release history

See releases and tags for the full list.

  • 1.6.0 — require("jabber") now returns the class directly; dropped the coveralls dependency chain and cleared all npm audit findings; the published package no longer ships src/ or the test file
  • 1.5.2 – 1.5.3 — dependency updates
  • 1.5.1 — TypeScript support (demo)
  • 1.2.0 — added createFullName, createEmail and the avoidThemeWords flag

License

MIT © Anil Maharjan