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

codebase-map

v0.6.1

Published

A lightweight TypeScript/JavaScript code indexer that generates comprehensive project maps for LLMs

Readme

codebase-map

A lightweight TypeScript/JavaScript code indexer that generates comprehensive project maps optimized for LLMs like Claude.

Features

  • AST-based analysis - Accurate extraction of functions, classes, and constants
  • Dependency resolution - Tracks imports/exports and builds a complete dependency graph
  • Multiple output formats - Optimized for different project sizes and use cases
  • LLM-optimized - Formats designed to minimize token usage while preserving structure
  • Fast incremental updates - Update individual files without full re-scan
  • Works from any directory - Automatically finds project root
  • Flexible file filtering - Include/exclude patterns using glob syntax for precise control
  • Performance optimized - Built-in pattern caching and analysis tools

Installation

npm install -g codebase-map

Or add to your project:

npm install --save-dev codebase-map

Quick Start

# Generate index for your project
codebase-map scan

# Output formatted structure to stdout
codebase-map format

# Copy to clipboard (macOS)
codebase-map format | pbcopy

Commands

scan

Analyzes your codebase and generates a .codebasemap file.

codebase-map scan [options]

Options:
  -r, --root <path>      Root directory to scan (default: auto-detect)
  -o, --output <path>    Output file path (default: .codebasemap)
  -v, --verbose          Show detailed progress
  --include <patterns>   Include file patterns (glob syntax)
  --exclude <patterns>   Exclude file patterns (glob syntax)

format

Formats the index for LLM consumption (outputs to stdout).

codebase-map format [options]

Options:
  -f, --format <type>      Output format: auto|json|dsl|graph|markdown|tree
  -s, --stats              Show statistics to stderr
  --include <patterns...>  Include file patterns (glob syntax)
  --exclude <patterns...>  Exclude file patterns (glob syntax)

update

Updates the index for a specific file.

codebase-map update <file> [options]

Options:
  -r, --root <path>    Root directory

list

Lists files in the index with various filters.

codebase-map list [options]

Options:
  -d, --deps     Show files with most dependencies
  -e, --entries  Show entry point files
  -l, --leaves   Show leaf files (no dependencies)

Pattern Support

Control which files are analyzed using powerful glob patterns:

Basic Usage

# Include only specific directories
codebase-map scan --include "src/**" --include "lib/**"

# Exclude test files and documentation
codebase-map scan --exclude "**/*.test.ts" --exclude "**/*.spec.ts" --exclude "docs/**"

# Combine include and exclude patterns
codebase-map scan --include "src/**" --exclude "**/*.test.ts"

Advanced Examples

# Focus on specific packages in a monorepo
codebase-map scan --include "packages/*/src/**" --exclude "**/*.test.ts"

# Analyze only TypeScript files, exclude build outputs
codebase-map scan --include "**/*.ts" --include "**/*.tsx" --exclude "dist/**" --exclude "build/**"

# Complex filtering with multiple criteria
codebase-map scan \
  --include "src/**" \
  --include "lib/**" \
  --exclude "**/*.test.ts" \
  --exclude "**/*.spec.ts" \
  --exclude "**/fixtures/**" \
  --exclude "**/mocks/**"

Pattern Syntax

| Pattern | Description | Example | |---------|-------------|---------| | ** | Match any number of directories | src/** matches all files in src and subdirectories | | * | Match any characters except / | *.ts matches all TypeScript files | | ? | Match single character | test?.ts matches test1.ts, testa.ts | | [abc] | Match any character in brackets | test[123].ts matches test1.ts, test2.ts, test3.ts | | {a,b} | Match any of the alternatives | **/*.{ts,js} matches all TypeScript and JavaScript files |

Common Use Cases

Monorepo Analysis

# Analyze specific packages
codebase-map scan --include "packages/core/**" --include "packages/utils/**"

# Exclude all test files across packages
codebase-map scan --include "packages/*/src/**" --exclude "**/*.{test,spec}.{ts,js}"

Test File Filtering

# Exclude all test-related files
codebase-map scan --exclude "**/*.{test,spec}.{ts,tsx,js,jsx}" --exclude "**/tests/**" --exclude "**/__tests__/**"

# Include only test files for test coverage analysis
codebase-map scan --include "**/*.{test,spec}.{ts,tsx,js,jsx}"

