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.
  • camelCase and PascalCase (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'

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