> ## Documentation Index
> Fetch the complete documentation index at: https://bloodhound.specterops.io/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenGraph Overview

> Learn how graph structure affects your OpenGraph experience and how to choose the right approach.

<img noZoom src="https://mintcdn.com/specterops/tTIczgde9H07oLXf/assets/enterprise-AND-community-edition-pill-tag.svg?fit=max&auto=format&n=tTIczgde9H07oLXf&q=85&s=ad49a576589f4d2a8081df77d07fdf56" alt="Applies to BloodHound Enterprise and CE" width="482" height="45" data-path="assets/enterprise-AND-community-edition-pill-tag.svg" />

OpenGraph extends BloodHound beyond Active Directory and Entra ID by letting you collect and ingest data from other identity providers, developer platforms, device management systems, and custom data sources.

OpenGraph is built on a flexible graph data model that supports custom nodes, edges, and properties. You can use it to model any system or environment as a graph to explore and analyze relationships and <Tooltip tip="A chain of abusable privileges and user behaviors that creates direct or indirect connections between principals." cta="Learn more" href="/resources/glossary#attack-path">Attack Paths</Tooltip> in BloodHound.

## Graph structure

Graph structure affects what you can explore and analyze in BloodHound. To choose the right approach for your use case, it's important to understand how **generic** and **structured** graphs differ and how each works with OpenGraph projects and extensions.

### Generic graphs

When OpenGraph was introduced in BloodHound v8.0.0, it required <Tooltip tip="The formatted data generated by an OpenGraph collector that you upload in BloodHound." cta="Learn more" href="/opengraph/developer/graph-data">data payloads</Tooltip> to conform to the basic node, edge, and metadata format only. It produced **generic graphs** to support basic exploration through Cypher queries (and later, node search).

This enabled the BloodHound community to rapidly iterate and experiment with OpenGraph extensions to generate and ingest data payloads only. However, it also meant that OpenGraph data was not integrated with other BloodHound features and capabilities.

### Structured graphs

In BloodHound v9.0.0, SpecterOps expanded the capabilities of OpenGraph extensions by adding support for an <Tooltip tip="A file that defines graph structure, including node types, edge types, traversability behavior, and visual configurations." cta="Learn more" href="/opengraph/developer/graph-definition">extension definition schema</Tooltip>. After installing an extension definition schema *and* uploading a data payload that conforms to it, BloodHound produces a **structured graph**.

Structured graphs enable enhanced features and a more integrated experience in BloodHound. When an extension provides a structured graph with an extension definition schema, saved Cypher queries can run even when some expected data types are absent.

For example, in an Okta environment where application credentials are stored only as `ClientSecrets` (not JWKs), queries that reference `Okta_JWK` nodes would normally fail if those nodes are missing. With a structured graph, the [Application Credentials](/opengraph/extensions/okta/queries#application-credentials) saved query can reference both `Okta_JWK` and `Okta_ClientSecret` and still return expected results.

See the table below for a comparison of features available in structured and generic graphs:

| Feature                                 |                           Structured                          |                            Generic                            |
| --------------------------------------- | :-----------------------------------------------------------: | :-----------------------------------------------------------: |
| Node search                             | <Icon icon="square-check" iconType="solid" color="#22c55e" /> | <Icon icon="square-check" iconType="solid" color="#22c55e" /> |
| Cypher search                           | <Icon icon="square-check" iconType="solid" color="#22c55e" /> | <Icon icon="square-check" iconType="solid" color="#22c55e" /> |
| Bulk data removal                       | <Icon icon="square-check" iconType="solid" color="#22c55e" /> | <Icon icon="square-check" iconType="solid" color="#22c55e" /> |
| Pathfinding                             | <Icon icon="square-check" iconType="solid" color="#22c55e" /> | <Icon icon="square-xmark" iconType="solid" color="#ef4444" /> |
| Relationship-based findings<sup>1</sup> | <Icon icon="square-check" iconType="solid" color="#22c55e" /> | <Icon icon="square-xmark" iconType="solid" color="#ef4444" /> |
| Remediation guidance<sup>1</sup>        | <Icon icon="square-check" iconType="solid" color="#22c55e" /> | <Icon icon="square-xmark" iconType="solid" color="#ef4444" /> |
| Risk metrics<sup>1</sup>                | <Icon icon="square-check" iconType="solid" color="#22c55e" /> | <Icon icon="square-xmark" iconType="solid" color="#ef4444" /> |

<Note>
  <sup>1</sup> Findings, remediation guidance, and risk metrics are available in Enterprise only.
</Note>

## Next steps

To get started with OpenGraph, choose your next step based on your goals:

<CardGroup cols={2}>
  <Card title="Manage Extensions" icon="cubes" href="/opengraph/extensions/manage" horizontal iconType="solid">
    Install extension definition schemas and manage OpenGraph extensions in BloodHound.
  </Card>

  <Card title="Build an Extension" icon="diagram-project" href="/opengraph/developer/graph-definition" horizontal iconType="solid">
    Start by defining your extension's schema, then format data payloads that conform to it.
  </Card>
</CardGroup>