Library Development

# Focus on source code, exclude examples and documentation
codebase-map scan --include "src/**" --exclude "examples/**" --exclude "docs/**"

# Include only public API files
codebase-map scan --include "src/public/**" --include "src/index.ts"

Pattern Performance Tips

  • Use specific patterns: src/**/*.ts is faster than **/*.ts for large codebases
  • Order matters: Place more restrictive include patterns first
  • Avoid overly broad excludes: Specific exclusions perform better than **/*
  • Cache benefits: Repeated pattern usage is automatically optimized

Pattern Analysis

Use --verbose mode to see pattern effectiveness:

codebase-map scan --include "src/**" --exclude "**/*.test.ts" --verbose

Output includes:

  • Pattern match statistics
  • Performance metrics
  • Warnings for ineffective patterns
  • Suggestions for optimization

Output Formats

The tool automatically selects the best format based on project size, or you can specify one:

| Format | Description | Best For | Token Reduction | |--------|-------------|----------|-----------------| | tree | ASCII art directory structure | Structure visualization (any size) | ~97% | | dsl | Domain-specific language | Most projects (≤5000 files) | ~90% | | graph | Dependency graph with signatures | Very large projects (>5000 files) | ~92% | | markdown | Human-readable markdown | Documentation | ~93% | | json | Compact JSON | Baseline | 0% |

Format Selection Guide

Choose the right format for your use case:

Tree Format (tree)

Best for: Visualizing project structure, understanding file organization

  • Token reduction: 97% (most efficient for structure)
  • Readability: Excellent visual hierarchy
  • Use cases: Understanding project layout, presenting structure to stakeholders, exploring unfamiliar codebases
  • Selection: Manual only - complements other formats by showing structure rather than code content
# Ideal for understanding project structure, exploring new codebases
codebase-map format --format tree

DSL Format (dsl)

Best for: Most development workflows, AI context

  • Token reduction: 90% (excellent balance)
  • Readability: High - shows functions, classes, dependencies clearly
  • Use cases: Code analysis, AI assistance, dependency tracking
  • Automatic selection: Projects with ≤5000 files (default choice)
# Perfect for typical applications and libraries
codebase-map format --format dsl

Graph Format (graph)

Best for: Large codebases, dependency analysis

  • Token reduction: 92% (maximum compression for content)
  • Readability: Good - focuses on relationships
  • Use cases: Large projects, dependency debugging, architecture analysis
  • Automatic selection: Projects with >5000 files
# Essential for large monorepos and enterprise applications
codebase-map format --format graph

Markdown Format (markdown)

Best for: Documentation, reports, human reading

  • Token reduction: 93% (great for docs)
  • Readability: Excellent - formatted for humans
  • Use cases: Project documentation, README generation, reports
  • Manual selection only
# Great for generating project documentation
codebase-map format --format markdown > PROJECT_STRUCTURE.md

Project Size Examples

# Understanding any project's structure
codebase-map format --format tree
# └── Shows clear visual hierarchy

# Typical web application (100-500 files)
codebase-map format --format dsl  
# └── Shows functions, dependencies, classes compactly

# Large enterprise application (1000-5000 files)
codebase-map format --format dsl --stats
# └── Monitor token usage with --stats

# Massive monorepo (>5000 files)
codebase-map format --format graph
# └── Maximum compression for context limits

Token Budget Planning

Recommended token allocations for AI context:

  • Small projects (<100 files): DSL format, ~2,100 tokens
  • Medium projects (100-1000 files): DSL format, ~2,100-21,000 tokens
  • Large projects (1000-2000 files): DSL format, ~21,000-42,000 tokens ⚠️
  • Very large projects (2000-5000 files): DSL format, approaching context limits
  • Enterprise projects (>5000 files): Graph format, auto-switches for maximum efficiency
  • Structure visualization (any size): Tree format, manual choice for exploring layout

Context window usage guidelines:

  • Keep project structure under 25% of available context
  • Use --stats flag to monitor token usage
  • Consider using pattern filtering for large projects

Filtering on Format

The format command supports filtering the already-generated index without needing to re-scan. This enables powerful workflows:

Basic Filtering

# Generate index once
codebase-map scan

