BlogFindings

llms-full.txt: 32 of 44 sites served one, and the specification never names it

Lantad requested /llms.txt and /llms-full.txt once each from 54 documentation and developer tool hostnames on 12 September 2026. 44 returned an llms.txt as plain text or markdown, 32 of those also returned an llms-full.txt, and not one returned the second file without the first. The llms.txt proposal, modified on 10 August 2026, does not contain the string llms-full.txt anywhere.

18 min read Lantad

That gap between what is defined and what is deployed is worth measuring rather than asserting, so on 12 September 2026 we asked 54 documentation and developer tool hostnames for both files. 44 returned an llms.txt as plain text or markdown. 32 of those also returned an llms-full.txt the same way, and none of the 54 returned the second file without the first. A convention that no document defines is therefore running on roughly three quarters of the sites in this frame that adopted the one that is defined, and the sizes it produces are large enough to matter to whether anything reads it.

In short

  • The llms.txt specification at llmstxt.org, version 2 and carrying a modified date of 10 August 2026, does not contain the string llms-full.txt anywhere, so the second file is a convention tooling created rather than a part of the standard.
  • Lantad asked 54 documentation and developer tool hostnames for both files on 12 September 2026: 44 served /llms.txt as plain text or markdown, 32 of those also served an llms-full.txt, and none served the second file without the first.
  • Fifteen of those 32 llms-full.txt files exceeded 2,000,000 bytes, while Google's Googlebot documentation, last updated 3 February 2026, states that Googlebot crawls the first 2MB of a supported file type.
  • The largest file measured was developers.cloudflare.com at 50,820,143 bytes and 4,699,094 words, and the navigation phrase Skip to content accounted for 5,684 of those occurrences inside it.
  • Twenty two of the 32 sites serving an llms-full.txt on 12 September 2026 never mentioned that file anywhere in their own llms.txt, so the index meant to be the entry point does not point at it.
  • Hostnames asked for both files 54 hosts
  • Served /llms.txt as text 44 hosts
  • Also served /llms-full.txt as text 32 hosts None served llms-full.txt without llms.txt
  • llms-full.txt over 2,000,000 bytes 15 hosts Above the 2MB figure Google documents for Googlebot
  • llms.txt that names llms-full.txt 14 hosts Of the 44 index files that parsed as text
  • llms-full.txt no larger than its index 3 hosts One of the three is byte identical to it
Measured by Lantad on 12 September 2026. One GET each of /llms.txt and /llms-full.txt per hostname as LantadBot/1.0, redirects followed, one attempt, thirty second timeout, from one network location. Served as text means HTTP 200 with a text/plain or text/markdown content type. The 54 hostnames are documentation and developer tool sites chosen because they are the population most likely to publish these files, not a sample of the web.

Is llms-full.txt part of the llms.txt specification?

No. The proposal is published at llmstxt.org, which shows a published date of 3 September 2024, a modified date of 10 August 2026 and a version 2 label. Read the whole of it and llms-full.txt is absent. What the document does specify is narrow and easy to check: a file named llms.txt at the root path of a site or at any subpath, an optional byte order mark, an H1 carrying the name of the project, which it states is the only required section, an optional blockquote holding a short summary, zero or more markdown sections of detail, and zero or more H2 sections holding file lists in which each entry is a markdown hyperlink with optional notes after a colon.

The one thing in the specification that does resemble a full text mechanism is a recommendation rather than a second file. It asks that pages provide a clean markdown version at the same URL as the original, either with .md appended or with the extension replaced. That is a per page convention, and a crawler reaching for it fetches one page at a time rather than one file holding everything. We measured whether any AI crawler actually takes that route in an earlier post, which found that ten AI crawlers fetched markdown by URL and none of them by content negotiation. This site publishes its own markdown twins for the same reason, and every page here has one at the markdown index.

So the difference between the two files is not a difference of degree. One is specified, with a required element and a defined shape a parser can validate. The other is a filename that acquired a meaning by being generated, and nothing anywhere states what it must contain, how large it may be, or what a client should do when it is too big to read. The version 2 revision of the proposal did change things, and it changed other things: it added two link relations and dropped the tool that read version 1. It did not add this file.

That matters for a practical reason rather than a pedantic one. A site owner deciding whether to add llms-full.txt cannot appeal to a standard to settle what good looks like, because there is no standard to appeal to, so the only available evidence is what the files on real sites actually do. Everything below is that evidence, and none of it is a recommendation the proposal makes.

File or componentStatus in the proposalMeasured here on 12 September 2026
/llms.txt at the root pathDefined44 of 54 hostnames served one as text
An H1 naming the projectRequiredNot counted in this scan
A blockquote summaryOptionalNot counted in this scan
H2 sections holding file listsOptionalNot counted in this scan
A markdown twin at page.mdRecommendedMeasured in an earlier post, not here
/llms-full.txtNot mentioned32 of 54 hostnames served one as text
What the llms.txt proposal at llmstxt.org, version 2 with a modified date of 10 August 2026, does and does not define, set against what Lantad measured across 54 hostnames on 12 September 2026. Components marked not counted were outside the scope of this scan.

How many sites that publish llms.txt also serve an llms-full.txt?

32 of the 44, on this frame, on this day. The frame is 54 hostnames of documentation and developer tool sites, chosen because they are where these files actually live, and it is a list somebody assembled rather than a probability sample of anything. Each hostname got one GET of /llms.txt and one of /llms-full.txt as LantadBot/1.0, with redirects followed and no retry. A response counts as serving the file only when it answered HTTP 200 with a text/plain or text/markdown content type, which is the distinction that decides several of these numbers.

Ten of the 54 served neither file as text, and they failed in three different ways worth separating. Four returned a plain 404 for both paths, being docs.astro.build, tailwindcss.com, huggingface.co and biomejs.dev, although two of those answered the 404 with a full HTML page of around 48,000 and 133,000 bytes rather than an empty body. Three returned HTTP 200 with an HTML document at both paths, being docs.deepgram.com, docs.llamaindex.ai and docs.replicate.com, which is a documentation site rendering its application shell for a path it does not have, and to a client expecting text that is worse than a 404 because it looks like success. platform.openai.com returned 404 for both. docs.cursor.com returned 200 with 537,795 bytes of HTML at /llms.txt and nothing at all at the other path. docs.mintlify.com returned HTTP 530 with a seventeen byte body for both, which is an edge error rather than a statement about the file, and it is the one result here we would not repeat a conclusion from.

The direction of adoption is the part that surprised us. Not one of the 54 hostnames served an llms-full.txt without also serving an llms.txt. If the full text file were being adopted as an independent idea, some sites would have skipped the index, and none did. That is consistent with both files arriving together from the same generator rather than from two separate decisions, which is the subject of a later section.

Discovery is where the picture gets worse. Of the 44 llms.txt files, only 14 mention the string llms-full.txt at all, and 22 of the 32 sites that serve one never name it in their own index. The specification makes llms.txt the entry point, and on two thirds of these sites that entry point does not lead to the larger file sitting next to it. The only way a client finds it is by guessing the filename, which is exactly the fragility that a defined discovery mechanism exists to remove. Four sites manage the inverse error and name a file they do not serve: nextjs.org and www.assemblyai.com point at an llms-full.txt that returns 404, and vercel.com and elevenlabs.io point at one that returns HTTP 200 carrying HTML, 2,634,912 and 1,062,686 bytes of it respectively.

Dead references inside these files are not a new finding here. An earlier scan of 40 hostnames found 31 real llms.txt files and one whose 75 links all returned 404, and the same class of error has now turned up one level further out, in the links between the two files rather than the links inside them. Whether any of this affects what an AI crawler can read is a separate question from whether the files are well formed, and the honest answer remains the one an earlier review of the evidence on llms.txt reached.

  • Both files served as text 32 hosts Three of the 32 returned a full file no larger than the index
  • llms.txt as text, llms-full.txt not 12 hosts Three of the 12 returned HTML at 200 for llms-full.txt, two returned 404 for a file they name
  • llms-full.txt as text, llms.txt not 0 No site in this frame adopted the full file on its own
  • Neither file served as text 10 hosts Five returned 404 at both paths, four returned HTML at 200 for at least one, one returned HTTP 530
