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

ckm-sdk

v2026.3.3

Published

CKM — Codebase Knowledge Manifest SDK. Auto-derived topics, progressive disclosure, CLI framework adapters. Powered by Rust.

Readme

CKM — Codebase Knowledge Manifest

Machine-readable operational knowledge for CLI tools. Any language. Any framework. One implementation.

crates.io npm license


What is CKM?

CKM bridges the gap between API documentation and actionable help. While --help gives you flags and llms.txt gives you API signatures, CKM tells you what your tool does, what concepts it has, what config controls what behavior, and what constraints are enforced.

A ckm.json manifest captures structured knowledge about a CLI tool. The CKM SDK reads it and provides:

  • Auto-derived topics — zero manual mapping
  • Progressive disclosure — 4 levels from discovery to full API dump
  • Human + machine output — terminal text for humans, JSON for LLM agents
  • Framework adapters — Commander.js, Click, Clap, Cobra, and more
$ mytool ckm calver

# Configures CalVer validation rules.

## Concepts

  CalVerConfig — Configures CalVer validation rules.
    format: CalVerFormat = YYYY.MM.DD
    preventFutureDates: boolean = true

## Operations

  validate() — Validates a CalVer string against formatting and date rules.
    @param version: Version string to validate.

## Config Fields

  calver.format: CalVerFormat = YYYY.MM.DD
  calver.preventFutureDates: boolean = true

Install

Node.js / TypeScript

npm install ckm-sdk
const { createCkmEngine, validateManifest } = require('ckm-sdk');
const fs = require('fs');

// Load your ckm.json (generated by forge-ts or hand-authored)
const manifest = JSON.parse(fs.readFileSync('docs/ckm.json', 'utf-8'));
const engine = createCkmEngine(manifest);

// Progressive disclosure
console.log(engine.getTopicIndex('mytool'));       // Level 0: topic list
console.log(engine.getTopicContent('calver'));     // Level 1: topic detail
console.log(engine.getTopicJson('calver'));        // Level 1J: structured JSON
console.log(engine.getTopicJson());               // Level 2: full index
console.log(engine.getManifest());                // Raw v2 manifest
console.log(engine.inspect());                    // Metadata and counts

Rust

cargo add ckm
use ckm::CkmEngine;

let data: serde_json::Value = serde_json::from_str(&manifest_json).unwrap();
let engine = CkmEngine::new(data);

println!("{}", engine.topic_index("mytool"));
if let Some(content) = engine.topic_content("calver") {
    println!("{}", content);
}

Python

pip install ckm  # (PyPI — coming soon, available via maturin develop)
from ckm import create_engine

engine = create_engine(open('docs/ckm.json').read())
print(engine.topic_index('mytool'))
print(engine.topic_content('calver'))

Architecture: Rust Core SSoT

CKM is implemented once in Rust and exposed to every language through thin FFI wrappers:

ckm.json v2 (input)
      │
      ▼
┌─────────────┐
│  rust-core  │ ← THE implementation (types, engine, migration, validation, formatting)
└──────┬──────┘
       │
   ┌───┼───┬───────┐
   │   │   │       │
   ▼   ▼   ▼       ▼
 napi  PyO3 CGo   Direct
 (npm) (PyPI)(Go) (Rust)

Why single-source? Four independent implementations of the same algorithm will diverge on edge cases. One implementation + mechanical wrappers eliminates drift by construction. When the algorithm changes, it changes once in Rust. All languages follow.

The ckm.json Manifest

A ckm.json file captures five dimensions of CLI tool knowledge:

| Section | What it answers | |---------|----------------| | concepts | What domain objects does this tool have? | | operations | What can I do with this tool? | | constraints | What rules are enforced? | | workflows | How do I accomplish multi-step goals? | | configSchema | What config controls what behavior? |

Generating ckm.json

With forge-ts (for TypeScript projects):

npx forge-ts build  # generates docs/ckm.json from TSDoc annotations

By hand (for any language):

