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

@usex/key-fleur

v0.2.0

Published

Generate beautiful, memorable, and poetic API keys and unique identifiers for your applications.

Downloads

20

Readme

KeyFleur

Poetic API Key Generation for Modern Developers

npm version TypeScript Zero Dependencies License: MIT Bundle Size

generateKeyFleur({ mode: "celestial", theme: "sigil" })
// → "Nebula-847-Galaxy" ✨

📖 Documentation🎮 Try Online🐙 GitHub Issues


Why KeyFleur?

Stop generating API keys that look like someone smashed their keyboard. Create beautiful, human-readable identifiers that your team will actually remember.

😴 Traditional Keys

kJ8#mP2qR9$vX7nL4wB6
aNm9Kp2QrX5vB8wL4jR7
7mK3$pQ9rN2xV8wL4jB6

✨ KeyFleur Keys

Luna-Eclipse-Nocturnal
Crystal-459-Amethyst
Sage-7f2a

Features

| 🎨 Beautiful | 🔧 Functional | 🚀 Developer Experience | |:---:|:---:|:---:| | 9 Generation Modes | Zero Dependencies | Full TypeScript Support | | 13 Themed Collections | URL-Safe Output | Comprehensive JSDoc | | Human-Readable Keys | Pattern Validation | Modern ESM/CJS Support |

🌈 Generation Modes

Choose from 9 different key generation patterns, each with its own aesthetic and use case.

🎭 Thematic Collections

From celestial space themes to steampunk mechanical vibes - 13 curated word collections.

🛡️ Production Ready

Zero dependencies, fully typed, tested, and ready for production use.


Quick Start

# npm
npm install @usex/key-fleur

# yarn
yarn add @usex/key-fleur

# pnpm
pnpm add @usex/key-fleur

# bun
bun add @usex/key-fleur

Basic Usage

import { generateKeyFleur } from '@usex/key-fleur';

// One-liner for a beautiful key
const key = generateKeyFleur();
console.log(key); // "Nyrae-Soliv-Ethae"

Configuration

// Customize your keys
const apiKey = generateKeyFleur({ 
  mode: 'sigil',      // Key pattern
  theme: 'celestial'  // Word theme
});
// → "Nebula-742-Comet"

// Generate multiple keys
const sessionKeys = generateKeyFleur({ 
  count: 5, 
  theme: 'oceanic' 
});
// → ["Wave-Coral-Deep", "Tide-Gull-Salt", ...]

Validation

import { isValidKeyFleur } from '@usex/key-fleur';

const result = isValidKeyFleur("Crystal-459-Gem");
// → { valid: true, mode: "sigil", parts: ["Crystal", "459", "Gem"] }

🎮 Try it live📚 Full API docs


🎨 Generation Modes

generateKeyFleur({ mode: 'haiku', theme: 'nocturnal' })
// → "Luna-Eclipse-Void"

Perfect for: API keys, memorable identifiers

generateKeyFleur({ mode: 'sigil', theme: 'crystalline' })
// → "Crystal-459-Gem"

Perfect for: Session tokens, transaction IDs

generateKeyFleur({ mode: 'seed', theme: 'forest' })
// → "Moss-4f2a"

Perfect for: Short codes, references

generateKeyFleur({ mode: 'lace', theme: 'oceanic' })
// → "wavefa-afevaw"

Perfect for: Artistic applications, unique IDs

| Mode | Example | Best For | |------|---------|----------| | haiku | Luna-Eclipse-Void | API keys, memorable IDs | | sigil | Crystal-459-Gem | Session tokens, transaction IDs | | seed | Moss-4f2a | Short codes, references | | lace | wavefa-afevaw | Artistic apps, unique IDs | | sonnet | Rosefa-Lilyli | User handles, project names | | rune | Oracle-Blade_dawn | Timestamped keys | | mantra | Sand-Sand-Dune | Meditation apps, repeated actions | | mirrora | af-fa | Minimal IDs, simple tokens | | quartz | Gear45.45raeG | Complex keys, high entropy |

🎭 Thematic Collections

13 carefully curated word collections to match your application's aesthetic

🌌 celestial

nova, galaxy, nebula
eclipse, stellar, cosmos

🌊 oceanic

wave, coral, tide
nautilus, reef, pearl

🌲 forest

moss, grove, cedar
glade, fern, birch

🔮 crystalline

quartz, prism, facet
amethyst, opal, gem

🦇 nocturnal

luna, eclipse, shadow
twilight, void, silence

☀️ sunny

sol, gleam, radiant
aurora, shine, gold

🌸 floreal

rose, bloom, petal
garden, lily, orchid

⚙️ steampunk

gear, steam, valve
chronometer, brass, cog

🐉 mythic

oracle, phoenix, wyrm
grimoire, titan, rune

🏜️ desert

dune, mirage, ember
sirocco, ash, mesa

📚 library

scroll, codex, quill
archive, tome, script

🕳️ decay

rust, fracture, relic
erosion, wear, time
// Mix and match themes with any mode
generateKeyFleur({ theme: 'celestial', mode: 'haiku' })
// → "Nova-Galaxy-Nebula"

generateKeyFleur({ theme: 'steampunk', mode: 'sigil' })  
// → "Gear-847-Steam"

API Reference

generateKeyFleur(options?)

Primary interface for generating KeyFleur keys.

generateKeyFleur(options?: {
  mode?: ModeKey;     // Generation mode (default: "haiku")
  theme?: ThemeKey;   // Theme collection (default: "haiku") 
  count?: number;     // Number of keys (default: 1, max: 100)
}): string | string[]

Examples:

