Show HN: JSON to Md(gfm) Developer Raj Nandan released json-to-md, an open-source tool that converts JSON documents into deterministic, human-readable GitHub Flavored Markdown, with byte-identical output across TypeScript and Go implementations. The tool aims to reduce token costs when feeding data into large language models by replacing JSON punctuation with Markdown headings and lists. It ships as an npm package and a Go module with no runtime dependencies, supporting browser, Node, and command-line use. Convert one JSON document into deterministic, human-readable GitHub Flavored Markdown https://github.github.com/gfm/ . The same conversion runs in the browser, in Node, in Go, and on the command line. The TypeScript and Go implementations produce byte-identical output , enforced by a shared corpus/ corpus/ and a cross-implementation fuzz gate in CI. Output is a readable Results heading and uses canonical spacing: LF endings, one blank line between blocks, no trailing spaces, one final newline.If you feed JSON into an LLM, you pay for its punctuation. Every { , } , " , : , and , is tokens spent on structure the model does not need to read the data. Converting the same document to Markdown headings and lists is measurably cheaper and easier for models to follow: The tradeoff: this is a one-way, human-facing projection , not a reversible serialization. When a downstream step must parse, validate, or store the data, keep the JSON. A common pattern is JSON for the machine contract and Markdown for everything a model or a person has to read. npm install @rajnandan1/json-to-md or: pnpm add / yarn add Ships ESM and CommonJS builds with TypeScript declarations, and no runtime dependencies. Node ≥ 18. js import { convertJsonText, convertJsonValue } from "@rajnandan1/json-to-md"; convertJsonText '{ "hello": "world" }' ; // untrusted serialized JSON text convertJsonValue { hello: "world" } ; // already-parsed, caller-trusted data // Results // // hello // // world CommonJS works too: const { convertJsonText } = require "@rajnandan1/json-to-md" . See the API reference api-reference for the two entry points’ exact contracts and errors. The same package: bundle it Vite, webpack, esbuild; it’s plain ESM with no dependencies , or skip the build step entirely. Every npm release lands on the CDNs, and the build is a single self-contained ES module, so the raw file imports directly: js