{
  "$schema": "https://ckm.dev/schemas/v2.json",
  "version": "2.0.0",
  "meta": {
    "project": "my-tool",
    "language": "typescript",
    "generator": "hand-authored",
    "generated": "2026-03-29T00:00:00.000Z"
  },
  "concepts": [{
    "id": "concept-calver-config",
    "name": "CalVerConfig",
    "slug": "calver",
    "what": "Configures CalVer validation rules.",
    "tags": ["config"],
    "properties": [{
      "name": "format",
      "type": { "canonical": "string", "original": "CalVerFormat" },
      "description": "Calendar format.",
      "required": true,
      "default": "YYYY.MM.DD"
    }]
  }],
  "operations": [],
  "constraints": [],
  "workflows": [],
  "configSchema": []
}

Progressive Disclosure

CKM enforces four levels of output, each with a token budget:

| Level | Command | Audience | Budget | |-------|---------|----------|--------| | 0 | mytool ckm | Human/Agent discovery | 300 tokens | | 1 | mytool ckm calver | Drill-down | 800 tokens | | 1J | mytool ckm calver --json | Agent structured | 1200 tokens | | 2 | mytool ckm --json | Agent full index | 3000 tokens |

LLM agents get structured data under tight token budgets. Humans get formatted text. Same command, different flags.

API Reference

createCkmEngine(manifest)

Creates an engine from a parsed ckm.json or JSON string (v1 or v2). v1 manifests are auto-migrated.

Returns an engine with:

  • topicsCount — number of derived topics (property)
  • getTopicIndex(toolName?) — formatted topic list for terminal display (string)
  • getTopicContent(topicName) — formatted topic detail (string | null)
  • getTopicJson(topicName?) — structured JSON output (CkmTopicIndex, CkmTopic, or CkmErrorResult)
  • getManifest() — raw v2 manifest (CkmManifest)
  • inspect() — metadata and counts (CkmInspectResult)

validateManifest(data)

Validates data against the v2 schema. Returns { valid: boolean, errors: [{ path, message }] }.

migrateV1toV2(data)

Deterministic migration from v1 to v2 format. Returns a CkmManifest.

detectVersion(data)

Returns 1 or 2.

createManifestBuilder(project, language)

Creates a fluent builder for constructing valid v2 manifests (producer API).

Returns a builder with chainable methods:

  • generator(name), sourceUrl(url)
  • addConcept(name, slug, what, tags), addConceptProperty(...)
  • addOperation(name, what, tags), addOperationInput(...)
  • addConstraint(rule, enforcedBy, severity), addConfig(key, type, desc, required, default)
  • build() — returns JSON string
  • buildJson() — returns parsed object

Integrating CKM into Your CLI

Step 1: Generate or write ckm.json

Use forge-ts for TypeScript projects, or hand-author for any language.

Step 2: Install ckm-sdk

npm install ckm-sdk

Step 3: Wire into your CLI (3 lines)

const { createCkmEngine } = require('ckm-sdk');
const fs = require('fs');
const manifest = JSON.parse(fs.readFileSync('docs/ckm.json', 'utf-8'));
const engine = createCkmEngine(manifest);

// Add to your Commander.js program:
program
  .command('ckm [topic]')
  .option('--json', 'Machine-readable output')
  .action((topic, { json }) => {
    if (json) console.log(JSON.stringify(engine.getTopicJson(topic), null, 2));
    else if (topic) console.log(engine.getTopicContent(topic) || engine.getTopicIndex('mytool'));
    else console.log(engine.getTopicIndex('mytool'));
  });

That's it. Your users get mytool ckm [topic] with progressive disclosure.

Monorepo Structure

packages/
  rust-core/   ← THE SSoT: pure Rust library, all algorithms
  node/        ← napi-rs wrapper → npm: ckm-sdk
  python/      ← PyO3 wrapper → PyPI: ckm
  go/          ← CGo/WASM wrapper → Go modules
  cli-rs/      ← Rust CLI binary → crates.io: ckm-cli
conformance/   ← Test fixtures shared across all languages

Origin

CKM was born inside VersionGuard, a versioning enforcement tool. After proving the concept — auto-derived topics, progressive disclosure for LLM agents, zero-config integration — it was extracted into a standalone SDK.

License

MIT