Categorical name generator. DNS-safe names from fourteen geographic and natural-history lists, plus construct techniques (portmanteau, compound, clip, affix, backform, phonosym, acronym).
CLI and HTTP API for humans and agents. Same seed and flags always produce the same name.
Requires Zig 0.15 or Nix with flakes.
# Nix
nix run github:alleneubank/nomen -- generate --count 5
# from source
git clone https://github.com/alleneubank/nomen
cd nomen
zig build -Doptimize=ReleaseSafe
./zig-out/bin/nomen generateLibrary consumers:
zig fetch --save git+https://github.com/alleneubank/nomenDev shell (Zig 0.15.2, zls, ziglint):
nix develop
zig build testnomen generate # one name (human in TTY, json otherwise)
nomen generate --count 5 --category rivers
nomen generate --strategy phrase --format json
nomen generate --strategy phrase:alliterative --count 5
nomen generate --strategy triple --count 3
nomen generate --strategy mnemonic --input 0xdeadbeefcafe
nomen generate --seed 42
nomen generate --strategy construct:portmanteau --input "spell,master"
nomen generate --strategy construct:compound --input "storm,forge"
nomen generate --strategy construct:phonosym --input "sharp" --count 5
nomen generate --strategy construct:affix --input "quill"
nomen generate --strategy construct:acronym --input "spell,practice,app"
nomen generate --dry-run
nomen categories
nomen serve --port 8080
# GET /generate?count=3&category=mountains&seed=42
# GET /categories
# GET /health
nomen --llms
nomen generate --help --format jsonmountains, rivers, deserts, canyons, islands, passes, moons, raptors, minerals, norse, volcanoes, forests, oceans, storms
| Strategy | Description |
|---|---|
thematic |
One word from a category |
phrase |
Adjective-noun (default pattern) |
phrase:noun_noun |
Noun-noun |
phrase:verb_noun |
Verb-noun |
phrase:alliterative |
Shared first letter, with fallback |
triple |
Three words |
mnemonic |
Deterministic pair or triple from hex/numeric input |
construct:portmanteau |
Blend two words at an overlap |
construct:compound |
Concatenate two words |
construct:clip |
First syllable + last syllable |
construct:affix |
Prefix or suffix |
construct:backform |
Strip a recognized suffix |
construct:phonosym |
Mood-tagged phonemes (sharp, soft, rhythmic) |
construct:acronym |
Pronounceable initials |
- JSON on non-TTY stdout;
--format json|jsonl|humanon every command --llmsmanifest with schemas and examples--help --format jsonon every subcommand--fieldsfilters output keys- Structured errors with
codeandmessage - stdout is data; stderr is messages
The generator also compiles to WebAssembly:
zig build wasm
python3 -m http.server -d site 4173Open http://127.0.0.1:4173. Visual system: DESIGN.md.
zig build test
zig build fmt
ziglint
lefthook install
zig build docsMIT