Skip to content
Free AI visibility check: does your brand show up in ChatGPT and Gemini answers?Apply →

What is OKF (Open Knowledge Format)? Structure, implementation and what it means for GEO

A complete, source-backed guide to Google Cloud's open knowledge format: the bundle structure, roicool.com's real output, step-by-step implementation, validation, and how it differs from llms.txt and schema.org.

AuthorZehra AdaşReviewed byLast updated: View as Markdown
What is OKF: cover with the Google logo

OKF (Open Knowledge Format) is an open format that represents knowledge as a directory of Markdown files with YAML frontmatter 1 . Google Cloud announced version 0.1 on 12 June 2026; the current version is 0.2, published in its own GitHub repository under the Apache 2.0 license 3 2 . Each file is a "concept", and its only required field is type 1 . OKF is not a ranking factor. But a site that already produces Markdown versions of its pages can publish a typed knowledge bundle that AI agents can read and navigate, at very little cost. This guide explains the format from its primary sources and uses roicool.com's own OKF output as the example.

What is OKF?

OKF is a vendor-neutral knowledge format written by Google Cloud's Data Cloud team. The announcement describes it as "an open specification that formalizes the LLM-wiki pattern into a portable, interoperable format" 3 . In the spec's own words the format is "intentionally minimal": a directory of Markdown files with YAML frontmatter, with no schema registry, no central authority and no required tooling 1 .

The format rests on three ideas 1 :

  • Bundle: a self-contained, hierarchical collection of knowledge documents; the unit of distribution.
  • Concept: a single unit of knowledge in a bundle, as one Markdown document. It can describe a table, an API, a metric or a business process.
  • Concept ID: the file's path within the bundle, without the .md suffix.
DateWhat happenedSource
12 June 2026OKF v0.1 announced on the Google Cloud Blog; the spec published inside the knowledge-catalog repository3
August 2026OKF moved to its own repository (GoogleCloudPlatform/open-knowledge-format); the old copy was frozen2 4
As of October 2026Current version 0.2: provenance, trust and lifecycle fields; timestamps with an explicit offset1

Alongside the spec, the repository holds a reference agent that produces OKF bundles from BigQuery datasets, a visualizer that renders a bundle as an interactive graph, and sample bundles for GA4, Stack Overflow, Bitcoin and Acme Retail. The README calls the agent a "proof of concept"; the format itself is the contribution 2 .

Why was OKF created?

The problem OKF addresses is not web search but internal context. According to Google's announcement, most of the knowledge AI agents need is internal: the schema of a table, what a metric means in your company, the runbook for an incident. That knowledge is scattered across metadata catalogs, wikis, code comments and the heads of a few senior engineers 3 .

The starting point is Andrej Karpathy's "LLM Wiki" note. Karpathy describes a setup in which a language model reads sources and writes and maintains a persistent wiki of interlinked Markdown files itself 5 . Google's observation: the pattern keeps reappearing in Obsidian vaults, AGENTS.md-style files and "metadata as code" repositories, but every instance is bespoke. There is no agreed answer to which fields are required or what filenames mean 3 . OKF tries to be that answer.

Version 0.2 goes a step further. Knowledge is now often written and maintained by agents, and the reader has five questions: what is this based on, how much can I trust it, is it still true, is it the current version, was this number produced the way it should have been 1 ? The new fields in 0.2 make those questions answerable from the frontmatter.

Why does OKF matter for GEO and AI visibility?

The honest answer: there is no direct visibility gain today, but there is groundwork value. We draw that from three facts.

1. OKF wasn't written as a web standard. The spec explicitly lists prescribing storage, serving or query infrastructure as a non-goal 1 . It defines no HTTP path and no discovery file, and it doesn't mention llms.txt or schema.org. Its sample bundles are datasets, not websites 2 .

