Explore the graph
Follow the connections.
Explore the docs, the people they serve, and the journeys between them.
Loading graph…
No matching nodes. Clear filters.
The explorer opens with the whole graph visible. Choose 🎲 (Random node) to focus on a random node from the whole graph. It respects your search and filters, but searches beyond the current neighborhood. It picks a different node when more than one matches, and stays available when matches exist elsewhere in the graph. Shared URLs still restore their saved view.
Choose Fullscreen for more room. Exit fullscreen or Escape returns to the docs page, keeping your view and filters.
To show how-to pages, choose Show everything, select Document under Node kinds, then choose how-to under Content type. Node kinds describe the graph’s Document, Section, Persona and other nodes; content type is the page’s metadata field. Add metadata filter lets you choose another field, a condition and a value. Press Enter after entering a value. All conditions must match; array fields match individual members, and sections use their page’s metadata. Filters are kept in the URL. Clear filters removes them.
Hover over a connection to see its relationship and direction, or tap the connection on a phone. A pair with multiple relationships shows each one. Connections in smaller graphs can also be reached with Tab. Escape dismisses the tooltip.
Hover over a node to highlight its immediate incoming and outgoing connections and neighboring nodes. The rest of the graph dims, and labels concentrate on that neighborhood. Click or tap a node to focus the explorer on its neighborhood and keep its highlight while you move, pan or zoom. The search clears to reveal neighbors; filters and connection depth stay as chosen. Click another node to shift focus again, or click anywhere in the graph outside a node to release its highlight. Closing node details keeps the highlight. Without a pinned node, moving away restores the full view. Keyboard focus also highlights nodes in a smaller graph.
Choose Show everything to see every node and connection at once. It clears the search, neighborhood focus and type filters. Pan and zoom to explore the full graph, then tap a node to focus on its neighborhood and inspect it. There is no node-count limit. Show whole graph returns to the wider view while keeping the selected node and its highlight.
Node colors match the type legend and the colored markers in the filters and results. Zoom in to reveal larger labels with readable backgrounds. Labels wrap across lines and avoid overlaps; selecting or hovering a node gives its label priority. Shapes and written type names also distinguish the categories.
Search for a page, persona, or journey and select it to inspect its metadata. Selecting a node also focuses its neighborhood. Choose Connections to follow incoming and outgoing relationships. List offers the same navigation on a small screen or with a keyboard. Clear every node-type checkbox to show all types. The Metadata tab includes strategy references, citation records, and other author-facing fields permitted by their schemas.
For example, search Devin, select his persona, then choose 2 connections to find his journeys and their pages. Search applies to the current neighborhood; choose Show whole graph to search the entire corpus. Reset clears the selection and all filters.
Explore your graph from the terminal
Section titled “Explore your graph from the terminal”Once the graph is built, four commands answer questions that used to mean reading forty pages. None of them touches a model or the network, and each gives the same answer on your machine and in CI.
This is Maya’s page, M18, continued from Get started.
What shape is the docset in
Section titled “What shape is the docset in”manni graph stats is the overview:
$ manni graph statsTriples: 157Documents: 3Sections: 8Concepts: 3References: 2
Most connected: docs/configuration.md (2) docs/getting-started.md (2)
Orphan docs (1): docs/troubleshooting.md
Broken internal links (1): docs/troubleshooting.md -> missing.md
Broken section refs (1): docs/getting-started.md -> #renamed-headingFive things worth reading in order:
Concepts against documents. Far more concepts than documents usually means the vocabulary is drifting: near-synonyms minted as separate nodes. Far fewer means most pages are uncategorized.
Most connected. The hubs. These are the pages a change reverberates
through, and --top <n> limits the list.
Orphans. Documents nothing links to. Not automatically a defect, since a landing page reached only from navigation is legitimately an orphan. But a page that should be reachable and is not is exactly what nobody notices.
Broken internal links. A link to a page that does not exist. This is
resolution rather than string matching. An extensionless link, an index path,
and a published route all resolve the way the site resolves them, through the
routes config.
Broken section refs. A link to an anchor that does not exist, which is what a renamed heading leaves behind. Almost nothing else catches these.
Coverage is the second half of stats, and it has a page of its own:
Coverage.
What does the corpus say about X
Section titled “What does the corpus say about X”manni graph query matches a triple pattern. Omit a term and it is a wildcard.
What subjects does the corpus assign?
$ manni graph query --predicate dcterms:subject<https://example.com/dd/doc/docs/configuration.md> dcterms:subject <https://example.com/dd/concept/reference><https://example.com/dd/doc/docs/getting-started.md> dcterms:subject <https://example.com/dd/concept/onboarding>
2 match(es)What does the graph know about one concept?
$ manni graph query --subject https://example.com/dd/concept/installation<https://example.com/dd/concept/installation> rdf:type <http://www.w3.org/2004/02/skos/core#Concept><https://example.com/dd/concept/installation> skos:inScheme <https://example.com/dd/scheme><https://example.com/dd/concept/installation> skos:prefLabel "Installation"<https://example.com/dd/concept/installation> skos:prefLabel "installation"<https://example.com/dd/concept/installation> skos:topConceptOf <https://example.com/dd/scheme>
5 match(es)Two preferred labels on one node, which is graph check’s warning about two
spellings, seen from the other side.
Which node carries a literal?
$ manni graph query --object "Configuration"<https://example.com/dd/doc/docs/configuration.md> dcterms:title "Configuration"<https://example.com/dd/doc/docs/configuration.md#configuration> dcterms:title "Configuration"
2 match(es)A term can be a full IRI, a prefix:local CURIE, or, for --object, a literal
value. No match is No matches. and exit 0: a question with no answer has
not failed.
The three flags are long-only. -o is --out on every other verb, and -s is
the metadata tool’s schema flag. One letter meaning two things across one
family costs more than three characters do.
Which page is about this
Section titled “Which page is about this”manni graph search ranks nodes for a text query. It reads the index
manni graph export search writes:
$ manni graph export search$ manni graph search "installation"0.0164 https://example.com/dd/concept/installation [skos:Concept] — Installation
1 result (lexical)The trailing (lexical) is the mode. Run manni graph embed and the same query
gains a vector leg, so a page that never uses your words can still be found.
--mode forces one leg or the other, and --lang picks a localization when
the corpus has more than one, which is required rather than guessed.
What depends on this
Section titled “What depends on this”manni graph traverse walks the graph outward from a node. It has a page of its
own, because it is a different question from the four above:
See what a change affects.
Two habits worth forming
Section titled “Two habits worth forming”Ask before you assume. “Does anything link to the old upgrade guide?” is a
--reverse walk, not an afternoon. “Which pages claim to be about the CLI?” is
a --predicate dcterms:subject query.
Put the answers in CI. stats --check and graph check turn today’s ad-hoc
question into tomorrow’s gate. See Run it in CI.