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

yass-kween-dolor-ipsum

v1.5.0

Published

A themed placeholder-text generator. Lorem ipsum, but make it iconic — sassy, corporate, pirate, hacker, and more.

Readme

💅 yass-kween-dolor-ipsum

Lorem ipsum, but make it iconic.

A themed placeholder-text generator with a zero-dependency TypeScript core, a friendly CLI, and a slick interactive web demo — "Lorem & Ipsum," an editorial field guide to placeholder text built on the genuine Latin origins of lorem ipsum. Generate filler in twenty-seven distinct voices — from sassy Yass Kween to Legalese, Gen Z, Cat, and HOA Notice.

▶ Live demo

npm CI Deploy web demo Zero dependencies

Themes · Quick start · API · CLI · Web demo · Design


✨ Highlights

  • Twenty-seven hand-tuned voices (plus one hidden 🥚), each with its own vocabulary, openers, interjections, and accent color.
  • Blended voices — the signature themes are fusions: yassified Latin and huttese'd Latin, built on Cicero's genuine lorem ipsum source and transformed word-by-word.
  • A Latin ↔ Voice blend dial — slide from raw, untouched Cicero Latin to maximally extra ✨ themed voice; in the demo it recolors the whole page toward each voice's accent. (temperature in the API, the "Blend" slider in the demo.)
  • Per-word glosses, both waysgenerateRich() returns tokens carrying the Latin root behind each blended word (📜 dolorem · pain), and the plain-spoken voices ship a jargon glossary, so the demo decodes buzzwords too (💡 synergy · combined output, allegedly greater than the sum).
  • Clone a voice from any textvoiceFromText() derives a voice (distinctive vocabulary, sentence openers, cadence) from a sample of prose, so you can generate placeholder that sounds like your content. Paste a README, a tweet thread, or your group chat. The demo exposes it as "load your own voice." In the terminal: cat README.md | yass-ipsum --voiceprint.
  • Ipsumize the entire web — drag the demo's bookmarklet to your bookmarks bar, then click it on any website to rewrite all of its text in any voice, live, with a floating panel to switch voices or restore.
  • An editorial web playground — a 17-voice keyboard radiogroup, a blend dial that recolors the whole page, a compare gallery across every voice at one seed, a recent-rolls history, .txt / .json export, and shareable permalinks.
  • Deterministic output — pass a seed and get byte-for-byte reproducible text. Great for tests and shareable permalinks.
  • Four unitswords, sentences, paragraphs, or characters (trimmed to a word boundary), plus optional text or html output (HTML is escaped).
  • Zero runtime dependencies. The core is plain, portable TypeScript; the React demo is dev-only and the published package excludes it.
  • Works everywhere — library (ESM + CJS), CLI, and browser. Ships full type declarations.
  • Tested & typed — 151 tests, ~98% line coverage, strict TypeScript, ESLint + Prettier, CI.

🎭 Themes

| Theme | id | Vibe | | --------------------- | ------------ | -------------------------------------------------------------- | | 💅 Yass Kween | yass-kween | Yassified Latin — Cicero, but make it iconic. The house voice. | | 📜 Classic Lorem | classic | The timeless Latin-flavored filler everyone knows. | | 📈 Corporate Synergy | corporate | Leverage best-in-class buzzwords to circle back on copy. | | 🏴‍☠️ Pirate Shanty | pirate | Salty seafaring filler for landlubbers. Arr. | | 👾 Hacker Terminal | hacker | Cyber-thriller technobabble. We're in. | | 🚀 Startup Pitch | startup | It's like Uber, but for placeholder text. | | 🍃 Zen Garden | zen | Calm, mindful filler. Breathe in, breathe out. | | ⚖️ Legalese | legalese | Whereas the party of the first part hereby furnishes filler. | | 🐈 Cat | cat | Filler dictated by a cat at 3am. The audacity. | | 🎓 Academia | academia | It could be argued that this placeholder problematizes things. | | 😭 Gen Z | genz | ngl this placeholder is lowkey bussin, no cap fr fr. | | 📠 Boomer | boomer | Back in my day, placeholder cost a nickel. Sent from my iPad. | | 🛸 Conspiracy | conspiracy | Wake up, sheeple. The placeholder text is connected. | | 🧀 Dutch | dutch | Doe maar gewoon — lekker placeholder, hoor. Doei! | | 🎨 Artist Statement | artist | The work explores the liminal tension between filler and void. | | ☕ Third-Wave Barista | barista | A washed Ethiopian with notes of stone fruit and acidity. | | 🏡 HOA Notice | hoa | Your second courtesy notice regarding the placeholder mailbox. | | 🏒 Hockey Bro | hockey | Filler from a beauty in the room — wheel, snipe, celly. Ferda. | | 🗿 Looksmaxxer | looksmaxxer| Placeholder text, mogged. Mew, fix your canthal tilt, ascend. | | 🎙️ Sports Announcer | announcer | And the placeholder text goes ALL the way! Are you KIDDING me? | | 🍷 Real Housewives | housewives | Not here to make friends — but make it iconic. I have receipts.| | 👨‍🍳 Gordon Ramsay | ramsay | Placeholder so raw it's still mooing. It's an IDIOT SANDWICH. | | 🪑 IKEA Instructions | ikea | Some assembly required. Insert dowel A into placeholder B. | | 🤌 Italian Brainrot | brainrot | Tralalero tralala — unhinged filler. Bombardiro crocodilo. | | 🪞 Baudrillard | baudrillard| Hyperreal theory-speak. The map precedes the territory. | | 🤖 AI Slop | aislop | Let's delve into this rich tapestry. I hope this helps! | | ⛵ Rimbaud | rimbaud | Feverish symbolist vision. I is another. |