# Format different views without re-scanning
codebase-map format --include "src/**" --exclude "**/*.test.ts"
codebase-map format --include "docs/**" --format markdown
codebase-map format --include "packages/core/**" --format dsl

Workflow Benefits

Scan once, format many times:

  • Generate comprehensive index: codebase-map scan
  • Create focused views: codebase-map format --include "src/components/**"
  • Exclude test files: codebase-map format --exclude "**/*.{test,spec}.ts"
  • Focus on specific packages: codebase-map format --include "packages/utils/**"

Performance advantages:

  • No file system scanning on format (instant filtering)
  • Apply different filters to same index data
  • Combine with any output format (--format dsl, --format tree, etc.)

Filtering Examples

Focus on Source Code

# Show only source files, exclude tests and build outputs
codebase-map format --include "src/**" --exclude "**/*.test.ts" --exclude "dist/**"

Monorepo Package Analysis

# Focus on specific packages
codebase-map format --include "packages/core/**" --include "packages/utils/**"

# Analyze one package in detail
codebase-map format --include "packages/ui/src/**" --format dsl

Documentation Focus

# Extract documentation structure
codebase-map format --include "docs/**" --include "*.md" --format tree

# Get markdown files in readable format
codebase-map format --include "**/*.md" --format markdown

Component Analysis

# Focus on React components
codebase-map format --include "**/*.{tsx,jsx}" --exclude "**/*.test.*"

# Analyze utility functions
codebase-map format --include "**/utils/**" --include "**/helpers/**"

Filtering Statistics

The format command shows filtering impact to stderr (doesn't affect stdout):

codebase-map format --include "src/**" --exclude "**/*.test.ts" --stats

# Output to stderr:
# --- Filtering Applied ---
# Files: 456 of 1,234
# Dependencies: 980 of 2,100
# Include patterns: src/**
# Exclude patterns: **/*.test.ts
#
# --- Statistics (dsl format) ---
# Size: 45.2 KB (89% reduction)
# Tokens: ~12,450 (27 per file)
# Files: 456

Advanced Filtering Patterns

# Complex monorepo filtering
codebase-map format \
  --include "packages/*/src/**" \
  --include "shared/**" \
  --exclude "**/*.{test,spec,mock}.{ts,tsx,js,jsx}" \
  --exclude "**/fixtures/**" \
  --exclude "**/__tests__/**"

# TypeScript-only analysis
codebase-map format \
  --include "**/*.{ts,tsx}" \
  --exclude "**/*.d.ts" \
  --exclude "node_modules/**"

# API-focused view
codebase-map format \
  --include "src/api/**" \
  --include "src/routes/**" \
  --include "src/middleware/**" \
  --format graph

Integration with Claude

Using with Claude Code Hooks

Configure hooks in .claude/settings.json to automatically include project structure when starting a session:

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {"type": "command", "command": "codebase-map format"}
        ]
      }
    ]
  }
}

Direct Usage

# Generate and copy structure to clipboard
codebase-map format | pbcopy
# Then paste into Claude conversation

Example Output

Tree Format (Structure Visualization)

project/
├── src/
│   ├── components/
│   │   ├── Button.tsx
│   │   └── Input.tsx
│   ├── utils/
│   │   └── helpers.ts
│   ├── index.ts
│   └── types.ts
├── tests/
│   └── setup.ts
└── package.json

DSL Format (Most Projects)

src/core/dependency-resolver.ts > types/index.ts
  cl DependencyResolver(9m,2p)
src/core/index-formatter.ts > types/index.ts
  fn toMinifiedJSON(index:ProjectIndex):string
  fn toDSL(index:ProjectIndex):string
  fn toGraph(index:ProjectIndex):string
  fn formatAuto(index:ProjectIndex):{ format: FormatType; content: string }
src/utils/find-project-root.ts > 
  fn findProjectRoot(startDir:string):string | null
  fn findIndexFile(startDir:string):string | null

Performance

  • Processes ~400 files/second
  • Generates ~3 tokens/file in tree format (97% reduction)
  • Generates ~29 tokens/file in DSL format (90% reduction)
  • Generates ~24 tokens/file in graph format (92% reduction)
  • Generates ~23 tokens/file in markdown format (93% reduction)
  • 90-97% token reduction vs compact JSON

Requirements

  • Node.js ≥ 18.0.0
  • TypeScript/JavaScript project

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Links