{
 "txtfirst": "0.1",
 "site": "https://txtfirst.com",
 "updated": "2026-09-07",
 "license": "CC0-1.0",
 "human": {
  "html": "https://txtfirst.com/",
  "note": "the only HTML page on this domain"
 },
 "negotiation": {
  "header": "Accept: text/markdown",
  "suffix": ".md"
 },
 "formats": {
  "markdown": "https://txtfirst.com/{slug}.md",
  "json": "https://txtfirst.com/api/{slug}.json",
  "index": "https://txtfirst.com/api/pages.json",
  "llms": "https://txtfirst.com/llms.txt",
  "full": "https://txtfirst.com/llms-full.txt"
 },
 "feed": {
  "changes": "https://txtfirst.com/changes.json",
  "note": "updated moves only when sha256 moves; poll this instead of the pages"
 },
 "actions": [
  {
   "name": "check",
   "method": "GET",
   "url": "https://txtfirst.com/api/check?host={hostname}",
   "description": "Fetch /robots.txt and / of a public hostname as a plainly identified client and report status, bytes and text bytes. Cached 24h. Honours robots.txt for TxtFirstProbe.",
   "returns": "application/json"
  }
 ],
 "pages": [
  {
   "slug": "index",
   "title": "txtfirst",
   "description": "A proposal for websites where the markdown file is the page and the HTML is only a rendering of it. Readable by agents by default, readable by people as a consequence.",
   "html": "https://txtfirst.com/#index",
   "markdown": "https://txtfirst.com/index.md",
   "json": "https://txtfirst.com/api/index.json",
   "bytes": 4446,
   "sha256": "bd94f3c64155d679799d16616a528a2d4fae4875e3f70a3159eb50179890a5dc",
   "updated": "2026-09-07"
  },
  {
   "slug": "spec",
   "title": "txtfirst spec 0.1",
   "description": "Four requirements that make a site txtfirst compliant. Source of truth in markdown, content negotiation, discovery, and machine-legible figures.",
   "html": "https://txtfirst.com/#spec",
   "markdown": "https://txtfirst.com/spec.md",
   "json": "https://txtfirst.com/api/spec.json",
   "bytes": 3683,
   "sha256": "92b4fbaa91c30c027274f5d056a4d80962ab9dfa5df07d6e0e6f0d9b3926582b",
   "updated": "2026-09-04"
  },
  {
   "slug": "dialect",
   "title": "The Fact Block dialect",
   "description": "Eight fields in a fixed order inside ordinary markdown. Not a new syntax, a rigid shape, so a model copies it instead of interpreting it.",
   "html": "https://txtfirst.com/#dialect",
   "markdown": "https://txtfirst.com/dialect.md",
   "json": "https://txtfirst.com/api/dialect.json",
   "bytes": 6284,
   "sha256": "7fe5505aa908cbefeacf5ed43a879d422820dba4bb298987ab476eaecadcd68f",
   "updated": "2026-09-04"
  },
  {
   "slug": "why",
   "title": "Why txtfirst",
   "description": "The case for markdown as the source of truth, the three arguments that hold, and the two common ones that do not.",
   "html": "https://txtfirst.com/#why",
   "markdown": "https://txtfirst.com/why.md",
   "json": "https://txtfirst.com/api/why.json",
   "bytes": 4868,
   "sha256": "fea38d4ff6ccd3390c6185db9eafefd096e1a0c4b26c6b2cdf7cac33d4299823",
   "updated": "2026-09-06"
  },
  {
   "slug": "measure",
   "title": "The September 2026 readability study",
   "description": "Twenty five hospitality homepages asked for their front page by an honestly identified HTTP client. Eight answered. Method, per-site results and limitations.",
   "html": "https://txtfirst.com/#measure",
   "markdown": "https://txtfirst.com/measure.md",
   "json": "https://txtfirst.com/api/measure.json",
   "bytes": 8189,
   "sha256": "f74e56f3b1402e0c922494a44f492bc507de94fb26184252557ccd0d3299ea8b",
   "updated": "2026-09-04"
  },
  {
   "slug": "implement",
   "title": "Implement txtfirst",
   "description": "Content negotiation for Cloudflare Workers and Pages, nginx, Apache, Vercel, Astro, WordPress and plain HTML, plus the build step and one system running it.",
   "html": "https://txtfirst.com/#implement",
   "markdown": "https://txtfirst.com/implement.md",
   "json": "https://txtfirst.com/api/implement.json",
   "bytes": 32779,
   "sha256": "98f449e5f7a6433d31edd18676516268165b25cb139d06b43c06a5f28980df9f",
   "updated": "2026-09-07"
  },
  {
   "slug": "probe",
   "title": "The txtfirst probe",
   "description": "What TxtFirstProbe is, what it requests, how to block it, and how to reach a human about it.",
   "html": "https://txtfirst.com/#probe",
   "markdown": "https://txtfirst.com/probe.md",
   "json": "https://txtfirst.com/api/probe.json",
   "bytes": 2468,
   "sha256": "6b1837492cd966121ee67c5dd8aff7e4dea2c13e40902eb65cba7822f558b10e",
   "updated": "2026-09-04"
  },
  {
   "slug": "agent",
   "title": "If you are an agent",
   "description": "Instructions in the second person for a program reading this site. What to fetch, how to check another site, how to poll for changes, and what not to do.",
   "html": "https://txtfirst.com/#agent",
   "markdown": "https://txtfirst.com/agent.md",
   "json": "https://txtfirst.com/api/agent.json",
   "bytes": 2492,
   "sha256": "0aa6d675ba47b102194824bf55d2cb6b12ec18c7a24e8e772516a44939f6a919",
   "updated": "2026-09-06"
  },
  {
   "slug": "about",
   "title": "About txtfirst",
   "description": "Who is behind the proposal, what it is not, and how it is funded.",
   "html": "https://txtfirst.com/#about",
   "markdown": "https://txtfirst.com/about.md",
   "json": "https://txtfirst.com/api/about.json",
   "bytes": 1535,
   "sha256": "fff15622f638ea46858945b36a4f7fb53c47fe176dcb8deb69a0fe3155f2d0d3",
   "updated": "2026-09-06"
  },
  {
   "slug": "contact",
   "title": "Contact",
   "description": "How to reach the author of txtfirst, and what kind of message gets a reply.",
   "html": "https://txtfirst.com/#contact",
   "markdown": "https://txtfirst.com/contact.md",
   "json": "https://txtfirst.com/api/contact.json",
   "bytes": 1457,
   "sha256": "0c9f7799b63d67ef1fad5fef8517f37d962ff7fe15a6edaac6edac38229f5f18",
   "updated": "2026-09-06"
  }
 ]
}