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

@coredirective/cf-dash

v0.1.0

Published

Claude Code session analytics dashboard

Readme

CodeForge Dashboard

Session analytics dashboard for Claude Code. Parses JSONL session files into a SQLite database and serves a Svelte 5 SPA for browsing sessions, conversations, plans, tasks, agents, and memory.

v0.1.0 — Ships with CodeForge v2.1.0.

Quick Start

# Development — starts the Bun backend (port 7847) and Vite frontend (port 5173)
bun run dev

# Development — starts only the Vite frontend dev server
bun run dev:web

# Build the SPA for production
bun run build

# Preview the production build
bun run preview

# Run tests
bun test

Requires Bun >= 1.0.0.

Architecture

The dashboard is a three-layer pipeline:

  1. Parser (src/parser/) — Reads ~/.claude/ session JSONL files, detects projects, extracts messages/tokens/tool calls, and writes everything into a local SQLite database at ~/.codeforge/data/dashboard.db.
  2. Server (src/server/) — A Bun.serve HTTP server that exposes a REST API over the database, watches for file changes via SSE, and runs memory analysis.
  3. Web (src/web/) — A Svelte 5 SPA built with SvelteKit's static adapter. Routes, components, and shared state live here.

Tech Stack

| Layer | Technology | |-------|------------| | Runtime | Bun | | Frontend | Svelte 5, SvelteKit (static adapter) | | Styling | TailwindCSS 4 | | Charts | LayerChart (d3-scale) | | Database | SQLite (bun:sqlite, WAL mode) | | Markdown | marked + shiki | | Build | Vite 8 | | Language | TypeScript 5 |

API Reference

All endpoints are defined in src/server/routes/api.ts.

GET Endpoints

| Path | Description | |------|-------------| | /api/projects | List all projects | | /api/projects/:id | Project detail | | /api/sessions | List sessions (filterable by project, model, since; paginated) | | /api/sessions/:id | Session detail (tokens, files touched, cost, agents) | | /api/sessions/:id/messages | Session messages (supports incremental fetch via afterId) | | /api/sessions/:id/plan | Plan associated with session | | /api/sessions/:id/context | Context snapshots (memories, rules) for session | | /api/sessions/:id/tasks | Tasks for the session's team | | /api/sessions/:id/agents | Subagents spawned by session | | /api/analytics/global | Global analytics (filterable by date range) | | /api/analytics/project/:id | Per-project analytics | | /api/plans | List all plans | | /api/plans/:slug/history | Plan version history | | /api/tasks | List all task teams | | /api/agents | List all agents across sessions | | /api/context | All context files (memories, rules) | | /api/search | Full-text search across messages (query, project, role filters) | | /api/ingestion/status | Parser ingestion status | | /api/memory/runs | List memory analysis runs | | /api/memory/runs/:id | Memory run detail (events, result) | | /api/memory/observations | List observations (filterable by project, category, status) | | /api/memory/observations/:id/history | Observation change history | | /api/memory/memories | List approved memories | | /api/memory/stats | Memory statistics | | /api/memory/stats-by-project | Observation stats grouped by project |

POST Endpoints

| Path | Description | |------|-------------| | /api/memory/analyze | Trigger memory analysis for a session | | /api/memory/maintain | Trigger maintenance for a project | | /api/memory/analyze-project | Trigger project-wide analysis | | /api/memory/observations/:id/approve | Promote observation to memory | | /api/memory/observations/:id/dismiss | Dismiss an observation | | /api/memory/memories/:id/revoke | Revoke an approved memory |

Database Schema

The SQLite database (~/.codeforge/data/dashboard.db) uses WAL mode. Core tables defined in src/parser/db.ts:

| Table | Purpose | |-------|---------| | projects | Detected project paths and names | | sessions | One row per session — tokens, timestamps, git branch, parent/agent info | | messages | Individual messages with role, tokens, model, and raw JSON | | messages_fts | FTS5 virtual table for full-text search | | tool_calls | Tool invocations extracted from assistant messages | | files_touched | Files read/written/edited per session | | history_entries | Session history with display text and project | | file_changes | Write/edit operations with content diffs | | plan_snapshots | Plan content captured at points in time | | context_snapshots | CLAUDE.md, memory, and rule file snapshots | | file_snapshots | Arbitrary file content snapshots | | subagents | Agent spawns linked to parent sessions | | memory_runs | Memory analysis run metadata and results | | observations | Extracted observations with status lifecycle | | memories | Promoted memories with category and confidence | | run_observations | Join table: runs to observations | | observation_history | Audit log of observation changes |

Project Structure

dashboard/
  bin/codeforge-dashboard    # CLI entry point (bash)
  src/
    parser/                  # Session file parsing and database
      db.ts                  # Schema, migrations, connection management
      types.ts               # TypeScript interfaces for messages/sessions
      queries.ts             # All database query functions
    server/                  # Bun HTTP server
      index.ts               # Server entry point
      routes/api.ts          # REST API route handlers
      memory-analyzer.js     # AI-powered memory extraction
      memory-sync.js         # Sync memories to MEMORY.md files
    web/                     # Svelte 5 SPA
      routes/                # SvelteKit file-based routes
      lib/                   # Shared components and utilities
      app.html               # HTML template
  tests/
    parser/                  # Parser unit tests
    server/                  # API and server tests
  mockups/                   # Static HTML mockups for design validation
  svelte.config.js           # SvelteKit config (static adapter)
  package.json

Design Decisions

  • Read-only — The dashboard never writes to ~/.claude/ session files. All state lives in its own SQLite database.
  • Dark mode only — No light theme. Simplifies the CSS and matches terminal-centric workflows.
  • Svelte 5 runes — Uses $state, $derived, $effect instead of Svelte stores. Global runes: true is NOT set in svelte.config.js (LayerChart incompatibility).
  • Fork, don't import — Patterns from cli/ are forked into the dashboard. The CLI is never imported as a dependency.
  • ISO 8601 UTC — All timestamps stored and displayed in UTC.
  • Static SPA adapter — SvelteKit builds to a static index.html with client-side routing, served by the Bun backend.
  • Session ID prefix matching — API endpoints accept partial session IDs and resolve them via prefix match.

Testing

bun test

Tests live in tests/ and cover:

| File | Coverage | |------|----------| | tests/parser/analytics.test.ts | Token analytics and aggregation | | tests/parser/cost.test.ts | Cost estimation logic | | tests/parser/project-detector.test.ts | Project path detection | | tests/parser/session-reader.test.ts | JSONL session file parsing | | tests/server/api.test.ts | API route handlers | | tests/server/event-bus.test.ts | SSE event bus | | tests/server/file-snapshots.test.ts | File snapshot capture |

License

GPL-3.0 — see LICENSE.