Model or dataset
ponponon/claude_code_src avatar
ponponon/claude_code_src

Reading Claude Code 2.1.88 through its own source map

On 2026-03-31, Claude Code accidentally uploaded a file containing its source code to the npm registry, in version 2.1.88; the cli.js.map file is 57MB, and Claude Code's source code sits inside its sourcesContent field - once extracted and restored, it's about 700,000 lines of code.

2,334 stars3,508 forksTypeScriptLicense varies

At a glance

What is it?
Version 2.1.88 of Claude Code shipped to npm with a 57MB source map, and ponponon/claude_code_src turns that map into a browsable src/ tree of 70w lines. It is a reading project rather than a running one: no package.json, an unresolved bun:bundle macro, and a build list the README still marks unfinished.
Who is it for?
This is a reading tool, not a runtime. Engineers who want to see how the Claude Code 2.1.88 CLI resolves commands, renders Ink components or wires up MCP get a genuinely useful tree here, and grouping the files by role beats what a raw map extraction gives.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • ponponon/claude_code_src2,334 ★ · +0
Star history
Repository2026-10-132026-11-07
ponponon/claude_code_src2.3k2.3k

0 Stars in the last 25 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

Recovering 70w lines from a 57MB source map

The npm package `@anthropic-ai/claude-code` went out as version 2.1.88 on 2026.03.31 carrying a `cli.js.map` of 57MB. That map was not stripped at publish time, and its `sourcesContent` field holds the original code rather than a pointer to it. The accident is the raw material here: read the `sources` list for the original file paths, read the matching `sourcesContent` strings for the text, write both back out to disk. What comes out is a directory described as a close reconstruction of the original code organisation, some 70w lines of TypeScript laid out under `src/`, which is Chinese shorthand for seven hundred thousand lines. Nobody retyped this and nobody had to unminify anything, so the recovered files read like ordinary application code with ordinary imports between them.

The audience is deliberately narrow. Engineers who want to understand how the CLI is put together, how its command system is shaped, and how the Model Context Protocol is wired into a terminal agent. Nobody is expected to run it.

Seven directories that split the CLI by role

Reading starts at the top level, which holds five entries: `README.md`, `claude-code-2.1.88.tgz`, `node_modules/`, `src/` and `vendor/`. Underneath, the recovered files are separated by role across seven directories. `src/entrypoints/` holds CLI entry and initialisation logic. `src/commands/` holds the command system, with named commands including `login`, `mcp`, `review` and `tasks`. `src/components/` holds terminal UI components built on React and Ink, while `src/ink/` holds the custom terminal rendering infrastructure those components sit on. `src/services/` carries business logic around strategy, sync and remote capabilities, `src/hooks/` handles interactive terminal state management, and `src/utils/` gathers authentication, file operation and process management helpers.

That split is the main argument for using this repository rather than the map itself. A flat extraction gives you hundreds of paths and no hint about which one boots the program and which one is a helper.

One loader mixes built-ins, skills, plugins and MCP

The first of four design points the README picks out is the command loader, described as a hybrid that mounts built-in commands together with dynamic skills, plugins and MCP commands in one place. That seam is where most readers arrive, because it decides what a terminal agent may do at all and lets a third-party server have a say in the answer.

Second comes the terminal interface: React components rendered through Ink rather than a line-oriented framework, with `src/components/` and `src/ink/` kept apart so the rendering substrate can be read without any one screen in view. The third is the Model Context Protocol implementation. The fourth is feature flags, which the README says run through the source as feature trimming and build-time control logic. A reader chasing the answer to how capabilities get switched off will find that thread early, and it explains a good deal about why the code has the shape it has.

Feature flags and bun:bundle block a clean build

The fourth point is also the practical obstacle. Build notes, filed by the author as still to be completed, list four steps for anyone who wants this tree to run: add `package.json` and configure dependencies, fill in the build toolchain, deal with the `bun:bundle` macro and the feature flags, then verify that the core commands work. None of the four is marked done. A macro name points at Bun's bundler macros, so any recovered module that calls it needs a build-time replacement before plain Node execution can reach it, and the flags then decide which branches survive into the output.

This is where the project stops being useful to most people. A tree recovered from a source map is a reading artefact, and the author frames running it as an experiment rather than a supported mode. That is an honest position, given the starting point: there was no repository here, only a compiler's side output that happened to survive packaging.

Getting 2.1.88 back after npm removed the version

Obtaining the original artefact takes a detour, because the official npm page for 2.1.88 has been removed. Asking npm for that exact version returns an error:

bash
npm install @anthropic-ai/[email protected]

The README routes around the removal with a Tencent mirror and one global install:

bash
npm install -g https://mirrors.cloud.tencent.com/npm/@anthropic-ai/claude-code/-/claude-code-2.1.88.tgz

Run that and npm fetches the same 2.1.88 tarball out of a third-party cache. Two limits deserve plain statement. The lifetime of that cache belongs to nobody involved in this repository, and the README warns in blunt terms that it may be gone at some point, with slow arrivals getting nothing. Because that URL is the only published route to the version, the install path disappears along with the cache. The next thing the README offers is the author's WeChat account for first-hand notices, which is not something you can pin a version against.

The tarball already sits inside the repository tree

Now the part that only turns up on a careful read. The top level already contains `claude-code-2.1.88.tgz`, the same artefact the mirror command downloads, so cloning this repository gives you the package the install section is chasing. Beside it sit `node_modules/` and `vendor/`, committed directories of dependency code. Yet the build notes in the same file tell you to add `package.json` and configure dependencies, and `package.json` is not one of the five top-level entries. So the tree either carries its dependency tree without a manifest, or it expects you to supply one, and nothing in the README settles which.

The practical consequence for a reader: clone first, then look. The mirror detour matters only if you want the running binary rather than the source, and the README does not describe a build output, a test or a run script anywhere.

An advertising block sits above the copyright notice

The README opens with a promotional block for DataEyesAI, an aggregator linked out with a `promoter_code=4qx9suz3` parameter, and it sits above the project's own important notice rather than after it. Everything below is more careful. The notice marks the repository as unofficial and says it does not speak for Anthropic, states that copyright, trademarks and related rights in the recovered code belong to Anthropic, limits the purpose to archival, structural analysis and source reading, and says republishing or commercial use means assessing the terms and legal risk yourself. GitHub reports no licence for this repository, which leaves default copyright in place over the recovered files, and the last push was on 2026-04-15. The one entry in the release record is 2.1.88 at 2026-04-01T03:38:25Z, a day later than the upload date the README gives.

Reading the map yourself skips the rebuilt layout

A second route to the same code exists, and it deserves naming because the project credits it in its closing acknowledgement. That acknowledgement is directed at the source map that shipped instead of being removed, which makes the map the real artefact and this repository one reading of it. Anyone holding the tarball can open `cli.js.map` and write the `sourcesContent` entries out as files, skipping this layout, skipping `node_modules/`, skipping the notes.

What differs is arrangement rather than bytes. Here the tree is grouped by role, so the command loader, the Ink substrate and the MCP wiring sit in separate directories a reader can open in turn. A direct extraction reproduces paths exactly as the bundler recorded them, which is faithful and says nothing about what a file is for. Another alternative is behavioural rather than textual: install 2.1.88 from the mirror and use the CLI, which answers what a command does and never how.

Editorial conclusion

This is a reading tool, not a runtime. Engineers who want to see how the Claude Code 2.1.88 CLI resolves commands, renders Ink components or wires up MCP get a genuinely useful tree here, and grouping the files by role beats what a raw map extraction gives. Anyone expecting a fork they can run should stop: no package.json, an unresolved bun:bundle macro, and a mirror that can vanish without warning. Clone the repository, check whether src/ holds the complete set of paths, and treat the Tencent mirror as a temporary route rather than a permanent install source.

Frequently asked questions

What is ponponon/claude_code_src and where does its code come from?

It rebuilds the Claude Code 2.1.88 CLI from the `sources` and `sourcesContent` fields inside a `cli.js.map` that shipped with the npm package on 2026.03.31, writing them out as a readable `src/` tree. The README puts the recovered size at 70w lines.

How do I install Claude Code 2.1.88 now that npm no longer serves it?

The official npm page for 2.1.88 has been removed, so `npm install @anthropic-ai/[email protected]` fails. The README points to a Tencent mirror tarball instead, and warns that the cache holding it may disappear.

Can I run the recovered Claude Code source?

Not as the repository stands. Its own list of remaining work has four steps: add `package.json` and configure dependencies, complete the build toolchain, handle the `bun:bundle` macro and the feature flags, then check that the core commands run.

How large is the source tree in claude_code_src?

The source map is 57MB and the README puts the recovered code at 70w lines, Chinese shorthand for seven hundred thousand lines. The repository is TypeScript and keeps its files under `src/`.

What does ponponon/claude_code_src say about reusing the recovered code?

The disclaimer marks the repository as unofficial, says copyright and trademarks in the recovered code belong to Anthropic, limits the project to research and structural reading, and says republishing or commercial use means assessing the terms and legal risk yourself.

Official sources

  1. Issues
  2. ponponon/claude_code_src on GitHub
  3. README
  4. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ponponon-claude-code-src.svg)](https://hysenlabs.com/projects/ponponon-claude-code-src)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/ponponon-claude-code-src.svg)](https://hysenlabs.com/projects/ponponon-claude-code-src)

Was this useful?