v2.0 Released: 100% C++17 Conversion Complete

Zero-Allocation Name Generation for Every Universe

namgen is a high-performance command-line generator written in pure modern C++17. Combine customizable adjective and noun wordlists with custom casing, or invoke any of the 907 built-in procedural generators spanning 40 fantasy, sci-fi, historical, and gaming universes.

907
Generators
40
Universes / Themes
0 B
Heap Allocations
18s
907 Batch Execution
$curl -s https://raw.githubusercontent.com/joshuacox/namgen/refs/heads/main/scripts/install.sh | sh
namgen v2.0 // Procedural Universe Engine
C++17 • .rodata • Zero-Allocation
namgen Procedural Fantasy and Sci-Fi Name Generator Interface

Interactive Playground

Live In-Browser Name Engine

Running real procedural generators directly in your browser. Zero simulation—every click executes the actual JavaScript engine.

Combinator Options

Count (-c)5 names
namgen - bash terminal
$namgen -c 5
Live in-browser combinatorics: 42,000+ wordsInstant Client Execution
⚔️ Complete Tabletop Campaign Engine

DM Screen & Worldbuilding Studio

Everything a Dungeon Master needs on game night: 6-genre faction matrices, deep NPC dossiers with audio pronunciation, walk-in taverns with multi-tier rumors, 5-room procedural dungeons, and a magic item forge.

👑Sovereign / Ruler
--kings_and_queens
🔮High Sage / Arch-Mage
--wizards
⚔️Grand Champion
--knights
🏰Capital Citadel
--castles
🐉Guardian Dragon / Titan
--dragons
🗡️Sacred Relic / Blade
--swords
⛵Flagship Vessel
--naval_ships
🍺Waypoint Tavern / Haven
--taverns
Zero-Install In-Browser CLI

Interactive WebAssembly Terminal

Execute real C++17 namgen commands directly inside your browser. No terminal, compiler, or server round-trip required.

Try Presets:
wasm-sh — namgen.wasm (C++17 Emscripten)
Loading WebAssembly runtime...
namgen WebAssembly Runtime initialized (v1.0.0, 907 C++17 generators).
Type "namgen --help" or click any preset below to run real WebAssembly in your browser.
$

Architecture & Features

Engineered for Extreme Speed and Flexibility

A look under the hood of namgen’s C++17 design and performance optimizations.

🛡️

Zero Heap Allocation Engine

All word datasets are pre-compiled into immutable .rodata using static constexpr std::string_view tables. Dynamic branch switching uses lightweight ArrayView spans to avoid any runtime vector allocations.

⚡

907 Lore-Accurate Generators

Over 900 standalone procedural generators spanning 40 categories—from narrative character & planet descriptions to DnD, Star Wars, Warhammer, Elder Scrolls, Pokémon, and historical cultures.

🚀

Sub-Millisecond Execution

Compiled directly with GCC/Clang with -O2 optimization. All 907 generators can be executed sequentially in under 19 seconds, making namgen ideal for scripts, game development, and pipelines.

🧩

Decoupled Dynamic Registry

Clean C++ architecture replaces monolithic if/else blocks with a modular GeneratorRegistry. Dynamic registration powers command routing and automatic, categorized --help output.

🔤

Advanced Combinatorics

Generate combinations from built-in or custom wordlists with versatile casing styles (CapWords, camelCase, lowercase), arbitrary separators, and character exclusion filters.

🌐

WebAssembly & Node.js (`namgen.wasm`)

All 907 C++ generators compile to standalone WebAssembly via Emscripten. Includes an out-of-the-box Node.js CLI runner and full C-export interop for client-side web applications.

🐧

Unix Standard & Environment Config

Full support for shell environment variables (SEPARATOR, COUNT, ADJ_FILE, NOUN_FILE) and bundled with an extensive 900+ entry Unix manual page (man namgen).

Installation & Setup

Get Started in Seconds

namgen has zero external C++ dependencies besides the C++17 standard library.

Terminal — make
# 1. Clone the repository
git clone https://github.com/joshuacox/namgen.git
cd namgen

# 2. Build in parallel across all CPU cores
make -j$(nproc)

# 3. Install binary, man page, and assets
sudo make install
Compiler Requirement
GCC 7+ or Clang 6+ with C++17 support enabled (-std=c++17).
Asset Directory
Assets are looked up in /usr/local/share/namgen/assets or local repo directory.
Unix Manual Page
View system documentation anytime with man namgen.

