Knowledge graphs, archived to last.
IndieK is an open archival format for knowledge graphs: plain files, signed by their authors, append-only, and verifiable by anyone — with nothing but a published specification and standard cryptography.
from indiek import Archive, Author
ik = Archive.open("my-archive", author=Author.generate())
theorem = ik.create_node("Gödel's first incompleteness theorem")
proof = ik.create_node("Diagonalisation over provability.")
ik.create_edge(proof, theorem, "proves")
tag = ik.create_tag("theorem", "A proven statement", kind="node")
ik.set_tag(tag, theorem)
print(ik.seal().hash) # one hash commits to everything
Why IndieK
Plain files
An archive is a folder of UTF-8 text logs and content-addressed files. No database, no server, no proprietary container.
Signed and chained
Every event is signed with its author's Ed25519 key and linked to the previous one by a hash. Any change to the history is detected.
Nothing is overwritten
Revisions are new events; earlier versions stay in the log. How your understanding evolved is part of the knowledge.
Edges carry content
A connection between two ideas has its own text, author, tags and history. "Why are these linked?" gets a first-class answer.
Your vocabulary
No fixed ontology. Tags are designed freely, for nodes and for edges, and anyone can annotate a graph with their own key.
Built to be checked
Seals commit to a whole archive in one short hash. Publish it, and anyone can verify their copy — offline, without trusting anyone.
An archive in thirty seconds
my-archive/
├── events/…/events.ndjson the knowledge graph
├── meta/events/…/events.ndjson tags on it
├── blobs/sha256/71/a0/71a0b5… content, named by its hash
├── seals/seals.ndjson signed checkpoints
├── SPEC.md the specification itself
└── MANIFEST.json layout and JSON Schemas
Durable by design
The signed event logs and the blobs are the archive; every index or view is rebuilt from them. Archives carry their own specification and test vectors, so a reader in fifty years needs neither this website nor our code. Hashes and signatures name their algorithms, and transcription events let future generations re-attest old history with newer cryptography.
From the shell
uv tool install 'indiek[cli]'
ik keygen --write
ik config --set-archive-path ~/archives/notes
ik create_node --content "Understanding is not retrieval"
ik create_node --content ./notes/limits.md
ik create_edge --source-node e2 --target-node e1 --content "illustrates"
ik seal
ik verify
From Python
from indiek import Archive
reader = Archive.open("my-archive") # read-only
for item in reader.index.items.values():
print(item.alias, item.kind, item.author[:8])
print(reader.verify()) # full check, latest seal
print(reader.fsck().blob_files)
Status
ik CLI
Format 3.0 — first public version
1 November 2026 — contributions open
Desktop app — development is underway
The format specification and the indiek package are free and open source
under the Apache License 2.0. Read the vision, then
get started.