2. Search engines don't ask for extra files. Google says you don't need to create new machine-readable files, AI text files or markup to appear in AI Overviews and AI Mode 8 . As of October 2026, we found no documentation saying that ChatGPT, Gemini, Perplexity or Google's AI features read OKF bundles from websites.

3. Agents read Markdown, and OKF gives it structure. The llms.txt proposal notes that agents now use websites routinely and proposes serving clean Markdown versions of pages at .md URLs 6 . OKF adds three things to those Markdown versions: a type field, a graph of links between concepts, and source and freshness information 1 . Google has also updated its Knowledge Catalog to ingest OKF 3 , so a real consumer of the format exists, though for now in the enterprise data world.

So this is how we position OKF: a few hours of extra work for a site that already produces Markdown versions, and groundwork for the agent era. It shouldn't take priority for visibility. Page content, schema.org markup, crawler access and third-party sources come first; they are listed in our GEO checklist. A Turkish article on OKF from an SEO angle also stresses that OKF complements schema markup rather than replacing it 14 , and we agree.

The structure of an OKF bundle

An OKF bundle is a directory tree of Markdown files. The structure is independent of the domain; the producer organizes concepts however it likes 1 .

bundle/
  index.md          # optional: directory listing
  log.md            # optional: update history
  concept.md        # a concept at the root
  subfolder/
    index.md
    concept.md

Reserved filenames. index.md (directory listing) and log.md (update history) are reserved at every level of the hierarchy and can't be used for concepts 1 . A bundle can be distributed as a git repository (recommended), a tarball or zip archive, or a subdirectory of a larger repository 1 .

Concept files. Each concept is a UTF-8 Markdown file in two parts: a YAML frontmatter block between --- lines and a free-form Markdown body 1 . YAML has its own specification; its current revision, 1.2.2, aims to make YAML a strict superset of JSON 13 , which is why a JSON-quoted string is a valid YAML value.

FieldStatusWhat it's for
typerequiredThe kind of concept ("Service", "Metric", "Playbook"). There is no central list; consumers treat an unknown type as a generic concept.
titlerecommendedDisplay name; can be derived from the filename if missing.
descriptionrecommendedOne-sentence summary, used by index.md generators and previews.
resourcerecommendedA URI that uniquely identifies the asset the concept describes.
tagsrecommendedA list of short tags.
other keysfreeProducers may add any key; consumers may not reject unknown ones.

The rules in the table come from section 4.1 of the spec 1 . The body has no required sections, but the headings # Schema, # Examples and # Computation have conventional meanings, and structural Markdown (headings, lists, tables, code blocks) is preferred to free prose 1 .

The new field families in 0.2. All optional; their absence carries meaning too 1 .

FamilyFieldsWhat it tells
Provenancesources (each entry needs resource; optional id, title, author, usage_count, last_modified)What is the concept based on? A single claim in the body links to its source through a Markdown footnote whose label is a sources id.
Trustgenerated: { by, at }, verified: [{ by, at }]Who wrote it, who confirmed it? With no verified a concept is "unverified", verified only by machines it is "machine-confirmed", verified by a human: actor it is "human-reviewed".
Lifecyclestatus (draft, stable, deprecated), stale_afterIs it still valid? A missing status means stable.
Computationruntime, parameters, computation, executor, attesterOnly for type: Attested Computation: checking that a number was produced the sanctioned way.

The actor convention. generated.by and verified[].by use one of three forms: <producer>/<version> for agents and tools, human:<id> for people and process:<id> for automated processes 1 . Trust classification keys off the human: prefix, so hand-authored or human-confirmed content must use it 1 .

Timestamps. Every timestamp in OKF is an ISO 8601 datetime with an explicit UTC offset, such as 2026-06-30T14:00:00Z 1 . A bare date (2026-06-30) names a different instant in every timezone, so it isn't valid.

index.md. It can appear in any folder and lets an agent see what's there before opening files ("progressive disclosure"). The body is a set of * [Title](relative-url) - short description lines under headings. An index.md carries no frontmatter, with one exception: the root index.md may declare the version the bundle targets with okf_version 1 .

