OntoDAG
Associative memory and categories based on a directed acyclic graph data structure
Documentation
- User Guide — tutorial and how-to: installation, Python, command line, web app/REST, AI agents, troubleshooting. Start here.
- Reference — every command, setting, kind, endpoint and tool, compact; its tables are pinned to the code by the test suite.
- How It Works Inside — the design in plain language (canonical form, query planning, content-addressed persistence, verifiable answers).
- Changelog — what each release added, with registry migration notes.
- The contract — what programs (and AI agents) built on OntoDAG may rely on: the guarantees, versioned.
- docs/README.md — the full documentation map: design records
(
docs/) and discussion drafts / future directions (docs/plans/, including the Roadmap).
See also ontodag-fs: any OntoDAG
store can be browsed as a filesystem — paths are category queries, files are
classified objects stored on Swarm, FUSE-mountable (odag-fs, which shares
odag's store settings).
Specification
A Directed Acyclic Graph (DAG) associative storage and category manager in Python. You can store items into a ontodag and recall items from it. To store or "put" an item into a ontodag, you give it a name and a set of other names of already existing items that are its supercategories. To recall or "get", you specify a set of item names to get all items that are subcategories of all these items; alternatives are one word away (odag get Flight Japan or Hotel, get_any in Python).
File a flight confirmation under both Flight and Japan, the boarding pass
under the flight itself, and odag get Japan returns the whole trip — including
the boarding pass you never filed under the trip. No folder had to be chosen.
Categories can also carry typed values: declare time as a dimension
and time(2026-08-15) becomes an ordinary category whose ordering OntoDAG
computes — odag get Flight 'time(2026-06-01..2026-08-31)' finds last summer's
flights with no edge ever stored between them, at any range, with exact
arithmetic — values are rationals of the SI anchor units, so every exactly
defined unit works: all of SI, pounds and psi, TB and TiB, even Celsius and
Fahrenheit (mapped exactly onto the kelvin scale: temperature(24C)) built
in, and unit packs one merge
away (odag pack crypto-core for BTC/ETH/BZZ, fiat-iso4217 for ~150 national
currencies, crypto-majors for the market's top coins — or declare your
own: vocabulary is graph data that travels with the store, no release
needed). odag prelude declares the everyday dimensions in one command. Weights and sizes (weight(..5kg)), hierarchical codes like geohash
cells, and does-it-fit tuples all work the same way. See
User Guide §4.7 and the design record
docs/DIMENSIONS.md.
Values are stored in an exact canonical form and shown to you in a friendly
one: on a terminal odag prints time(2026) and weight(3kg), while pipes
and files always get the exact bytes, so odag get ... | odag round-trips
(--render/--raw override; odag canon TERM shows what any spelling
actually stores). The same split governs how much you get: a terminal stops
at 50 results with a note saying how many were withheld, a pipe is never
truncated. A query with no terms at all is the empty intersection — no
constraints, so every item (odag count gives just the size).
For AI agents
Serve any store to an agent over MCP with odag-mcp
(claude mcp add odag -- odag-mcp): query, fits-within, overlap candidates,
per-item description, canonical echo, and an about tool that says what the
store contains — read-only by default; --write adds a propose→confirm write
surface where every change carries a signed provenance record (who
asserted what, against which state) and a review tool computes each claim's
standing under your trust list: claims merge, acceptance is policy. Every answer cites the root — a fingerprint of the
store's entire content — and is_below answers can carry a certificate
that anyone holding only that fingerprint can verify, with no access to the
store (ontodag.certificates.verify_below). Equal knowledge yields an equal
fingerprint, so two parties can prove they agree — and a disagreement shows
up as structure, not prose. The guarantees an agent (or any program) may
rely on are written down and versioned in docs/CONTRACT.md;
the tool shapes in docs/AGENT_SURFACE.md.
Roadmap
The roadmap — what is done, what is queued next, what is parked and why — is in
docs/plans/ROADMAP.md.
Longer-term goals for the database direction (and the features deliberately not
built yet) are in docs/plans/DATABASE_DIRECTION.md; the
day-to-day task list is in CLAUDE.md.
Potential Applications
- Using the ontology graph for content categorization instead of folders
- Replace content tags with a more structured ontology
- Access control (ACT) groups
- Memberships in organizations and gate content based on membership
- Communication channel groups defined by the ontology
- Fostering deals within a universal marketplace for services and goods
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ontodag-0.13.0.tar.gz.
File metadata
- Download URL: ontodag-0.13.0.tar.gz
- Upload date:
- Size: 192.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae8757f1f7dd3779eb3fdddb8380765d41b61d81d824d428f5ccf29d1c030cd7
|
|
| MD5 |
01a0da7846f09979449df7b4c4fe2142
|
|
| BLAKE2b-256 |
9aed1bdedb4f2be9fa83dce265dd29600bd0a253d4ba23db44cafce451a45e74
|
Provenance
The following attestation bundles were made for ontodag-0.13.0.tar.gz:
Publisher:
publish.yml on petfold/ontodag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ontodag-0.13.0.tar.gz -
Subject digest:
ae8757f1f7dd3779eb3fdddb8380765d41b61d81d824d428f5ccf29d1c030cd7 - Sigstore transparency entry: 2337089289
- Sigstore integration time:
-
Permalink:
petfold/ontodag@e00f75503135f2e2cbe47dd420bcaf57e1341b13 -
Branch / Tag:
refs/tags/v0.13.0 - Owner: https://github.com/petfold
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e00f75503135f2e2cbe47dd420bcaf57e1341b13 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ontodag-0.13.0-py3-none-any.whl.
File metadata
- Download URL: ontodag-0.13.0-py3-none-any.whl
- Upload date:
- Size: 108.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
abd125823015849355f5684ee1f3793f3ff8f7b709b7eafc9b4e3fa27afa9a58
|
|
| MD5 |
9c8b48d9dde5341791eccc4f589af5b1
|
|
| BLAKE2b-256 |
3aa4dcda0888f0e9f7d5890e79e8cc14123bf8ebc83ea3c8d005e295fd2e3339
|
Provenance
The following attestation bundles were made for ontodag-0.13.0-py3-none-any.whl:
Publisher:
publish.yml on petfold/ontodag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ontodag-0.13.0-py3-none-any.whl -
Subject digest:
abd125823015849355f5684ee1f3793f3ff8f7b709b7eafc9b4e3fa27afa9a58 - Sigstore transparency entry: 2337089348
- Sigstore integration time:
-
Permalink:
petfold/ontodag@e00f75503135f2e2cbe47dd420bcaf57e1341b13 -
Branch / Tag:
refs/tags/v0.13.0 - Owner: https://github.com/petfold
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e00f75503135f2e2cbe47dd420bcaf57e1341b13 -
Trigger Event:
push
-
Statement type: