Install the package, write one markdown file with frontmatter, and prove it's conformant — with the okf CLI or the C# library. A few minutes, no database, no scaffolding.
The .NET SDK 10.0 or later. That's the whole list — OKF4net has zero third-party runtime dependencies, so there's nothing else to install and nothing else to audit.
$ dotnet --version 10.0.100
Use the library to work with bundles from C#. Add the package to any project:
$ dotnet add package OKF4net
One package, no transitive dependency tree. Prefer the command line? The okf CLI builds to a self-contained Native AOT binary from source (a packaged distribution is on the way):
$ git clone https://github.com/jchable/okf4net
$ dotnet publish src/OKF4net.Cli -c Release # self-contained okf binary, no runtime neededA bundle is just a directory. A concept is one markdown file: YAML frontmatter delimited by ---, then a body. Create a folder and drop in a single concept:
# my_bundle/orders.md --- type: Table title: Orders description: One row per customer order. timestamp: 2026-07-24 --- # Orders Each order belongs to a customer and carries a total.
The file's path with .md removed is its concept id — here, orders. The only value OKF conformance strictly requires (§9) is a non-empty type; title, description and timestamp round out a producer-grade concept.
From the command line, okf validate checks the bundle and exits non-zero if anything is off — so it drops straight into CI:
$ okf validate ./my_bundle
1 concept(s); 0 error(s), 0 warning(s), 0 info.
✓ conformant with OKF v0.1Or do the same from C#. Bundle.Load walks the directory, parses every concept, and builds the cross-link graph — permissively, so a bad file never aborts the load:
using OKF4net; var bundle = Bundle.Load("./my_bundle"); var report = BundleValidator.Validate(bundle); Console.WriteLine(report.IsConformant ? $"conformant with OKF v{OkfSpec.Version} ({bundle.Count} concepts)" : $"{report.Diagnostics.Count} problems found");
Parse failures land in bundle.ParseErrors and broken cross-links stay in the graph as edges to missing concepts — you're told exactly where the holes are, never stopped at the first one.
okf index writes the index.md listings (§6); okf validate's exit code is your CI check. → cli.md→ docs.md — back to the docs index