Links. Concepts link to each other with standard Markdown links. A path relative to the bundle root (/tables/customers.md) is the recommended form; relative paths work too. A link whose target doesn't exist isn't malformed; it may point at knowledge not written yet 1 .

A real example: roicool.com's OKF output

Every page on roicool.com has a Markdown twin: a file at the page's URL plus .md. The OKF bundle is built from those twins and published under /okf/. The bundle's root index is /okf/index.md and the English index is /okf/en/index.md. The two blocks below are the output of the generator in the site's codebase (lib/markdown in the Next.js app), with long lists shortened. The site's primary language is Turkish, so the root is Turkish.

The root index, /okf/index.md:

---
okf_version: "0.2"
---

# Roicool

> Roicool, dinamik ve hedef odaklı markalar için dijitalde sürdürülebilir büyüme sağlar.

# Sayfalar

* [Ana sayfa](home.md)

# Bölümler

* [Hizmetler](hizmetler/index.md)

# Diller

* [English](en/index.md)

A concept, /okf/hizmetler/geo-ajansi.md (shortened):

---
type: "Service"
title: "GEO Ajansı"
description: "Roicool, markaların ChatGPT, Gemini, Perplexity ve Google AI Overviews cevaplarında kaynak gösterilmesini ve önerilmesini sağlayan bir GEO (Generative Engine Optimization) ajansıdır."
url: "https://www.roicool.com/hizmetler/geo-ajansi"
lang: "tr"
dateModified: "2026-10-16"
resource: "https://www.roicool.com/hizmetler/geo-ajansi"
alternates:
  en: "https://www.roicool.com/en/services/geo-agency.md"
generated: { by: "process:roicool-cms", at: "2026-10-16T09:30:00.000Z" }
related:
  - { title: "AI görünürlük analizi", resource: "https://www.roicool.com/hizmetler/ai-gorunurluk-analizi.md" }
  - { title: "GEO uyumlu içerik", resource: "https://www.roicool.com/hizmetler/geo-uyumlu-icerik.md" }
---

# GEO Ajansı Roicool: Yapay Zekâ Cevaplarında Önerilen Marka Olun

Roicool, markaların ChatGPT, Gemini, Perplexity ve Google AI Overviews cevaplarında kaynak gösterilmesini ve önerilmesini sağlayan bir GEO (Generative Engine Optimization) ajansıdır.

## Hizmetler
…

Where each rule of the spec is met in this example:

LineOKF rule
okf_version: "0.2" only in the root index.mdSections 8 and 12: the only frontmatter allowed in an index.md 1
* [Ana sayfa](home.md)Section 8: the index entry form 1
home.mdthe home page's twin is /index.md, but in the bundle it is home.md: index.md is a reserved name 1
type: "Service"4.1: the one required field 1
resource4.1: the asset the concept describes, here the page's canonical HTML URL 1
generated.by: "process:roicool-cms"5.2 and 7: the CMS export wrote the file, not an agent 1
generated.at5: an ISO 8601 datetime with an offset (Z) 1
url, lang, dateModified, alternates, relatedproducer keys; 4.1 says unknown keys must not be rejected 1

Blog posts carry one more field: sources. The post's numbered sources list is written into the frontmatter as - { id: "1", resource: "…", title: "…" } entries, so the " 1 ." marker in the text and id: "1" point at the same source 1 .

How to implement OKF, step by step

