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

@turbo-forge/cli-kit

v1.0.0

Published

Low-level utilities and configuration resolution for building high-performance CLI tools in monorepos.

Readme

@turboforge/cli-kit

Build monorepo-aware CLIs without rewriting config loading, workspace detection, and logging every time.

@turboforge/cli-kit exists because internal tooling usually starts as one script, then turns into five slightly different scripts with different root-detection rules, different config formats, and no shared mental model. This package gives Turboforge and downstream tools a common foundation.

Part of the Turboforge system:

  • use @turboforge/sync when the problem is keeping a repo aligned with its upstream shape
  • use @turboforge/cli-kit when the problem is building the repo-aware tools that operate inside that shape

Highlights

  • Resolve layered config from defaults, files, env, and CLI input.
  • Detect project roots and workspace packages without repo-specific glue code.
  • Share one logging and runtime foundation across multiple repo tools.

Why It Exists

Most CLI helpers are either too generic to understand monorepos or too entangled with one app to reuse cleanly.

@turboforge/cli-kit focuses on the boring parts every serious repo tool needs:

  • find the real project root
  • discover workspace packages
  • load layered config from the right place
  • log in a way that works for both humans and automation

Real Example

You are building repo doctor, release check, and docs sync commands for the same workspace.

Without a shared kit, each command re-implements:

  • "where is the repo root?"
  • "which packages belong to this workspace?"
  • "which config wins: default, file, env, or CLI flag?"

With @turboforge/cli-kit, those decisions become shared infrastructure instead of repeated code.

When To Use It

  • You are building internal or OSS CLIs that need monorepo awareness.
  • You want layered config resolution without writing a config loader from scratch.
  • You need a small foundation, not a full CLI framework.

When Not To Use It

  • You only need argument parsing.
  • Your tool does not care about workspaces, repo roots, or shared config.
  • You want a batteries-included command framework with prompts, subcommands, and plugin loading out of the box.

📦 Installation

[!TIP] This package (@turbo-forge/cli-kit) is an official alias of @turboforge/cli-kit.

We provide this package to offer shorter import paths and improved discoverability. While both packages provide identical functionality, @turboforge/cli-kit is the primary source of truth.

  • Use @turbo-forge/cli-kit if you prefer the shorter name or specific branding or ESM Only.
  • Use @turboforge/cli-kit for the most stable long-term reference and standard alignment.

| Feature | @turboforge/cli-kit | @turbo-forge/cli-kit | | --- | --- | --- | | Source Code | ✅ Primary | 🔗 Proxy | | Updates | Immediate | Synchronized (Immediately) | | Bundle Size | 100% | 100% (Zero overhead) | | Format | ESM + CJS | ESM Only | | Maintenance | ✅ Primary | 🔗 Proxy (inherits) | | Security | ✅ Primary | 🔗 Proxy (inherits) |

Security: Security audits are performed on the canonical package; this alias inherits all security patches automatically.


pnpm add @turboforge/cli-kit

or

$ npm install @turboforge/cli-kit

or

$ yarn add @turboforge/cli-kit

Optional Peer Dependencies

pnpm add -D jiti defu
  • jiti lets you load TypeScript config files at runtime.
  • defu gives you richer object merge behavior.

Example

import {
  createLogger,
  findProjectRoot,
  getWorkspacePackages,
  resolveConfig,
} from "@turboforge/cli-kit";

const logger = createLogger({ level: "info", name: "repo-doctor" });
const root = await findProjectRoot();
const packages = await getWorkspacePackages(root);

const config = await resolveConfig({
  name: "repo-doctor",
  defaults: { fix: false },
});

logger.info(`checking ${packages.length} packages`, config.fix);

What You Get

  • resolveConfig: layered config for repo tools
  • findProjectRoot: stable root detection
  • getWorkspacePackages: workspace discovery
  • createLogger: structured output for local use and automation

Ecosystem Fit

If Turboforge is about keeping a monorepo coherent, @turboforge/cli-kit is the layer you build that coherence on top of.