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
Size633,997 bytes10,974 bytes
HTTP requests211
Est. tokens~158,000~1,665
Reduction98.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.txtLLMR
FormatMarkdownJSON
ContentLinks with descriptionsCompressed metadata + summaries
EmbeddingsNoOptional
Auto-generatedManualYes
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

pythonpip 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.

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.