For a website, the shortest path is not to write OKF as separate content but to generate it from what you have. This is the order we followed.

  1. Set the scope. Only published, indexable pages go into the bundle. Drafts, noindex pages, pages with sample data and internal notes stay out. The sitemap is the most practical source.
  2. Produce a clean Markdown version of every page. No menu, footer or cookie banner; heading, definition, sections, tables and FAQ. The llms.txt proposal's .md suffix rule is a good URL scheme for these versions 6 .
  3. Write a type vocabulary. Map CMS collections to types: service, industry, case study, blog post, glossary term. Types are free text, but each type should have exactly one spelling across the site 1 .
  4. Fill in the frontmatter. type on the first line, then title, description and resource. The page's canonical URL is a good resource 1 .
  5. Add provenance and freshness. Use generated: { by, at } for who produced the file and the content's last meaningful change, and sources for what sourced content rests on. If you don't record verification dates, don't write verified 1 .
  6. Set up the bundle paths. Publish the bundle under its own root (such as /okf/), and rename any page that would be called index.md. The reserved-name rule applies in every folder 1 .
  7. Generate an index.md for every folder. * [Title](relative-url) - description lines under headings, with the description taken from the concept's description 1 .
  8. Declare the version in the root index. okf_version: "0.2" at the top of the root index.md only 1 .
  9. Add discovery. The spec defines none, so use the web's own tools: a link to the bundle index from llms.txt, a <link> element in the page <head>, and an allow line in robots.txt. Version 2 of llms.txt recommends rel="alternate" type="text/markdown" for Markdown versions and rel="describedby" for llms.txt, as a <link> element or an HTTP Link: header 6 7 . The Link: header syntax is defined in RFC 8288 11 , and the text/markdown media type in RFC 7763 12 .
  10. Validate, and repeat. After every content release, run a check that walks the whole bundle (next section).

OKF, llms.txt, schema.org and Markdown twins: the differences

All four get filed under "explaining your content to AI", but they work at different layers.

Schema.org / JSON-LDMarkdown twinllms.txtOKF
WhatA structured data vocabulary inside the HTMLA clean Markdown version of the pageAn intro and link list for agents at the site rootA bundle of typed Markdown concepts
Defined byThe Schema.org community 10The llms.txt proposal 6The llms.txt proposal 6Google Cloud, open spec 1
StatusDocumented and used by Google 9ProposalProposal 6Open spec at version 0.2 1
Where it livesInside the pageThe page URL + .md/llms.txtThe spec doesn't say; ours is /okf/
Main readerSearch enginesAgents, chat assistantsAgentsAgents, catalog tools
Extra informationEntity types and relationsNoneShort descriptionstype, sources, trust, freshness, a concept graph

Schema.org and JSON-LD. Schema.org is a collaborative community activity that creates schemas for structured data on web pages and beyond; its vocabulary can be used with RDFa, Microdata and JSON-LD 10 . Google recommends JSON-LD for structured data where your setup allows it 9 . This layer stays inside the page and helps a search engine understand it. OKF doesn't replace it.

Markdown twin. The page's text version without the design. The llms.txt proposal suggests serving these at the page's URL with a .md suffix 6 . An OKF concept is a Markdown twin with frontmatter added, which is why a site with twins is the closest a site can be to OKF.

llms.txt. A Markdown file at the root that helps agents use a site, with a short introduction and links to detailed Markdown files 6 . llms.txt calls itself a proposal; its version 2 was published in August 2026 7 . OKF's root index.md does a similar job, but it repeats in every folder and there is a typed concept behind every entry.

Our recommended order: schema.org and page content first, then Markdown twins and llms.txt, and OKF last. Each layer builds on the one before.

How to validate OKF

OKF's conformance rule is short. A bundle conforms to 0.2 if 1 :

  1. Every non-reserved .md file has a parseable YAML frontmatter block.
  2. Every frontmatter block has a non-empty type field.
  3. index.md and log.md, when present, follow the structure in sections 8 and 9.

Consumers have to be lenient: a bundle can't be rejected for missing optional fields, unknown type values, unknown keys, broken links or missing index.md files 1 . That leniency gives the producer no margin for error; mistakes just stay silent. So we also check the following:

CheckWhy
Does every URL return 200 and text/markdown?A broken link is valid, but a dead end for an agent
No frontmatter in index.md files below the root?Section 8
Is the root index.md frontmatter exactly okf_version: "0.2"?Section 12
If generated is present, is by set and is at an ISO 8601 datetime with an offset?Sections 5 and 5.2
Does every sources entry have a resource?Section 5.1
Is every concept listed in its own folder's index.md?Progressive disclosure; the spec doesn't require it

We run these checks with a small Python script that starts at /okf/index.md and follows every link. Any YAML 1.2 parser is enough to parse the frontmatter 13 . To inspect a bundle visually, you can also use the reference visualizer in the OKF repository, which builds a single-file interactive graph from a local bundle folder 2 . Orphaned concepts and wrong types show up in the graph straight away.

Common mistakes

  • Naming a concept index.md. The most common trap: on websites the home page's Markdown version is usually /index.md, but in OKF that name is reserved for directory listings 6 1 . We publish the home pages as home.md in the bundle.
  • Putting frontmatter in subfolder index.md files. Frontmatter is allowed only in the root index.md, and only for okf_version 1 .
  • Writing bare dates. stale_after: 2026-12-31 is invalid; 2026-12-31T00:00:00Z is valid 1 .
  • Leaving sources in the body. In 0.2, sources replaced the v0.1 # Citations body list 1 .
  • Writing verified on unverified content. The trust tier is derived from this field; without a real verification event and date, leave it out 1 .
  • Spelling the same type two ways. "WebPage" and "Web Page" are two different types to a consumer. Our own audit found this on one page, and we fixed it.
  • Forgetting part of the site. It is easy to take only CMS records into the bundle and miss pages generated from code. Our audit found that our free tools and brand kit were missing from the bundle, and that links to them had dropped out of the frontmatter.
  • Including drafts and noindex pages. The bundle shouldn't publish anything the HTML doesn't.
  • Selling OKF as a ranking trick. Google says plainly that its AI features need no extra files 8 . Be wary of any offer that sells OKF with a visibility promise.

Case study: roicool.com's OKF implementation

When we rebuilt roicool.com, we already planned a Markdown twin for every page. When OKF 0.2 came out, the decision was simple: add frontmatter and folder indexes to the twins and publish the site as a valid OKF bundle too. No separate content was written; the bundle is generated on every request from the published content in the CMS.

What we publish

URLContent
/okf/index.mdTurkish root index, okf_version: "0.2"
/okf/en/index.mdEnglish index
/okf/<folder>/index.mdEach folder's index, from the published pages in the sitemap
/okf/<page>.mdEvery page's twin, as a concept
/okf/home.md, /okf/en/home.mdThe home pages (index.md is a reserved name)

Which types we use. CMS collections map to types: Home Page, Service, Sector, Case Study, Project, Blog Post, Blog Category, Person, Glossary Term, Comparison, E-book, Podcast Episode, Job Posting, Press Mention, Partnership, Legal Page, Pricing Page, Collection Page (list pages) and Tool (free tools). Each type has one spelling across the site.

How agents find the bundle. The spec defines no discovery, so we leave pointers in three places. Every page's <head> has <link rel="index" type="text/markdown" href="/okf/index.md">; index is a relation in the IANA link relations registry 15 . The optional section of llms.txt has a line pointing at the bundle index. robots.txt has an explicit allow for /okf/ and the index URL. The pages' Markdown versions are also marked with rel="alternate" type="text/markdown" 6 .

Fields we deliberately leave out. We don't write verified, because the CMS keeps no review date and the trust tier is derived from that field 1 . There's no stale_after or log.md either: since the content is generated from the published version on every request, neither adds information for now.

What the audit found (19 October 2026). We audited the bundle again against the current version of the spec. The format was conformant. We found and fixed two bugs: pages generated from code (the tools, the brand kit) were missing from the bundle and links to them were dropping out of the frontmatter, and one page spelled its type differently from the rest. We added the sources field to blog posts and put timestamp and source checks into the validation script. Next on the list are llms.txt v2's describedby recommendation 7 and an exportable archive of the bundle.

