Contributor: Nikhil Kumar Rajak (@ryzrr) Organization: webpack · Project: webpack-doc-kit Mentors: Aviv Keller (@avivkeller), Claudio Wunder (@ovflowd), Sebastian Beltran (@bjohansebas) Teammates: Mohamed Shams El-Deen (@moshams272), Tushar Thakur (@TusharThakur04) Period: 25 May to 17 August 2026 The problem webpack's docs lived at webpack.js.org and every API change meant somebody updating them by hand.
Pages go stale and nobody notices until a reader does. webpack-doc-kit fixes that.
It takes webpack's TypeScript declarations, runs them through TypeDoc, hands the output to nodejs/doc-kit for linking and UI, and produces a site that regenerates itself.
We split the work three ways.
Shams took AST parsing and content, Tushar took routing and navigation and UI, and I took the operational side: how docs get generated on a release, versioned & deployed.
My six deliverables were PR-based doc sync, release-aware doc generation, versioned output folders, a deployment pipeline, CI validation before merge, and README fetch automation.
All six shipped.
Merged PRs in webpack-doc-kit 31 Lines added / removed +1,959 / −1,419 Distinct files touched 89 First / last merge 28 May (#110) / 14 Aug (#241) Merged PRs in other repos 2 Upstream issue filed and fixed 1 Everything below is merged into .
Nothing is open or pending.
The release pipeline webpack releases happen in .
The docs live in .
A release in one needs to produce updated docs in the other with nobody doing anything. #110 set up as the single source of truth everything downstream reads, plus the script that maintains it and the workflow that runs it.
My mentor proposed an object schema with , , , , and per entry.
Review cut it to a flat array of tag strings, because everything else is derivable from the semver string and position with already tells you which is latest.
Right call, and I didn't see it.
The script validates with , finds any entry with the same major, replaces in place or unshifts to the front.
The workflow runs it on and opens a draft PR, with every action SHA pinned.
That trigger was itself a review correction: I'd reached for something else before realising releases fire in a different repo entirely. #116 removed a input I'd added on the belief that cross-repo triggering needed it.
Review asked why.
It didn't.
Opening a PR to delete your own code is a bit humbling, but the workflow came out correct. webpack/webpack#21074 is the dispatching half, in the core repo.
It runs after release, finds in the published-packages list, and calls against webpack-doc-kit's with .
Review caught two things.
I'd interpolated a GitHub Actions expression straight into JavaScript, which moved to an env value parsed with .
And I picked the published package by index instead of by name, which works right up until it doesn't.
The version running today isn't quite that one.
Two weeks after it merged, Aviv replaced the credential in #21082: the PAT became a GitHub App installation token, minted in a preceding step by from and and handed to as .
A PAT is one person's account and one person's scope, sitting in the secret store until someone remembers to rotate it.
An app token is org-owned, scoped to the app's installation, and expires within the hour. was never an option here, it can't reach another repository, which is the entire reason a second credential exists in the first place.
He also renamed the job from to , and left the script itself alone with both fixes included.
Full chain: webpack publishes, core dispatches, it updates , opens a PR, Vercel builds a preview, maintainer merges.
Fetching content across the ecosystem #122 automated pulling in loaders and plugins READMEs from across the org.
At +612/−968 across 10 files, my second largest change.
It pages through the org's public repos following in the header, skips archived ones, sorts the rest by name suffix, then fetches, cleans and writes each README with a generated for the sidebar.
Review made optional, since it threw when uns