Outcomes across the 54 hostnames Lantad asked for both files on 12 September 2026. A file counts as served only on HTTP 200 with a text/plain or text/markdown content type, so an HTML body at 200 counts as not served. These four rows are exclusive and sum to 54.

How big is an llms-full.txt file, and will a crawler read all of it?

The 32 files came to 145,304,405 bytes between them, with a median of 1,911,858 bytes. The median llms.txt beside them was 33,721 bytes, so the typical full file in this frame is about fifty seven times the size of its own index. The distribution is not a gentle slope either. developers.cloudflare.com served 50,820,143 bytes at that path, which is 4,699,094 words in one response. docs.anthropic.com served 34,305,754 bytes after two redirects that land on platform.claude.com, which is 3,586,183 words. Then supabase.com at 6,923,922, neon.com at 6,512,465 and ai-sdk.dev at 5,990,775.

Whether anything reads all of that has a documented answer for at least one crawler. Google's Googlebot documentation, last updated 3 February 2026, states that Googlebot crawls the first 2MB of a supported file type and the first 64MB of a PDF, and that it stops fetching once the cutoff is reached, with only the downloaded portion sent on for indexing. 15 of the 32 files exceed that. The count is the same whether 2MB is read as 2,000,000 bytes or as 2,097,152, which is a small mercy given that the abbreviation is ambiguous and the page does not disambiguate it. On the Cloudflare file, 2,000,000 bytes is 3.9 percent of what was served. We looked at the same limit from the page side in an earlier post on how Googlebot reads the first 2MB while three AI crawler documentation pages name no limit at all, and that asymmetry is the real problem here: for most of these crawlers there is no published number to check a 50MB file against.

What is inside the large files is the second half of the size question, and it is not all documentation prose. The Cloudflare file contains the phrase Skip to content 5,684 times. That is a navigation link, present once per page in the source, concatenated straight through into a file whose stated purpose is to hand an AI client clean text. Each page in it also opens with a YAML frontmatter block carrying description, title and an image URL, then that navigation link, then a three line blockquote pointing at a per directory llms.txt. None of that is wrong, and some of it is genuinely useful provenance, but a client truncating at 2MB spends its budget on whatever the first few thousand pages happen to be plus their chrome, and neither the client nor the site gets to choose which pages those are.

Ordering therefore does more work than it should. A file with no defined structure has no defined priority either, so the pages that survive a truncation are the ones the generator happened to emit first. A site that cares which parts of its documentation reach an AI client has more control through the per page markdown the specification actually recommends, or through a smaller hand written index, than through a single file large enough that every consumer has to cut it somewhere different. If you want to see what a fetcher receives from your own pages before worrying about either file, what GPTBot sees answers that directly, and the llms.txt tool checks the index itself.

Hostnamellms.txt bytesllms-full.txt bytesOver 2MB
developers.cloudflare.com15,90650,820,143Yes
docs.anthropic.com67,85934,305,754Yes
supabase.com2,7096,923,922Yes
neon.com38,5626,512,465Yes
ai-sdk.dev2,2175,990,775Yes
docs.perplexity.ai42,5664,166,979Yes
docs.lovable.dev49,8473,413,825Yes
docs.expo.dev54,85954,859No
upstash.com5,8335,368No
clerk.com19,574768No
Byte counts from the Content-Length or transferred size of each response, measured by Lantad on 12 September 2026. Ten of the 32 hostnames serving both files, ordered by the size of the full file, showing the top of the range and the bottom. The 2MB column compares against the figure Google's Googlebot documentation states, last updated 3 February 2026.

Three files named full were no larger than the index beside them

The name carries a promise and three of the 32 do not keep it, in three different ways that are each instructive about what happens when nothing defines a file.

docs.expo.dev served 54,859 bytes at both paths, and the two responses are byte identical: both hash to the same MD5 digest, 9323db5044060b42a8321d187d996528. The site has one file published under two names, so a client fetching the second after the first spends the bytes twice and learns nothing. clerk.com is the sharpest case. Its llms-full.txt is 768 bytes, against 19,574 for its index, and it is not documentation text at all. It is a list of links to five other llms-full.txt files, one each for documentation, articles, blog, changelog and glossary, plus a link to a dashboard llms.txt on another hostname. A file named full that holds an index of full files is a reasonable engineering decision for a large site, and it is also precisely the kind of thing a client written against a filename convention will not expect. upstash.com is the quiet version of the same problem: at 5,368 bytes its full file is smaller than its 5,833 byte index, and reads as another sectioned link list rather than concatenated prose.

Two more, resend.com at 8,056 bytes and www.prisma.io at 8,180, are only slightly larger than their own indexes. The Resend file describes itself in its opening lines as a longer companion to its llms.txt and links back to it, which is honest about what it is. It is still nothing like a full text corpus, and a client sizing its expectations from the median of 1,911,858 bytes would be wrong about it by two orders of magnitude.

Put the three no larger cases together with the seven hostnames that answered a text path with HTML and the seven that returned 404 or 530, and the practical conclusion is that the filename predicts very little. A client cannot know from the path whether it is about to receive a 768 byte index, a duplicate of a file it already has, an application shell, or 50MB of concatenated prose with navigation text through it. That is the cost of a convention without a specification, and it is the same shape of problem as a site publishing rules in one file and contradicting them in another, which is what we found when 19 of 23 sites publishing an llms.txt said nothing about AI in their robots.txt.

None of this makes the file useless. A single fetch that returns a whole documentation set is genuinely convenient for an agent that wants to read everything and has the context to hold it, and several of these files are exactly that. The claim worth resisting is the one that treats the path as an interface.

  • docs.expo.dev Byte identical Both paths returned 54,859 bytes with the same MD5 digest, so the full file is the index.
  • clerk.com An index, not text 768 bytes listing five other llms-full.txt files, against a 19,574 byte llms.txt.
  • upstash.com Smaller than the index 5,368 bytes against 5,833, and structured as a sectioned link list.
  • vercel.com, elevenlabs.io HTML at 200 Both name llms-full.txt in their index and return 2,634,912 and 1,062,686 bytes of HTML at it.
  • python.langchain.com HTML at 200 1,003,477 bytes of HTML at llms-full.txt, while its llms.txt returned 22,190 bytes of text.
  • nextjs.org, www.assemblyai.com Named but 404 Both reference an llms-full.txt in their llms.txt and neither serves one.
  • docs.cursor.com, docs.deepgram.com HTML at llms.txt 537,795 and 585,526 bytes of HTML at a path a client expects to be text.
  • docs.llamaindex.ai, docs.replicate.com HTML at both The application shell rendered for both paths with a 200 status.
  • docs.mintlify.com No answer HTTP 530 with a seventeen byte body at both paths, an edge error rather than a finding.
The thirteen hostnames of the 54 where a response did not match what the path implies, measured by Lantad on 12 September 2026. The other 41 either served both files as text at sizes consistent with an index and a full file, or answered 404 at both paths and said so plainly.

Where llms-full.txt comes from, and what to check on your own site

A file that no specification defines, that 32 of 44 adopters serve, and that 22 of those 32 never link to, is unlikely to be the product of 32 independent decisions. The documentation platform is the common cause, and at least one of them describes the behaviour in its own documentation. Mintlify, whose docs sit at mintlify.com, states that it automatically hosts an llms.txt at the root of a project listing all available pages, that the file is always up to date and requires zero maintenance, and that it also automatically hosts an llms-full.txt combining the entire documentation site into a single file, with each page appearing as its title, source URL, description and full markdown content. Its page for this is at https://www.mintlify.com/docs/ai/llmstxt and it carries no date we could read.

The size rules on that page are the interesting part, because they are asymmetric. Generated llms.txt index files cannot exceed 100,000 characters, and when an index is larger the platform keeps llms.txt as a directory and moves groups of page links into generated markdown files under a /_llms/ path. No equivalent cap is stated for llms-full.txt. That is a coherent design: an index has a job that a cap protects, and the full file is defined as everything. It also explains the shape of our measurement without anybody having chosen it, because a documentation set that grows produces an index that stays small and a full file that grows without bound. Several hostnames in the frame return Vercel in the server header at these paths, which is where Mintlify runs, but a server header is not proof of a platform and we are not attributing any individual file here to one.