🚀 Quick start

npm install
npm run build      # build the library + CLI into dist/
npm run dev        # launch the interactive web demo (Vite)
npm test           # run the test suite

🧩 API

import { generate, ipsum } from 'yass-kween-dolor-ipsum';

// Three sassy paragraphs (the defaults).
generate();

// Two pirate sentences, reproducible thanks to the seed.
generate({ theme: 'pirate', units: 'sentences', count: 2, seed: 'ahoy' });

// HTML output, starting with the familiar "Lorem ipsum dolor sit amet".
generate({
  theme: 'corporate',
  units: 'paragraphs',
  count: 2,
  format: 'html',
  startWithLorem: true,
});

// Convenience helpers mirroring popular ipsum libraries.
ipsum.words(12, { theme: 'hacker' });
ipsum.sentences(4, { theme: 'zen', seed: 'calm' });
ipsum.paragraphs(3, { theme: 'startup' });

generate(options)

| Option | Type | Default | Description | | ------------------------------------------------------- | ---------------------------------------- | -------------- | ---------------------------------------------- | | theme | string \| Theme | 'yass-kween' | Theme id or a custom Theme object. | | units | 'words' \| 'sentences' \| 'paragraphs' \| 'characters' | 'paragraphs' | What to count (characters trims to a word boundary). | | count | number | 3 | How many units to produce (clamped to ≥ 1). | | seed | number \| string | — | Seed for deterministic output. | | format | 'text' \| 'html' | 'text' | Plain text or <p>-wrapped HTML. | | intensity / temperature | number (0–1) | theme default | The temperature dial — cold to hot. See below. | | startWithLorem | boolean | false | Begin with "Lorem ipsum dolor sit amet". | | emoji | boolean | true | Allow decorative emoji (Yass Kween's sparkles). | | minWordsPerSentence / maxWordsPerSentence | number | 5 / 15 | Sentence length bounds. | | minSentencesPerParagraph / maxSentencesPerParagraph | number | 3 / 6 | Paragraph length bounds. |

🌡️ The temperature dial

Every voice is a blend: each word starts as genuine Cicero Latin and is fused toward the voice, scaled by a temperature dial (01). Run it cold and the raw Latin shows through; run it hot and the voice takes over (Yass Kween additionally elongates, SHOUTs, and ✨sparkles✨). Use intensity or its alias temperature — both drive the same dial. (In the web demo this is the Blend slider, 📜 Latin ↔ the chosen voice.) Two voices stand apart: Classic is the familiar pure-Latin lorem ipsum, and the hidden Huttese mutates the Latin phonetically.

// ❄️ Cold (0°): the genuine lorem ipsum source resurfaces, untouched:
generate({
  theme: 'yass-kween',
  temperature: 0,
  units: 'sentences',
  count: 1,
  seed: 'gala',
});
// → "Vero magnam, cupiditate sed voluptatum molestias corporis dolor neque…"

// 🌋 Hot (100°): fully yassified Latin:
generate({
  theme: 'yass-kween',
  temperature: 1,
  units: 'sentences',
  count: 1,
  seed: 'gala',
});
// → "QUAERAT NUMQUAMYY slay CHARACTER tiara DIVINEE unstoppableeee✨ EXCEPTURI…"

Need clean filler? Set emoji: false (or --no-emoji on the CLI) to drop the sparkles — the words are otherwise identical, so it's safe to toggle.

The obscure origins. Lorem ipsum isn't gibberish — it's scrambled Latin from Cicero's de Finibus Bonorum et Malorum (45 BC), a treatise on pleasure and pain, where dolorem ipsum means "pain itself." Yass Kween is built right on top of that genuine source. Read any theme's backstory with theme.origin (or yass-ipsum --lore), and watch the mystery of lorem ipsum's origins.

🥚 A hidden Easter egg

There's a secret eighth voice: huttese'd Latin. Use the seed jabba (case-insensitive) and a certain Hutt takes over — Cicero's Latin gets mutated toward the language of the Hutts (c→k, v→w, stretched vowels) and sprinkled with genuine Huttese, whatever theme you asked for:

generate({ seed: 'jabba', units: 'sentences', count: 1 });
// → "Ee youdsa yatuka mooie wooluptatem, murishani, noostrum numkwam!"  (🐸)

In the web demo, typing jabba into the seed field is a whole moment: a Hutt rises, a guttural laugh rolls out, and an 8-bit cantina loop kicks in — all synthesized live in the browser with the Web Audio API (no audio files, nothing copyrighted). Bo shuda!

…and that's not the only secret in there. A certain rainbow-flavored seed lights the place up too. 🏳️‍🌈

Custom themes

A theme is just data, so rolling your own is trivial:

import { generate, type Theme } from 'yass-kween-dolor-ipsum';

const catIpsum: Theme = {
  id: 'cat',
  name: 'Cat',
  description: 'Filler text, but for cats.',
  emoji: '🐈',
  words: ['meow', 'purr', 'nap', 'knock', 'over', 'glass', 'treat', 'zoomies'],
  openers: ['Hooman,', 'Excuse me but'],
  interjections: ['Meow.', 'Feed me.'],
};

generate({ theme: catIpsum, units: 'sentences', count: 2 });

⌨️ CLI

# Run it without installing. The package ships two bins (yass-ipsum and
# yass-ipsum-mcp), so name the package with -p, then the command:
npx -p yass-kween-dolor-ipsum yass-ipsum --help

# ...or install once, then call `yass-ipsum` directly:
npm install -g yass-kween-dolor-ipsum && yass-ipsum --help
yass-ipsum [options]

  -t, --theme <id>        Theme to use (default: yass-kween)
  -p, --paragraphs <n>    Generate n paragraphs
  -s, --sentences <n>     Generate n sentences
  -w, --words <n>         Generate n words
  -C, --characters <n>    Generate n characters (trimmed to a word boundary)
  -c, --count <n>         Count for the chosen unit
  -u, --units <unit>      words | sentences | paragraphs | characters
      --seed <value>      Seed for reproducible output
  -i, --temperature <n>   Blend temperature, 0–1 (or 0–100). Cold = raw Latin
                          (alias: --intensity, --temp)
      --html              Wrap output in <p> tags
      --lorem             Start with "Lorem ipsum dolor sit amet"
      --no-emoji          Omit decorative emoji (e.g. Yass Kween's sparkles)
      --lore              Show the chosen theme's origin story
  -l, --list              List available themes
  -h, --help              Show help
  -v, --version           Show version
yass-ipsum                                  # three sassy paragraphs
yass-ipsum --theme corporate --paragraphs 2
yass-ipsum -t pirate -s 4 --seed ahoy       # reproducible pirate text
yass-ipsum --words 12 --html
yass-ipsum --characters 280                 # fit a 280-char budget
yass-ipsum --temperature 0.1                # cold — raw Latin resurfaces
yass-ipsum --no-emoji                       # clean placeholder text, no sparkles
yass-ipsum --lore                           # the obscure origins of lorem ipsum
yass-ipsum --seed jabba                      # 🥚 ...what's this?

🤖 MCP server (use it from AI agents)

The generator also ships as a Model Context Protocol server, so AI assistants — Claude Desktop, Cursor, and any MCP-capable client — can produce themed placeholder text as a tool call. The server speaks JSON-RPC over stdio and, true to the library, has zero runtime dependencies (no MCP SDK — the protocol is implemented by hand).

It exposes three tools:

| Tool | What it does | | ---------------- | --------------------------------------------------------------------------- | | generate_ipsum | Generate text — theme, units, count, seed, temperature, emoji, format. | | list_themes | Discover the available voices. | | theme_lore | Read a theme's origin story. |

Point your client at the yass-ipsum-mcp command. For Claude Desktop, add this to claude_desktop_config.json:

{
  "mcpServers": {
    "yass-ipsum": {
      "command": "npx",
      "args": ["-y", "--package=yass-kween-dolor-ipsum", "yass-ipsum-mcp"]
    }
  }
}

The --package (-p) flag is required because the package ships two bins (yass-ipsum and yass-ipsum-mcp); it tells npx which one to run.

Then ask the assistant for "three pirate paragraphs of lorem ipsum, seed ahoy" and it'll call the tool. Because output is seed-deterministic, results stay reproducible across runs.

🌐 Web demo

npm run dev starts a Vite dev server with an interactive playground: pick a theme, tune the unit/count, slide the blend dial, and copy the result with one click. Build a static bundle with npm run build:web (output in dist-web/).

It does more than copy-paste:

  • Compare gallery — see a same-seed specimen for every voice at once, and click to switch.
  • Recent rolls — a history strip of what you've generated; click any to jump back to it.
  • Export — download the specimen as .txt or .json.
  • Per-word hover — reveal Cicero's Latin under blended voices (📜) or decode the jargon in the plain-spoken ones (💡).
  • Text / HTML toggle, with HTML safely escaped.
  • Keyboard-quick — press C to copy, S to shuffle; fully responsive from phone to desktop.
  • Installable & offline — it's a PWA. Add it to your home screen or desktop and it keeps working with no connection — handy filler, always one tap away.

Every result is reproducible and shareable — the seed is always shown and editable, 🎲 Shuffle rolls a new one, and 🔗 Copy link yields a permalink that encodes the full state (?theme=…&seed=…&temp=…&units=…), so anyone who opens it sees the exact same output.

HTML output is escaped. When format: 'html', content is HTML-escaped (&, <, >), so even a custom theme's vocabulary can't inject markup.

🏗️ Design notes

  • src/rng.ts — a seeded mulberry32 PRNG with an xmur3 string hasher. Determinism is the backbone: it makes output reproducible and the generator fully testable.
  • src/themes/ — each theme is pure data implementing the Theme interface. Adding a voice means adding one file and one registry entry.
  • src/generator.ts — assembles words → sentences → paragraphs, layering in openers, interjections, commas, and varied punctuation. No theme-specific logic lives here; behavior is driven entirely by theme data.
  • src/cli.ts — a dependency-free argument parser with friendly errors, exported as a testable run(argv) function.
src/
  index.ts          # public API surface
  generator.ts      # words → sentences → paragraphs
  rng.ts            # seeded PRNG + helpers
  cli.ts            # command-line interface
  themes/           # one file per voice + a registry
web/                # Vite-powered interactive demo
test/               # vitest suite (rng, themes, generator, cli)

📜 Scripts

| Script | Description | | ------------------- | --------------------------------------------------- | | npm run build | Bundle library + CLI (ESM, CJS, .d.ts) with tsup. | | npm run dev | Interactive web demo (Vite dev server). | | npm run build:web | Static build of the web demo. | | npm test | Run the vitest suite. | | npm run coverage | Tests with a v8 coverage report. | | npm run typecheck | tsc --noEmit in strict mode. | | npm run lint | ESLint over the project. | | npm run check | Typecheck + lint + test (CI gate). |

❓ FAQ

What is this? A free, open-source lorem ipsum / placeholder-text generator — available as a zero-dependency TypeScript library, a CLI, and an installable web app. It generates dummy text in twenty-seven themed voices.

What actually is lorem ipsum? Not gibberish. It's scrambled Latin from Cicero's de Finibus Bonorum et Malorum (45 BC), a treatise on pleasure and pain — dolorem ipsum means "pain itself." This generator is built right on that genuine source, so you can dial from raw Cicero Latin up to a fully styled voice.

Is it free? Yes — MIT-licensed and open source.

Do I need to install anything? No. Use the live web app in any browser, press C to copy, and you're done. Developers can also npm install the library or run the yass-ipsum CLI.

Does it work offline? Yes. The web app is an installable PWA — add it to your home screen or desktop and it keeps generating placeholder text with no connection.

Can I get the same output every time? Yes. Pass a seed (in the API/CLI) or share the demo's permalink — output is deterministic, so the same seed and options always produce byte-for-byte identical text. Great for tests, snapshots, and design reviews.

Can I add my own theme? Absolutely — a theme is just a small data object. See Custom themes.

📦 Publishing

Releases are automated. The package ships only dist/, README.md, and LICENSE (via the files allowlist), and npm publish is gated by prepublishOnly, which re-runs the full check + build — so a broken build can never reach the registry.

To cut a release:

  1. Bump version in package.json and commit.
  2. Tag and push: git tag v1.2.3 && git push --tags.
  3. Publish a GitHub Release for that tag.

Notable changes for each version are recorded in CHANGELOG.md.

The release workflow then publishes to npm with provenance. It needs an NPM_TOKEN repository secret (an npm automation token) — the only one-time setup.

📄 License

MIT © Remi M.