CLI & Environment

Options & Configuration Reference

Fine-tune output format, casing, and word sources through command flags or shell environment variables.

Command-Line Options

Option FlagDescriptionDefault
-c, --count COUNTNumber of names to generate.Terminal height, or 24
-S, --seed NUMSeed random number generator deterministically for reproducible runs.std::random_device{}()
-u, --uniqueEnsure no duplicate names are emitted in the generated batch.false
-m, --match REGEXFilter generated names by regular expression pattern.None
--min-len NUM, --max-len NUMSet minimum and maximum character length constraints on generated names.None
--compose GEN1,GEN2Compose multiple generators together (e.g. fantasy-dragons,places-castles).None
--template STRINGTemplate format string for generator composition (e.g. "{1} of {2}")."{1} of {2}"
-i, --interactiveLaunch full-screen interactive terminal explorer UI with search and live rolls.false
--jsonOutput results as a structured JSON array of strings.false
--csvOutput results in CSV format with "name" column header.false
--slug, --kebabConvert generated names into URL-friendly lowercase kebab-case slugs.false
-s, --separator SEPCustom separator string inserted between adjective and noun."-"
-x, --null-separatorDo not print separator string; directly concatenates words.false
--cap, --capcasingCapitalize the first letter of both adjective and noun (PascalCase / CapWords).false
--camel, --camelcasingLower-case adjective, capitalize first letter of noun (camelCase style).false
-a, --adj-file, --adj FILEPath to custom adjective wordlist file (newline-delimited).assets/adjectives/*.list
-n, --noun-file, --noun FILEPath to custom noun wordlist file (newline-delimited).assets/nouns/*.list
-e, --exclude STRINGCharacters to strip from all generated words."-'"
--debugPrint debug diagnostics including word source paths and counters to stderr.false
-h, --helpDisplay usage instructions and dynamically enumerate all 907 procedural generators.—

Shell Environment Variables

Variable NameDescriptionDefault Value
$SEEDSets numeric seed for deterministic random number generation across runs.None
$SEPARATORSets the default separator string (e.g. export SEPARATOR="_")."-"
$NULL_SEPARATORWhen set to "true", disables the separator."false"
$CAPCASINGWhen set to "true", forces CapWords capitalization on both words."false"
$CAMELCASINGWhen set to "true", forces camelCase casing."false"
$COUNTOverrides default count of generated names.Terminal height
$ADJ_FILEPath to default adjective file.Random pick from ADJ_FOLDER
$NOUN_FILEPath to default noun file.Random pick from NOUN_FOLDER
$ADJ_FOLDERDirectory path containing adjective wordlists./usr/local/share/namgen/assets/adjectives
$NOUN_FOLDERDirectory path containing noun wordlists./usr/local/share/namgen/assets/nouns
$EXCLUDECharacters to strip from words."-'"
$DEBUGWhen set to "true", enables diagnostic stderr output."false"
40 Universes Colliding: Fantasy and Sci-Fi Realms of namgen
907 Modules Across 40 Factions & Real-World Cultures

Where Ancient Lore Meets Distant Galaxies

From Tolkien's Middle-earth, D&D multiverses, Warhammer 40,000, and Star Wars to ancient Norse dynasties, cyberpunk firearms, and narrative planet descriptions.

Directory of 907 Modules

Specialized Procedural Generators

Search and explore all 907 C++17 procedural name generator modules. Every module is compiled with zero runtime heap allocation into .rodata.

Showing 48 of 907 matching generators

Belts

armour
--armour-belts

Generate Armour Belts style names

Sample Output
• Ominous Bronze Belt
• Brutality Scaled Belt

Boots

armour
--armour-boots

Generate Armour Boots style names

Sample Output
• Walkers of Infernal Power
• Proud Titanium Spurs

Chests

armour
--armour-chests

Generate Armour Chests style names

Sample Output
• Vindicator Golden Greatplate
• Demon Batteplate of Shattered Illusions

Cloaks

armour
--armour-cloaks

Generate Armour Cloaks style names

Sample Output
• Vindictive Cape of Hatred
• Frozen Embroided Cape

Gauntlets

armour
--armour-gauntlets

Generate Armour Gauntlets style names

Sample Output
• Nightmare Demon Fists
• Jade Infused Gauntlets of the Phoenix

Helmets

armour
--armour-helmets

Generate Armour Helmets style names

Sample Output
• Shepherd of Patience
• Mended Crown of Fire Magic

Legs

armour
--armour-legs

Generate Armour Legs style names

Sample Output
• Voice of the Harvest
• Dragon Greaves of the Gods

Pauldrons

armour
--armour-pauldrons

Generate Armour Pauldrons style names

Sample Output
• Blight of Visions
• Spaulders of Swordbreaking

Shields

armour
--armour-shields

Generate Armour Shields style names

Sample Output
• Loyal Ironbark Bulwark
• Barbaric Light Shield

Vambraces

armour
--armour-vambraces

Generate Armour Vambraces style names

Sample Output
• Wicked Wristguards of Healing
• Warden's Wristguards of Stealth

Awokens

destiny
--destiny-awokens

Generate Destiny Awokens style names

Sample Output
• kuzux zunj
• coogric cojun

Cabals

destiny
--destiny-cabals

Generate Destiny Cabals style names

Sample Output
• sha'aurg
• zhunuch

Exos

destiny
--destiny-exos

Generate Destiny Exos style names

Sample Output
• Serpent-23
• Needle-5

Fallens

destiny
--destiny-fallens

Generate Destiny Fallens style names

Sample Output
• Jel
• Fol

Hives

destiny
--destiny-hives

Generate Destiny Hives style names

Sample Output
• krunuk
• rerdun

Humans

destiny
--destiny-humans

Generate Destiny Humans style names

Sample Output
• Fennblade
• Irastone

Vexs

destiny
--destiny-vexs

Generate Destiny Vexs style names

Sample Output
• iothas
• edhian

Angels

diablo
--diablo-angels

Generate Diablo Angels style names

Sample Output
• yasolil
• noril

Demons

diablo
--diablo-demons

Generate Diablo Demons style names

Sample Output
• dotriahr
• bruboilta

Khazras

diablo
--diablo-khazras

Generate Diablo Khazras style names

Sample Output
• toalmao
• shiggrulghun

Nephalems

diablo
--diablo-nephalems

Generate Diablo Nephalems style names

Sample Output
• nisul
• cuthmoes

Daleks

doctor_who
--doctor_who-daleks

Generate Doctor Who Daleks style names

Sample Output
• Just kidding. :) Enjoy this Easter egg.
• Voss

Gallifreyans

doctor_who
--doctor_who-gallifreyans

Generate Doctor Who Gallifreyans style names

Sample Output
• mawtreldomostractronn
• narnundudruglas

Ice Warriors

doctor_who
--doctor_who-ice_warriors

Generate Doctor Who Ice Warriors style names

Sample Output
• agrardok
• xadak

Raxacoricofallapatorians

doctor_who
--doctor_who-raxacoricofallapatorians

Generate Doctor Who Raxacoricofallapatorians style names

Sample Output
• Koop Full Klen Mulmideer-Grus Lagrereen
• Leern Null Mirm Polnadeen-Pof Makkeen

Silurians

doctor_who
--doctor_who-silurians

Generate Doctor Who Silurians style names

Sample Output
• tenrin
• lenlih

Sontarans

doctor_who
--doctor_who-sontarans

Generate Doctor Who Sontarans style names

Sample Output
• Killok Dyg the Aggressive
• Dothor Dugral the Crafty

Zygons

doctor_who
--doctor_who-zygons

Generate Doctor Who Zygons style names

Sample Output
• Damom
• Retan

Dwarfs

dragon_age
--dragon_age-dwarfs

Generate Dragon Age Dwarfs style names

Sample Output
• Nenek Saesten
• Sewethur Acan

Elfs

dragon_age
--dragon_age-elfs

Generate Dragon Age Elfs style names

Sample Output
• Necen
• Feymet

Humans

dragon_age
--dragon_age-humans

Generate Dragon Age Humans style names

Sample Output
• Brennan Arlington
• Dennis Cure

Qunaris

dragon_age
--dragon_age-qunaris

Generate Dragon Age Qunaris style names

Sample Output
• Metanat
• Durug

Frieza Clans

dragon_ball
--dragon_ball-frieza_clans

Generate Dragon Ball Frieza Clans style names

Sample Output
• Rhubarb
• Forost

Hakaishins

dragon_ball
--dragon_ball-hakaishins

Generate Dragon Ball Hakaishins style names

Sample Output
• Moonshi
• Tequi

Humans

dragon_ball
--dragon_ball-humans

Generate Dragon Ball Humans style names

Sample Output
• Geenz
• Coff

Others

dragon_ball
--dragon_ball-others

Generate Dragon Ball Others style names

Sample Output
• Sauce
• Pocu

Saiyans

dragon_ball
--dragon_ball-saiyans

Generate Dragon Ball Saiyans style names

Sample Output
• Planta
• Radichio

Skians

dragon_ball
--dragon_ball-skians

Generate Dragon Ball Skians style names

Sample Output
• Kale
• Piccolo

Tuffles

dragon_ball
--dragon_ball-tuffles

Generate Dragon Ball Tuffles style names

Sample Output
• Canta
• Temoya

Devas

dungeon_and_dragons
--dungeon_and_dragons-devas

Generate Dungeon And Dragons Devas style names

Sample Output
• Iaramrel
• Erinrul

Dragonborns

dungeon_and_dragons
--dungeon_and_dragons-dragonborns

Generate Dungeon And Dragons Dragonborns style names

Sample Output
• Lorvarax
• Wrahazar

Drows

dungeon_and_dragons
--dungeon_and_dragons-drows

Generate Dungeon And Dragons Drows style names

Sample Output
• Rizzen Helvirae
• Omanar Cobion'lyr

Dwarfs

dungeon_and_dragons
--dungeon_and_dragons-dwarfs

Generate Dungeon And Dragons Dwarfs style names

Sample Output
• Galrigg
• Horron

Eladrins

dungeon_and_dragons
--dungeon_and_dragons-eladrins

Generate Dungeon And Dragons Eladrins style names

Sample Output
• Sarnbin
• Quoratra

Elfs

dungeon_and_dragons
--dungeon_and_dragons-elfs

Generate Dungeon And Dragons Elfs style names

Sample Output
• Ariael
• Daragal

Githzerais

dungeon_and_dragons
--dungeon_and_dragons-githzerais

Generate Dungeon And Dragons Githzerais style names

Sample Output
• Kalag
• Farak

Gnomes

dungeon_and_dragons
--dungeon_and_dragons-gnomes

Generate Dungeon And Dragons Gnomes style names

Sample Output
• Jeston
• Samorn

Goliaths

dungeon_and_dragons
--dungeon_and_dragons-goliaths

Generate Dungeon And Dragons Goliaths style names

Sample Output
• Vaulig Lonehunter Uthenu-Kiaga
• Auman Dreamwanderer Inulalathi

Technical Deep Dive

Zero-Allocation C++17 Architecture

How namgen achieves instant startup, zero runtime heap allocations, and sub-millisecond name generation.

01 / STATIC CONSTEXPR

Immutable .rodata Tables

Every word, prefix, suffix, and title across all 907 generators is compiled as static constexpr std::string_view arrays directly embedded into the binary’s .rodata section. No JSON parsing, no filesystem reads, and zero startup latency.

02 / ARRAYVIEW SPANS

Zero-Heap Array Switching

To support runtime conditionals (such as male/female/neutral variants, or culture tables) without allocating std::vector, namgen uses a lightweight non-owning span:

struct ArrayView {
    const std::string_view* data;
    std::size_t length;
    constexpr bool empty() const { 
        return length == 0; 
    }
};
03 / DECOUPLED REGISTRY

GeneratorRegistry Design

Rather than maintaining thousands of lines of fragile if/else ladders in namgen.cpp, generators register their canonical name, aliases, description, and lambda runner into a centralized GeneratorRegistry.

C++ Engine Architecture & Zero-Allocation Data PipelineCache Locality Optimized
namgen High Performance C++ Engine Architecture Blueprint

Adding a New Generator in 3 Steps

  1. 1
    Create Header: Define your generator signature in src/<category>-<name>_lib.h:
    std::string generate_custom_name(std::mt19937& rng);
  2. 2
    Implement Module: Define your constexpr string tables and generation logic in src/<category>-<name>_lib.cpp using generator_common.h.
  3. 3
    Register in GeneratorRegistry: Add one registration entry in src/generator_registry.cpp:
    registerGenerator({
        "my_category-my_name",
        {"optional-alias"},
        "Generate My Name style names",
        [](std::mt19937& rng) { return generate_custom_name(rng); }
    });