generateKeyFleur();                              // Single haiku key
generateKeyFleur({ mode: 'sigil' });            // Single sigil key
generateKeyFleur({ theme: 'oceanic' });         // Ocean-themed haiku
generateKeyFleur({ count: 10 });                // Array of 10 keys
generateKeyFleur({ 
  mode: 'quartz', 
  theme: 'crystalline',
  count: 3 
});                                              // 3 crystal quartz keys

isValidKeyFleur(key, mode?)

Validates KeyFleur key patterns.

isValidKeyFleur(
  key: string,
  mode?: ModeKey
): {
  valid: boolean;
  mode?: ModeKey;
  reason?: string;
  parts?: string[];
}

Examples:

isValidKeyFleur("Luna-Eclipse-Void");
// { valid: true, mode: "haiku", parts: ["Luna", "Eclipse", "Void"] }

isValidKeyFleur("Crystal-459-Gem", "sigil");
// { valid: true, mode: "sigil", parts: ["Crystal", "459", "Gem"] }

isValidKeyFleur("invalid-key");
// { valid: false, reason: "Key does not match any known KeyFleur pattern" }

Legacy API

import { poeticKey } from '@usex/key-fleur';

// Original simple interface (still supported)
poeticKey(mode?: ModeKey, theme?: ThemeKey): string

Use Cases

🔐 Security & Authentication

  • API keys that humans can actually read and remember
  • Session tokens with aesthetic appeal
  • Temporary access codes and passphrases
  • OAuth state parameters
  • CSRF tokens

🎮 Gaming & Creative

  • Game save IDs and world seeds
  • Character names and guild identifiers
  • Creative project codenames
  • Art piece references

📊 Business & Development

  • Document and content identifiers
  • Database record references
  • Test data generation
  • Demo and placeholder content
  • Customer reference numbers

💼 Why Choose KeyFleur?

Traditional Random Keys:

kJ8#mP2qR9$vX7nL4wB6
aNm9Kp2QrX5vB8wL4jR7

KeyFleur Keys:

Luna-Eclipse-Nocturnal
Crystal-459-Amethyst

Human-readable - Easy to communicate verbally
Memorable - Natural language patterns stick in memory
Beautiful - Aesthetically pleasing in UIs and logs
Unique - Collision-resistant across themes and modes
Functional - URL-safe, database-friendly, proper entropy

Advanced Usage & Customization

Batch Generation

import { generateKeyFleur, type ThemeKey, type ModeKey } from '@usex/key-fleur';

// Generate API keys for different environments
const keys = {
  development: generateKeyFleur({ theme: 'forest', count: 3 }),
  staging: generateKeyFleur({ theme: 'crystalline', count: 3 }),
  production: generateKeyFleur({ theme: 'celestial', count: 3 })
};

// Generate user session tokens
const sessionTokens = generateKeyFleur({ 
  mode: 'seed',
  theme: 'nocturnal',
  count: 50 
}) as string[];

Custom Validation

import { isValidKeyFleur } from '@usex/key-fleur';

function validateApiKey(key: string, expectedFormat: 'sigil' | 'seed') {
  const result = isValidKeyFleur(key, expectedFormat);
  
  if (!result.valid) {
    throw new Error(`Invalid API key format: ${result.reason}`);
  }
  
  return result;
}

// Use in your application
try {
  const validation = validateApiKey("Crystal-459-Gem", "sigil");
  console.log(`Valid ${validation.mode} key with parts:`, validation.parts);
} catch (error) {
  console.error(error.message);
}

Extending KeyFleur

import { THEMES, MODES, type ThemeKey } from '@usex/key-fleur';

// Add custom themes
const customThemes = {
  ...THEMES,
  cyberpunk: ['neon', 'grid', 'cyber', 'matrix', 'pulse', 'neural']
} as const;

// Create custom generator
function customKeyFleur(theme: keyof typeof customThemes = 'haiku') {
  const words = customThemes[theme];
  const selected = words[Math.floor(Math.random() * words.length)];
  return `${selected}-${Date.now().toString(36)}`;
}

Technical Details

Architecture

KeyFleur is built with a modular architecture:

  • key-types.ts - TypeScript type definitions
  • theme-data.ts - Curated word collections (13 themes × ~30 words each)
  • string-utils.ts - Core utilities (syllable counting, random selection)
  • generation-modes.ts - 9 different key generation algorithms
  • index.ts - Main API with validation and error handling

Algorithms

  • Syllable Estimation - Vowel-counting heuristics for haiku mode
  • Pattern Generation - Deterministic transformations (reversals, mirroring)
  • Random Selection - Cryptographically adequate randomness via Math.random()
  • Validation - Regex-based pattern matching for all modes

Security Considerations

  • ⚠️ Not cryptographically secure - Uses Math.random() for generation
  • Adequate entropy - Large combination space across themes/modes
  • URL-safe - No special characters that break URLs or JSON
  • Collision-resistant - Very low probability of duplicates in practice

For cryptographic security, combine with additional entropy sources or use KeyFleur for non-security-critical identifiers.

Contributing

We welcome contributions! Here's how to get started:

Development Setup

git clone https://github.com/ali-master/key-fleur.git
cd key-fleur
npm install
npm run build
npm test

Adding New Themes

  1. Add your theme to src/theme-data.ts
  2. Update the ThemeKey type in src/key-types.ts
  3. Add tests and documentation

Adding New Modes

  1. Create your mode function in src/generation-modes.ts
  2. Add it to the MODES export
  3. Update the ModeKey type in src/key-types.ts
  4. Add validation pattern to isValidKeyFleur

License

MIT © Ali Torki