JS Ledger

About JS Ledger

Updated:

JS Ledger is a publication about JavaScript, TypeScript, and the systems that run them. It is written by Jonah Vail.

Jonah Vail writes about JavaScript, TypeScript, and the systems behind modern web applications. His work explores what happens beneath runtimes, frameworks, and tooling, from language semantics and performance to browser and production behavior. He prefers source code, reproducible experiments, and measurable behavior over received wisdom.

Why a ledger

A ledger records what happened. It is not a place for impressions, and a good one can be audited by someone who was not there.

That is the standard here. Most writing about JavaScript describes how an API is meant to behave. This site is interested in the gap between that description and what the machine actually does: why a function that looks identical to another one runs four times slower, why a type narrowed in one branch and stopped narrowing in the next, why a build that works on one machine produces a different bundle on another.

Answering those questions means going one layer down — into the engine’s optimization pipeline, into a bundler’s module graph, into the specification text nobody reads. The answers are usually less mysterious than the folklore around them, and they are almost always more useful.

What gets covered

Five areas, and articles belong to exactly one of them:

  • Language internals. ECMAScript semantics and TypeScript’s type system — what the specification requires, not what a tutorial claims.
  • Frameworks. Reactivity models, rendering strategies, and the machinery under React, Solid, Svelte and Vue. How they work, not which to pick.
  • Tooling and build. Bundlers, dev servers, transpilers, and module resolution — the part of the stack that is invisible until it breaks.
  • Runtime and performance. V8, the event loop, memory, and the methodology of measuring any of it honestly.
  • Ecosystem and production. npm, supply chain, Node and its alternatives, and the behavior that only shows up after deployment.

What an article has to do

Every article on this site is written to be checkable:

Versions are pinned. “Node 24.18.0, V8 13.6, TypeScript 5.9.3” — never “a recent version”. Engine behavior changes; an unversioned claim about it has a short shelf life and no way to be verified later.

Numbers come with their commands. If a benchmark result appears, the command that produced it appears next to it. A number without a method is an anecdote wearing a lab coat.

Sources are primary. Engine source, the specification, the changelog, the pull request — in preference to another article about them, this one included.

Uncertainty is labelled. “I have not verified this against the source” is a sentence that appears here, and it appears deliberately. Claims that are only inferred are marked as inferred, which is what makes the measured ones worth believing.

Corrections are visible. When an article turns out to be wrong, it is corrected in place with a dated note explaining what changed. Nothing is silently rewritten. A ledger that can be edited without a trace is not a ledger.

What you will not find here

No framework rankings, no “top ten tips”, and no article whose real subject is a product. Nothing here is written to a keyword brief, and nothing is published because a release happened and the moment seemed right.

Also absent: tutorials for beginners. There are excellent ones elsewhere, and writing another would mean covering ground where nothing needs checking. This site starts where the documentation stops, which means it assumes you already write JavaScript for a living and have hit something the documentation does not explain.

Articles are long when the subject is, and short when it is not. The floor is six hundred words of prose, but the real constraint is that every paragraph has to earn its place: a section that only restates the last one gets deleted rather than padded.

How this site is built

Static HTML generated by Astro, hosted on Cloudflare Pages. There is no database, no application server, and no code running on the host at request time.

There are also no cookies. The only thing stored in your browser is your own choice of light or dark theme, written after you click the toggle and never read by anyone but the page you are on. That is why you did not have to dismiss a consent dialog to get here. Fonts are served from this domain rather than a third-party CDN, so no request leaves for another host to render a page.

Every article is also published as plain Markdown at its own address with .md appended, listed in llms.txt for language models that want the text without the markup. Search runs entirely in your browser against a prebuilt index — nothing you type is sent anywhere.

Details of the choices behind all of this, including the ones that turned out to be trade-offs, are recorded rather than hidden.

Contact

Corrections, disagreements, and questions are welcome at [email protected]. A correction that turns out to be right gets published with credit, unless you would rather it did not.

There is no comment section. There is also no newsletter, no advertising, no sponsored content, and no affiliate link anywhere on this site.

New articles are available through the RSS feed.

Arrow keys to move, Enter to open.