If you'd like to see where your brand stands in AI answers, our AI visibility analysis sets a baseline across four platforms. For pages written so AI can cite them, see GEO content, and for ongoing work that includes the technical layer, see our GEO agency page.

Frequently asked questions

Is OKF a ranking factor in Google or in AI answers?

No. OKF is an open format for carrying the knowledge in knowledge catalogs as Markdown and YAML; it is not defined as a signal for search engines. Google says you don't need new machine-readable files or AI text files to appear in AI Overviews or AI Mode. As of October 2026, we found no AI search engine that documents reading OKF bundles from websites.

Will OKF replace llms.txt?

No, they do different jobs. llms.txt is a proposal for a short introduction and link list for agents at a site's root. OKF defines a bundle in which every unit of knowledge is a typed Markdown file, navigated through folder indexes. You can use both: linking from llms.txt to the OKF bundle's index helps an agent find the bundle.

Do I need OKF if I already have schema.org markup?

Schema.org markup lives inside the HTML page and tells search engines what the page is; Google documents it and uses it. OKF is a Markdown bundle separate from the page, carrying knowledge that agents can read and navigate. One doesn't replace the other. For most sites the right order is schema.org and content first, then Markdown versions of pages, then OKF.

Should a small company website publish OKF?

If your site already produces Markdown versions of its pages, adding YAML frontmatter and folder indexes is cheap and turns them into a valid OKF bundle. Writing separate OKF content from scratch won't buy visibility today; spend that effort on page content, schema.org markup and third-party sources first.

Should I block the OKF bundle in robots.txt?

If the knowledge in the bundle is already public on your HTML pages, blocking it gains nothing. The bundle should hold only published, indexable pages; drafts, noindex pages and internal notes shouldn't go into it. robots.txt is not a security measure, so anything that must stay private should never be in the bundle at all.

Which version of OKF is current, and what is its license?

As of October 2026 the current version is 0.2. The specification is published in the GoogleCloudPlatform/open-knowledge-format repository under the Apache 2.0 license. The copy of v0.1 (announced in June 2026) in the knowledge-catalog repository is no longer maintained.

Sources

  1. 1GoogleCloudPlatform, Open Knowledge Format (OKF) v0.2, SPEC.md, 2026
  2. 2Andrej Karpathy, LLM Wiki (GitHub Gist), 2026
  3. 3Google Search Central, AI features and your website, 2026
  4. 4Google Search Central, Introduction to structured data markup in Google Search, 2026
  5. 5Schema.org, 2026
  6. 6IETF, RFC 8288: Web Linking, 2017
  7. 7IETF, RFC 7763: The text/markdown Media Type, 2016
  8. 8YAML Ain't Markup Language, revision 1.2.2, 2021
  9. 9IANA, Link Relations registry, 2026
  10. 10GoogleCloudPlatform, open-knowledge-format repository (README), 2026
  11. 11Google Cloud Blog, Introducing the Open Knowledge Format (12 June 2026), 2026
  12. 12GoogleCloudPlatform, knowledge-catalog: okf folder (frozen v0.1 copy), 2026
  13. 13llmstxt.org, The /llms.txt file, v2 (proposal), 2026
  14. 14llmstxt.org, Changes: v2 (August 2026), 2026
  15. 15Batuhan Durmaz, OKF Nedir? SEO ve Yapay Zekâ Görünürlüğü İçin Önemi (in Turkish, 14 July 2026), 2026

About the author

Managing Partner

Co-founder of Roicool. Before founding Roicool, Mahmud had already worked with more than 15 clinics; today Mahmud leads the performance marketing, Google Ads, SEO and measurement work.

All their posts

The service this post relates toGEO agencyWe measure how AI mentions your brand, how it defines you, and where you stand compared to your competitors, establishing your brand as a trusted reference in these AI-generated answers.

Let’s put what you read to work for you.

In a 30-minute intro we look at your account and tell you which step should come first.