Llms.txt Generator
Build an llms.txt index for your site — title, summary and curated link sections — entirely on this device.
# Ithomia > Developer tools that run on your device. ## Tools - [JSON Formatter](https://ithomia.dev/json-formatter): Format and validate JSON - [Markdown to HTML](https://ithomia.dev/markdown-to-html): Convert Markdown to HTML ## Optional - [Changelog](https://ithomia.dev/changelog)
2 sections · 3 links · 290 characters · 290 B
The download is the file above, byte for byte, with the name the proposal uses.
Press ? for shortcuts
Do it offline:$
How to use it
- Name the site or project in the title field — that single line is the only element the proposal requires, and the file is refused without it.
- Add a one-sentence summary, then any detail a reader needs first: licensing, currency, how often the pages change.
- Group pages into sections and add one row per page — link text, full address, and a short note saying what that page answers.
- Move anything skippable into the Optional block, then copy the result or download it and upload the file to your site root.
llms.txt is a community proposal published in September 2024 — not a ratified standard, and not a way to keep AI crawlers out. It is a short Markdown index at the root of a site that points a language model at the pages worth reading. Fill in a title, a summary and a few link sections here, and the file assembles itself as you type. Blocking is a separate job, done in /robots-txt-generator.
How it works
Three constructs carry the whole file, always in this order: one level-one heading holding the site name, one blockquote holding the summary, then level-two headings, each followed by bullet rows of the shape link, address, colon, note. Free-form detail may sit between the summary and the first heading. A section headed Optional is reserved for entries a reader may drop when it needs a shorter context, and is always written last.
The file belongs at the root of the site, reachable as llms.txt, and should be served as plain text or as Markdown — not as HTML. Nothing here uploads or checks it. The second output mode writes llms-full.txt, the variant carrying whole page bodies inline, and those bodies come from what you paste.
Examples
A roastery site indexed in two sections# Fernleaf Coffee Roasters
> A small roastery in Bristol: single-origin beans, brew guides and wholesale ordering.
Prices are in GBP and include VAT. Orders placed before 14:00 UK time ship the same working day.
## Brew guides
- [AeroPress](https://fernleaf.example/guides/aeropress): Recipe, grind size and timings
- [V60 pour-over](https://fernleaf.example/guides/v60): Water temperature and pour schedule
## Shop
- [Single-origin beans](https://fernleaf.example/shop/single-origin): Current harvest, roasted weekly
- [Wholesale](https://fernleaf.example/wholesale): Cafe and office accounts
## Optional
- [Roastery history](https://fernleaf.example/about/history): Background, not needed to place an order
Five rows across three headings, 717 characters, no notes raised. The detail paragraph sits above the first heading, and the reserved block lands last whatever order the form held it in.
The same site as llms-full.txt# Fernleaf Coffee Roasters
> A small roastery in Bristol: single-origin beans, brew guides and wholesale ordering.
## Brew guides
### AeroPress
https://fernleaf.example/guides/aeropress
Recipe, grind size and timings
Use 15 g of coffee ground for filter and 220 g of water at 92 C.
Stir once, steep for 90 seconds, then press for 30 seconds.
### V60 pour-over
https://fernleaf.example/guides/v60
Water temperature and pour schedule
Rows become level-three entries carrying their address and whatever was pasted under them. The second row was left blank, so the pane says so: “This row has no pasted body, so llms-full.txt records only its heading and URL. The tool cannot read your site — paste the page text here if you want it included.”
Edge case: a relative row, a repeat and a hand-typed Optional heading# Fernleaf Coffee Roasters
## Shop
- [Wholesale](https://fernleaf.example/wholesale): Cafe and office accounts
- [Wholesale accounts](https://fernleaf.example/wholesale): Same page, second entry
## Optional
- [Roastery history](https://fernleaf.example/about/history): Background reading
Three notes at once, and the file is still written. The first row was typed as a path: “Relative URL resolved against the base URL — the file records "https://fernleaf.example/wholesale". An llms.txt file is read away from your site, so relative paths are written out in full.” The next row repeats that address, and the hand-typed heading was folded into the reserved block.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
Every address is written out in full
A row typed as a path is resolved against the base URL, because a bare path read elsewhere resolves against the wrong host. With no base URL set, that row is refused instead of guessed at.
Optional has a defined meaning
Entries under it are the ones a reader drops first when it has to shorten what it loads. Typing a section with that name yourself merges its rows into the reserved block.
Page bodies are pasted, never fetched
The longer output mode carries whole pages inline, so their text has to come from your clipboard. A body is copied through untouched, and only an unclosed code fence is pointed out.
Pasting crawler rules here achieves nothing
Directives such as User-agent and Disallow belong in a different file and are treated as ordinary text if pasted here. Nothing in this index restricts, permits or slows any crawler.
Common errors
An llms.txt file needs a title. It is the only element the proposal requires, and it is the first thing a reader uses to decide what this site is — write the site or project name.- The one hard requirement in the whole format. Nothing is emitted until it is filled in.
A `javascript:` URL cannot be published in an llms.txt index — it is not a document a reader can fetch. This row was refused and nothing was written for it; use the page's real address instead.- The only scheme refused outright. Mail and file-transfer addresses are written as typed, with a note that an HTTP reader skips them.
"/pricing" is a relative URL and no base URL is set. An llms.txt file is read away from your site, so every row needs a full address — fill in the base URL, or type the whole URL here.- Set the base URL once and paths resolve against it; leave it empty and every row carries its own full address.
This link row has no URL. Every row in an llms.txt index is a link, so either fill the URL in or remove the row.- A row with a name but no address cannot be written as a link at all, so it is refused rather than half-written.
This file has 401 link rows and the limit for this tool is 400. An llms.txt index is a curated shortlist — keep the pages that answer the questions people actually ask.- Forty sections and four hundred rows are the ceilings, and both refuse the whole file rather than dropping the overflow.
Input is larger than the 20000 characters limit for this tool.- Any single field caps at 20,000 characters and the fields together at 200,000 — a pasted page body is what usually reaches it.
FAQ
Is llms.txt a standard?
No. It is a proposal published at llmstxt.org in September 2024 by Jeremy Howard, and it has not been through any standards body. Treat it the way you would treat any convention that might catch on: cheap to publish, with no guarantee attached.
Does it stop AI crawlers?
It does not. The file is an invitation to read, and it carries no mechanism for refusing anything. Crawler permissions are expressed in the Robots Exclusion Protocol, standardised as RFC 9309, and that is a different file at a different address.
Do any AI vendors read it?
None has committed to. Publishing one is a bet that some will, at the cost of a static file; it is not a lever on how any model answers questions about you today.
Keyboard shortcuts
- ⌘/Ctrl + Enter
- Rebuild the file from the current form.
- ⌘/Ctrl + C
- Copy the whole file while nothing is selected.
- ⌘/Ctrl + Shift + C
- Copy the whole file even over a selection.
- ⌘/Ctrl + S
- Download the file under its own name.
- ⌘/Ctrl + Shift + Enter
- Add a link row to the current section.
- t
- Cycle the color theme.
- ? or ⌘/Ctrl + /
- Open the shortcut help dialog.
- Esc
- Close the topmost dialog.