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

@releasekit/notes

v0.20.0

Published

Release notes and changelog generation with LLM-powered enhancement and flexible templating

Readme

@releasekit/notes

@releasekit/notes Version Downloads

Changelog and release notes generation from conventional commits

Generates CHANGELOG.md and release notes from @releasekit/version output, with optional LLM-powered enhancement and flexible templating.

Features

  • 📝 Conventional changelog — Keep a Changelog, Angular, or custom format
  • 🤖 LLM enhancement (optional) — enhance descriptions, summarize, categorize, or generate prose release notes
  • 🎨 Flexible templating — Liquid, Handlebars, or EJS; single-file or composable layout
  • 📦 Monorepo support — root aggregation, per-package changelogs, or both
  • 🔀 Two outputsCHANGELOG.md and RELEASE_NOTES.md are configured independently
  • 🔍 Dry-run mode — preview without writing files

Installation

npm install -g @releasekit/notes
# or
pnpm add -g @releasekit/notes

Note: ESM only. Requires Node.js 20+.

Quick Start

# Pipe from @releasekit/version
releasekit-version --json | releasekit-notes

# From a file
releasekit-notes --input version-data.json

# Preview without writing
releasekit-notes --dry-run

# With LLM enhancement
releasekit-notes --input version-data.json \
  --llm-provider openai \
  --llm-model gpt-4o-mini \
  --llm-tasks enhance,summarize

CLI Reference

releasekit-notes generate (default)

| Flag | Description | Default | |------|-------------|---------| | -i, --input <file> | Input file path | stdin | | --changelog-mode <mode> | Changelog location: root, packages, both | root | | --changelog-file <name> | Changelog file name override | CHANGELOG.md | | --no-changelog | Disable changelog generation | — | | --release-notes-mode <mode> | Enable release notes file output: root, packages, both | — | | --release-notes-file <name> | Release notes file name override | RELEASE_NOTES.md | | --no-release-notes | Disable release notes generation | — | | -t, --template <path> | Template file or directory | built-in | | -e, --engine <engine> | Template engine: handlebars, liquid, ejs | liquid | | --monorepo <mode> | Monorepo mode: root, packages, both | — | | --llm-provider <name> | LLM provider | — | | --llm-model <model> | LLM model | — | | --llm-base-url <url> | Base URL for openai-compatible providers | — | | --llm-tasks <tasks> | Comma-separated tasks: enhance, summarize, categorize, release-notes | — | | --no-llm | Disable LLM processing | — | | --target <package> | Filter to a specific package name | — | | --config <path> | Config file path | releasekit.config.json | | --regenerate | Regenerate entire file instead of prepending | false | | --dry-run | Preview without writing | false | | -v, --verbose | Verbose logging (repeat for more: -vv) | — | | -q, --quiet | Suppress non-error output | — |

releasekit-notes auth <provider>

Store an API key for an LLM provider.

releasekit-notes auth openai
releasekit-notes auth anthropic --key sk-ant-...

Keys are saved to ~/.config/releasekit/auth.json.

releasekit-notes providers

List available LLM providers.

Configuration

All options live under the notes key in releasekit.config.json:

{
  "$schema": "https://goosewobbler.github.io/releasekit/schema.json",
  "notes": {
    "changelog": {
      "mode": "root",
      "file": "CHANGELOG.md",
      "templates": {
        "path": "./templates/changelog/",
        "engine": "liquid"
      }
    },
    "releaseNotes": {
      "mode": "root",
      "llm": {
        "provider": "openai",
        "model": "gpt-4o-mini",
        "tasks": {
          "enhance": true,
          "summarize": true
        }
      }
    },
    "updateStrategy": "prepend"
  }
}

changelog and releaseNotes are configured independently. Set either to false to disable it entirely.

LLM Providers

LLM configuration lives under notes.releaseNotes.llm:

| Provider | Key | Auth | |----------|-----|------| | OpenAI | openai | OPENAI_API_KEY or releasekit-notes auth openai | | Anthropic | anthropic | ANTHROPIC_API_KEY or releasekit-notes auth anthropic | | Ollama | ollama | None (local) | | OpenAI-compatible | openai-compatible | Varies — set baseURL and apiKey |

LLM Tasks

| Task | What it does | |------|-------------| | enhance | Rewrites each changelog entry description to be clearer | | summarize | Generates a one-paragraph summary of the release | | categorize | Groups entries into semantic categories (default set: Breaking, New, Changed, Fixed, Developer) | | releaseNotes | Generates full prose release notes (use as GitHub release body) |

Templates

Built-in Templates

| Name | Engine | Description | |------|--------|-------------| | keep-a-changelog | Liquid | Keep a Changelog format (default) | | angular | Handlebars | Angular-style changelog | | github-release | EJS | GitHub release notes format |

Custom Templates

# Single file
releasekit-notes --template ./my-changelog.liquid

# Composable directory (document + version + entry)
releasekit-notes --template ./templates/

See Templates guide for the full template context reference and authoring guide.

Monorepo Support

# Root changelog only (aggregates all packages)
releasekit-notes --changelog-mode root

# Per-package changelogs
releasekit-notes --changelog-mode packages

# Both root and per-package
releasekit-notes --changelog-mode both

See Monorepo guide for details on file placement and aggregation behaviour.

Programmatic API

@releasekit/notes can be used as a library in Node.js code.

With a VersionOutput object (recommended)

When integrating with @releasekit/version programmatically, pass the typed output directly — no JSON round-trip needed:

import { versionOutputToChangelogInput, runPipeline, loadConfig } from '@releasekit/notes';
import type { VersionOutput } from '@releasekit/version';

// versionOutput comes from getJsonData() after running VersionEngine
const input = versionOutputToChangelogInput(versionOutput);

const config = loadConfig('/path/to/project');
const result = await runPipeline(input, config, /* dryRun */ false);

// result.packageNotes — per-package rendered markdown, keyed by package name
// result.releaseNotes — per-package release notes (when configured)
// result.files        — file paths written to disk

From JSON

When reading version output from a file or stdin:

import {
  parseVersionOutput,      // from a JSON string
  parseVersionOutputFile,  // from a file path
  parseVersionOutputStdin, // from stdin
  runPipeline,
  loadConfig,
} from '@releasekit/notes';

const input = parseVersionOutputFile('./version-output.json');
const config = loadConfig();
const result = await runPipeline(input, config, false);

Key exports

| Export | Description | |--------|-------------| | versionOutputToChangelogInput(data) | Transform a VersionOutput to ChangelogInput directly | | parseVersionOutput(json) | Parse a JSON string into ChangelogInput | | parseVersionOutputFile(path) | Read a file and parse it into ChangelogInput | | parseVersionOutputStdin() | Read stdin and parse it into ChangelogInput | | runPipeline(input, config, dryRun) | Run the full notes pipeline (templates, LLM, file writes) | | loadConfig(projectDir?, configFile?) | Load notes config from releasekit.config.json |

Documentation

Getting Started

Guides

License

MIT