# llm.codes: documentation as clean Markdown for AI

> llm.codes turns script-heavy documentation pages into clean Markdown for AI systems: what it does, how it differs from an llms.txt generator, and how to self-host it

Page: https://llms-full-txt.ru/en/tools/llm-codes/
Site index: https://llms-full-txt.ru/en/llms.txt

`llm.codes` opens a documentation page in a real browser, waits for the scripts to finish and returns its content as clean Markdown.

It is not an `llms.txt` generator. The service solves a neighboring task: getting the text of documentation that looks empty without a browser.

It serves a reader of someone else's documentation, not a site owner.

- Author: amantus-ai
- Kind: an open-source web service
- License: MIT
- State: the site works, the code was updated in July 2026
- Checked: October 3, 2026

## Which task it solves

Some documentation sites assemble a page with scripts in the browser. A program that requests such a page with a plain HTTP request gets an empty shell.

- Two sides of one problem
- The site owner
- can fix the cause
- Serves text in the server-sent HTML
- Publishes Markdown versions of pages
- Publishes llms.txt
- The documentation reader
- works with what exists
- Cannot change someone else’s site
- Gets the text through a browser service
- llm.codes is one such service

If the site is yours, the right move is to serve content without scripts and add Markdown versions: [Markdown versions of pages](https://llms-full-txt.ru/en/guides/markdown-pages/).

## How to use it

1. Open [the service's site](https://llm.codes).
2. Paste the address of a documentation page.
3. Choose the crawl depth and the page limit.
4. Get the Markdown: copy or download it.

Settings in the interface:

| Setting | Values |
|---|---|
| Crawl depth | 0 to 5, 2 by default |
| Page limit | 1 to 2000, 200 by default |
| Code blocks only | drop the text, keep the examples |
| Filters | remove repeats and service lines |

Results stay in a cache for up to 30 days: a repeated request for the same page answers at once.

## Which sites it accepts

The service does not accept any address, only documentation addresses. The check uses patterns:

- documentation subdomains: `docs.*`, `developer.*`, `learn.*`;
- documentation paths: `/docs`, `/guide`, `/learn`;
- sites of languages and libraries;
- GitHub Pages.

On top of the patterns there is a short list of exceptions. An address outside the patterns is rejected.

## Self-hosting

[The code is open](https://github.com/amantus-ai/llm-codes), and the service can be run independently.

```bash
git clone https://github.com/amantus-ai/llm-codes.git
cd llm-codes
pnpm install
cp .env.local.example .env.local
pnpm run dev
```

It needs Node.js 24 and pnpm 10. Pages are loaded by one of two providers:

| Provider | What it needs |
|---|---|
| Firecrawl, the default | a paid `FIRECRAWL_API_KEY` |
| Playwright | no key; the browser is installed with `pnpm exec playwright install chromium` |

```ini
SCRAPE_PROVIDER=playwright
```

The Redis cache is optional.

## Limits

- **The service does not create `llms.txt`.** The output is page text, not a site map.
- **Not any site.** Only addresses that look like documentation are accepted.
- **There is no public API with keys and terms.** The internal endpoint is meant for the service's own interface.
- **Someone else's content stays theirs.** The rights to documentation text belong to its owner.

## What to read next

- [Markdown versions of pages](https://llms-full-txt.ru/en/guides/markdown-pages/) - how a site owner can serve clean text directly
- [What is llms-full.txt](https://llms-full-txt.ru/en/guides/llms-full-txt/) - the full text of a site in one file
- [Generators and tools](https://llms-full-txt.ru/en/tools/generators/) - what to create `llms.txt` with