The thing to take from this is about defaults rather than about any vendor. Most of the 32 sites did not decide to publish a 2MB file. They chose a documentation platform, and the file appeared. That is the same mechanism we keep finding at the other layers: a hosting default wrote the robots.txt on two of the six Webflow sites that named GPTBot, and a platform default is why 35 of 36 Framer sites served markdown to a request asking for it. Knowing which files your stack publishes on your behalf is a prerequisite to having a view about them, and for the same reason it is worth knowing that a parallel convention exists at a well known path where the training default is deny.

Four checks follow from the measurement, and one caution. Fetch both paths yourself and look at the status and the content type, not just the status, because seven hostnames here answered 200 with HTML. If you serve an llms-full.txt, link it from your llms.txt, because 22 of 32 did not and the index is the only defined discovery point. Look at the size against the one published limit anybody offers, which is Google's 2MB, and accept that for most AI crawlers no such number is published. And check what a plain fetch of your actual pages returns before spending any effort on either file, because a documentation set that renders its text only in a browser has a prose parity problem that no amount of markdown at a side path repairs. The method behind each of these checks is written up on the methodology page, and the rest of this blog's measurements are indexed on the research page.

The caution is that none of this tells you the file is read. Nothing in this scan observed a crawler: no access log, no server side record, no evidence that any AI client requested either path on any of these 54 sites. Chrome's agentic browsing audit does check for the index, which we covered when it shipped and Google Search continued to ignore the file, and that remains the honest state of the evidence. Each hostname was asked once, on one day, from one network location, as one identified user agent, and sites that vary their response by user agent or geography were seen from a single vantage point. Byte counts are what the transfer reported and were not recomputed against a second fetch. The 54 hostnames are a list chosen for the likelihood of finding these files, which makes every proportion here a statement about this frame and not about the web, and the direction of that bias is upward: a random sample of sites would find far fewer of both files. What the scan supports is that the second file is widely deployed, undefined, frequently large, sometimes not what its name says, and usually unlinked. That is enough to decide whether to add one, and it is less than a standard would give you.

How both files arrive on a documentation site that never asked for either, as described in Mintlify's own documentation at https://www.mintlify.com/docs/ai/llmstxt, with the outcome counts Lantad measured across 54 hostnames on 12 September 2026.

Written by

Lantad

Published .

A site that has published one of these files is usually told to publish the other beside it. llms-full.txt has a name that sounds like part of the same standard, it sits at the root of some of the best known documentation sites on the web, and a good deal of tooling writes it without being asked. It is not in the specification. Read the proposal at llmstxt.org and the string does not appear, in either version of the document.

Common questions

Is llms-full.txt part of the llms.txt specification?

No. The proposal published at llmstxt.org, version 2 with a modified date of 10 August 2026, does not contain the string llms-full.txt anywhere. It defines a file named llms.txt at the root path or any subpath, requires an H1 naming the project, and recommends a clean markdown version of each page at the same URL with .md appended or substituted. The full text file is a convention that documentation tooling generates, not a part of the standard.

How big is an llms-full.txt file?

Across the 32 that Lantad measured on 12 September 2026, the median was 1,911,858 bytes and the total was 145,304,405 bytes. The largest was developers.cloudflare.com at 50,820,143 bytes, followed by docs.anthropic.com at 34,305,754. Fifteen of the 32 exceeded 2,000,000 bytes, which is above the 2MB that Google's Googlebot documentation, last updated 3 February 2026, says Googlebot crawls of a supported file type.

Do I need an llms-full.txt if I already have an llms.txt?

Nothing specifies that you do, and no measurement here shows a benefit from it. What the scan does show is two failure modes to avoid if you serve one: 22 of the 32 sites serving an llms-full.txt on 12 September 2026 never linked it from their llms.txt, which leaves filename guessing as the only way to find it, and four sites linked one that returned a 404 or an HTML page instead of text.

Why does my site have an llms-full.txt I did not create?

A documentation platform probably generated it. Mintlify's documentation states that it automatically hosts both an llms.txt index and an llms-full.txt combining the whole site into one file, with no maintenance required, and it caps the generated index at 100,000 characters while stating no cap for the full file. That asymmetry is consistent with what Lantad measured on 12 September 2026: a median index of 33,721 bytes beside a median full file of 1,911,858.

See what AI can read on your site

Run a free scan and get a graded report of exactly what AI crawlers can and cannot read, with ranked fixes.