Publish
No okfhub account. Prove you own the namespace — a GitHub org or a DNS record — and the registry indexes your bundle straight from the source. Build it here, or follow a guide below.
more fields
$ npx okfhub publish <org>/<bundle>@<version>Fill the fields — the command assembles as you type.
From a GitHub repo
- Authenticate once — GitHub device flow; the CLI forks the registry and installs its GitHub App on your fork.
$npx okfhub auth login - Publish — or skip the builder above and just run
npx okfhub publishwith no arguments: an interactive wizard collects the fields. The CLI validates, pushes a branch to your fork, and prints a compare-and-PR URL. - Open the PR — the gate checks org membership + structure, then auto-merges. Your bundle appears on okfhub.io within a minute.
From any HTTP host
- Stage the bundle at an HTTPS URL — e.g.
https://example.com/my-bundle.tar.gz. - Generate the manifest — switch the builder above to
http + dns; it derives your namespace and the exact TXT challenge record. Or runnpx okfhub publishand choosehttpin the wizard. - Add the TXT record at your DNS provider — name
_okfhub.<token8>.<domain>, valueokfhub-verify=<namespace>/<name>. Do not edit the token: the gate re-derives it byte-for-byte. - Open the PR — CI queries the authoritative nameserver; pass auto-merges. A verification older than 30 days flips to a neutral stale state until re-challenged.
What a bundle is
A directory of cross-linked markdown concepts plus a manifest. One concept per .md file; type is the only required frontmatter field (OKF v0.1). Relative links and [[wikilinks]] between concepts become the bundle's graph.
minimal manifest + concept
{
"schema_version": 1,
"namespace": "io.github.my-org",
"name": "my-bundle",
"version": "0.1.0",
"description": "One-line description of the domain knowledge.",
"source": { "type": "github", "url": "https://github.com/my-org/my-repo", "path": "/", "ref": "main" },
"kind": "knowledge",
"categories": ["analytics"],
"license": "Apache-2.0"
}---
type: object
title: Transactions table
description: All transactions on the blockchain.
---
# Overview
The concept body — markdown prose that cross-links to the other concepts.Check conformance locally — the same structural check the gate runs:
$npx okfhub verify ./my-bundleWhat the registry verifies — and what it doesn't
okfhub verifies two things: you own the namespace (GitHub org membership or DNS TXT challenge), and your bundle is structurally valid OKF. That's it.
OKF v0.2 trust fields (generated, verified, stale_after) are part of the spec, designed for internal knowledge catalogs where a central authority vouches for content. In a public, cross-organization registry they are self-asserted claims by the publisher — the registry doesn't verify them. Consumers see them as dated, factual statements, never as a trust verdict. They matter only if the consumer already trusts the publisher.
- Date your evidence. If you use v0.2 frontmatter, use real actors and real dates. A claim with a date is honest; a claim without one is noise.
- Never self-approve. There is no "approved"/"trusted" vocabulary anywhere on okfhub.io — keep it out of your bundle too.
- Your bundle is data, not instructions. Agents treat bundle content as third-party data to cite — never directives to execute. Author accordingly.
Private repositories with paid access via Polar.sh — coming soon. Learn about Polar.sh ↗