Announcing @neokaal/codenames: Memorable Release Names for Modern DevOps
Modern software ships continuously. Between automated CI runs, nightly deployments, preview environments, and production rollouts, teams are constantly referencing artifacts and milestones.
Tracking releases solely by semantic version (v1.4.2) or commit hash (8a4b9e3) quickly leads to cognitive overload. In incident channels, Slack updates, and sprint discussions, commit hashes blur together and sterile version numbers fail to convey milestone identity. Major ecosystems have long recognized the power of memorable names—Ubuntu, Android, and macOS have humanized their releases for years.
Today, we are releasing @neokaal/codenames as an open-source npm package under the Apache-2.0 license.
@neokaal/codenames generates clean, memorable, two-word release names following the {color}-{subject} formula—like sapphire-badger, indigo-alder, or emerald-falcon.
From Web Tool to Standalone Library
@neokaal/codenames started as an interactive web tool hosted right here on our site at neokaal.com/open/codenames. It served a simple need: whenever we prepared a build or spin up an internal environment, we wanted a quick way to grab a clean, pronounceable codename.
As we used it across our internal workflows, we wanted the same generator in automated release scripts, GitHub Actions workflows, and command-line tools without scraping a webpage.
We decoupled the engine into a standalone library and published it to npm. In doing so, our web application was refactored to consume @neokaal/codenames directly as a dependency, removing duplicated generator logic and static color datasets from the frontend codebase while keeping the web playground fast and responsive. One core engine now powers the web UI, the command line, and Node.js applications.
Key Features
@neokaal/codenames is designed to fit directly into developer toolchains:
1. Curated, High-Quality Dataset
- 5,323 single-word colors, each paired with its authentic hex color code.
- 324 single-word animals and plants.
- Over 1.72 million unique combinations, strictly curated to ensure words are single tokens and easy to read and pronounce.
2. Built-in Multi-Casing
Different tools and contexts expect different casing conventions. The library and CLI format names out of the box:
kebab-case(sapphire-badger): Ideal for git branches, URLs, and subdomain tags.snake_case(sapphire_badger): Suitable for environment variables and configuration files.camelCaseandPascalCase(SapphireBadger): Ready for code identifiers, class names, or issue titles.Title Case(Sapphire Badger): Perfect for release presentations, slide decks, and sprint themes.
3. Built-in Release Tooling Presets (--export)
Connecting a version to a codename often requires updating multiple tools. With the --export option, the CLI generates copy-pasteable snippets for common DevOps conventions:
npx @neokaal/codenames --export v2.1.0 --casing kebab
This immediately outputs:
- Git tag:
git tag -a v2.1.0-indigo-alder -m "Release indigo-alder" - Docker image tag:
app:indigo-alder - Shell environment variable:
RELEASE_NAME=indigo-alder - Changelog markdown header:
## [v2.1.0] indigo-alder - 2026-10-05
4. Automation & Scripting Ready
Pipeable --json output makes it effortless to integrate into GitHub Actions, GitLab CI, ArgoCD, or custom bash scripts:
npx @neokaal/codenames --json
You can also filter by subject (--category animals or --category plants) and generate candidate batches with -c <count>.
Developer Experience & Quality
We build our tools with production rigor:
- Dual ESM & CJS: Full support for modern ES Modules and CommonJS environments.
- First-Class TypeScript: Ships with complete type declarations (
Codename,ExportFormats,GenerateOptions). - Comprehensive Testing: 100% test coverage with Vitest.
- Standards & Code Quality: Adheres to Google TypeScript Style (gts) and runs automated continuous integration on Node.js LTS (>=20.0.0).
Quick Start
Using via npx or CLI
Run directly without installing:
# Instant random codename
npx @neokaal/codenames
# PascalCase plant name
npx @neokaal/codenames --category plants --casing pascal
# Generate candidate options
npx @neokaal/codenames -c 3
To install globally:
npm install -g @neokaal/codenames
Using as a Node.js / TypeScript Library
Install the package:
npm install @neokaal/codenames
Import and use it in your project:
import { generate, getExportFormats } from "@neokaal/codenames";
// Generate a codename
const release = generate({ category: "plants", casing: "pascal" });
console.log(release.formatted); // 'EmeraldWillow'
console.log(release.hex); // '#50c878'
// Generate DevOps export snippets
const formats = getExportFormats(release.slug, "v1.2.0");
console.log(formats.gitTag); // 'git tag -a v1.2.0-emerald-willow -m "Release emerald-willow"'
console.log(formats.dockerTag); // 'app:emerald-willow'
Getting Started & Links
- Interactive Playground: Try it in your browser at neokaal.com/open/codenames.
- npm:
@neokaal/codenames - GitHub: github.com/neokaal/codenames
We hope @neokaal/codenames helps make your releases a little more memorable and your deployment logs a little more human.
Abhishek Mishra
Founder, Neokaal Tech Private Limited