LLMR 2.0: One File, 98% Fewer Tokens
Six months ago I introduced LLMR as a proof of concept. Today it's a v2.0 spec, a dedicated website, and an ecosystem plan. Here's where things stand.
The Problem Hasn't Changed
When AI systems browse your website today, they fetch every HTML page, parse through navigation bars, CSS, JavaScript, and footer links just to extract the actual content. For my blog with 21 posts, that's 633,997 bytes across 21 HTTP requests.
I built something that compresses all of it into a single JSON file: 10,974 bytes, one request, 98.3% reduction.
What Is LLMR?
LLM-Readable Restructure Recap Registry Resolve Relay Retrieve Rationalize Resource Recover Reconnaissance Robustness Readiness Reduce Recycle; a JSON site index that gives AI systems your entire website in one fetch. Think of it as RSS for the AI era. Just as RSS made websites machine-readable for feed readers in 2000, LLMR makes websites machine-readable for LLMs in 2026.
{
"v": "2.0",
"s": {
"d": "raphaelreck.com",
"a": { "n": "Raphaël Reck", "r": "IT_sys_sw_consultant" }
},
"p": [
{
"id": "when-webservices-lie",
"u": "/blog/when-webservices-lie.html",
"d": "2025-08-30",
"tg": ["drupal", "debug"],
"rt": 9,
"cb": 24,
"sum": "Drupal hooks firing too early, web services returning wrong data."
}
]
}
Compressed keys. Summaries. Tags. Code block counts. Everything an AI needs to understand your site and decide which pages to fetch next; without parsing a single line of HTML.
Real Numbers
Measured on this blog, April 2026:
| HTML (all pages) | LLMR | |
|---|---|---|
| Size | 633,997 bytes | 10,974 bytes |
| HTTP requests | 21 | 1 |
| Est. tokens | ~158,000 | ~1,665 |
| Reduction | — | 98.3% |
An important caveat I want to be upfront about: LLMR is an index with summaries, not a full content mirror. An AI may still fetch individual pages when it needs the complete article. The value is in rapid site comprehension and content discovery.
What Changed Since v1
The original post from October 2025 described a single Python script and a dream. Six months later, here's what's different:
A formal v2.0 specification. The JSON schema is documented, validated, and versioned. Compressed keys are standardised. The <link rel="llmr"> tag replaces the old rel="llm-index".
A dedicated website. open-llmr.org is now the home for the project; documentation, spec, and getting-started guides will all live there.
A GitLab group. The project has moved from a single GitHub repo to gitlab.com/open-llmr, organised so each platform gets its own repository. The Python generator, the spec, and future plugins each have a dedicated space.
An ecosystem plan. LLMR started as something I built for my own site. But not everyone runs a hand-coded static blog; most of the web runs on WordPress, Laravel, Drupal, and Node.js toolchains. If LLMR is going to be useful beyond my corner of the internet, it needs generators for all of those platforms.
How It Relates to llms.txt
You might have heard of llms.txt — a proposal by Jeremy Howard to add a markdown file with links to important content. It's a curated reading list. LLMR is a structured index.
They solve different problems and work together. The llms_txt field in LLMR links to your llms.txt file. Serve both.
| llms.txt | LLMR | |
|---|---|---|
| Format | Markdown | JSON |
| Content | Links with descriptions | Compressed metadata + summaries |
| Embeddings | No | Optional |
| Auto-generated | Manual | Yes |
| Token cost | ~200 + N page fetches | ~1,665 total |
The Ecosystem
Everything lives under gitlab.com/open-llmr:
spec — JSON Schema, format specification, validator live
python — pip install llmr-generator live
npm — TypeScript package for Node.js and static site generators planned
wordpress — WP plugin with Abilities API + MCP integration planned
laravel — Composer package for Laravel 12+ planned
drupal — Module for Drupal 11+ planned
The WordPress plugin is the most interesting one on the roadmap. WordPress 7.0 ships with an Abilities API and MCP (Model Context Protocol) adapter, meaning AI agents like Claude can discover what a WordPress site can do and trigger actions. Our plugin would register LLMR generation as a WordPress Ability, so an AI agent could connect to your site and generate the index on demand.
Try It
pip install llmr-generator
llmr generate ./my-website --domain myblog.com
Or grab the script and run it directly:
python generate_llmr.py /path/to/your/site
Add to your HTML <head>:
<link rel="llmr" type="application/json" href="/llmr.json">
Done. Your site now speaks AI.
Why I'm Doing This
I'm not a Silicon Valley mastermind with a network of VCs and a 50-person team. I'm an independent developer in Sophia Antipolis who's been writing code since age four. I build things because the problems bother me, and this one bothers me a lot: we're asking AI systems to drink from a firehose of HTML when they could be sipping from a structured JSON straw.
Linus Torvalds started Linux because he wanted a free operating system for his PC. That's the energy. You see a gap, you build the thing, you put it out there, and you see if the world agrees it was worth building.
I don't know if LLMR becomes an adopted standard or stays a clever side project. But the web already has standards for different consumers: robots.txt for crawlers, sitemap.xml for search engines, RSS for feed readers. The missing piece is something purpose-built for AI systems. That's the bet.
Enabling "Gibberish Mode" for the Web
A massive tip of the hat to Anton Pidkuiko for his viral "Gibberlink" concept. In his demonstration, two AI agents on a phone call realize they are both machines and instantly switch from human speech to ggwave a high-speed data protocol that sounds like gibberish to us but is crystal clear to them.
"Why should AI scrapers use our human-centric code to read our webpages?"
LLMR v2.0 is that same philosophy applied to the internet. While a browser renders HTML for human eyes, LLMR serves a "Gibberlink" (the llmr.json index) directly to the AI. By stripping away the "human-readable" bloat, we allow agents to "talk" to your server in their native language-structured data. This isn't just a technical fix; it's a fundamental shift toward an AI-Optimized Web.
What's Next
The v2.0 spec is live. The Python generator works. The website is at open-llmr.org. What's needed now:
More generators. npm, WordPress, Laravel, Drupal. Each platform needs a native tool so adoption isn't limited to people comfortable running Python scripts.
Real embeddings. The current hash-based embeddings are placeholders. Production needs sentence-transformers or equivalent.
Adoption. If this format is going to matter, real sites need to use it. Try it on yours.
AI self-discovery. The dream is that AI agents find your llmr.json automatically, the way they find robots.txt.
If you're a developer, try it on your site. If you maintain a CMS, build a generator. If you work at an AI company, consider looking for /llmr.json when your models browse the web.
Let's build it.
Links:
open-llmr.org · GitLab: gitlab.com/open-llmr · Spec: SPEC.md · My site's LLMR file · LinkedIn
Update to the original LLMR post from October 2025.
No tokens were wasted in the making of this post.