# Quickstart
> Get started with Cognee quickly and efficiently
export const GraphVisualization = () => {
const svgRef = useRef(null);
const tooltipRef = useRef(null);
useEffect(() => {
const loadD3 = async () => {
if (typeof window === 'undefined') return;
if (!window.d3) {
const script = document.createElement('script');
script.src = 'https://d3js.org/d3.v5.min.js';
script.async = true;
document.body.appendChild(script);
await new Promise(resolve => {
script.onload = resolve;
});
}
initializeGraph();
};
const initializeGraph = () => {
const d3 = window.d3;
if (!d3 || !svgRef.current || !tooltipRef.current) return;
const nodes = [{
"name": "",
"type": "DocumentChunk",
"ontology_valid": false,
"version": 1,
"topological_rank": 0,
"metadata": {
"index_fields": ["text"]
},
"belongs_to_set": null,
"text": "Cognee turns documents into AI memory.",
"chunk_size": 14,
"chunk_index": 0,
"cut_type": "sentence_end",
"id": "9e42824c-569a-5b89-808f-8b8ece56476e",
"color": "#801212"
}, {
"name": "cognee",
"type": "Entity",
"ontology_valid": false,
"version": 1,
"topological_rank": 0,
"metadata": {
"index_fields": ["name"]
},
"belongs_to_set": null,
"description": "Tool that turns documents into AI memory.",
"id": "2d09f34b-aee1-5d32-a2f9-23eb7ed48b24",
"color": "#f47710"
}, {
"name": "product",
"type": "EntityType",
"ontology_valid": false,
"version": 1,
"topological_rank": 0,
"metadata": {
"index_fields": ["name"]
},
"belongs_to_set": null,
"description": "product",
"id": "379107f4-bd9d-5823-990f-cc4becfeccfc",
"color": "#6510f4"
}, {
"name": "documents",
"type": "Entity",
"ontology_valid": false,
"version": 1,
"topological_rank": 0,
"metadata": {
"index_fields": ["name"]
},
"belongs_to_set": null,
"description": "Source materials processed by Cognee.",
"id": "f4653eeb-de7f-51f4-b5ab-516f8d3bf5e7",
"color": "#f47710"
}, {
"name": "concept",
"type": "EntityType",
"ontology_valid": false,
"version": 1,
"topological_rank": 0,
"metadata": {
"index_fields": ["name"]
},
"belongs_to_set": null,
"description": "concept",
"id": "dd9713b7-dc20-5101-aad0-1c4216811147",
"color": "#6510f4"
}, {
"name": "ai memory",
"type": "Entity",
"ontology_valid": false,
"version": 1,
"topological_rank": 0,
"metadata": {
"index_fields": ["name"]
},
"belongs_to_set": null,
"description": "Representation of documents as memory usable by AI.",
"id": "af397680-8867-5ec5-9ba9-dddd39dfd7a8",
"color": "#f47710"
}, {
"name": "text_document",
"type": "TextDocument",
"ontology_valid": false,
"version": 1,
"topological_rank": 0,
"metadata": {
"index_fields": ["name"]
},
"belongs_to_set": null,
"raw_data_location": "",
"external_metadata": "{}",
"mime_type": "text/plain",
"id": "d08449e0-0ce8-52e9-97ab-44e1e8efc4a7",
"color": "#D3D3D3"
}, {
"name": "",
"type": "TextSummary",
"ontology_valid": false,
"version": 1,
"topological_rank": 0,
"metadata": {
"index_fields": ["text"]
},
"belongs_to_set": null,
"text": "Cognee transforms documents into AI memory.",
"id": "59c04417-3fad-53dd-a7b5-dd2ce28dd2dc",
"color": "#1077f4"
}];
const links = [{
"source": "9e42824c-569a-5b89-808f-8b8ece56476e",
"target": "2d09f34b-aee1-5d32-a2f9-23eb7ed48b24",
"relation": "contains",
"weight": null,
"all_weights": {},
"relationship_type": null,
"edge_info": {
"source_node_id": "9e42824c-569a-5b89-808f-8b8ece56476e",
"target_node_id": "2d09f34b-aee1-5d32-a2f9-23eb7ed48b24",
"relationship_name": "contains",
"updated_at": "2025-12-04 08:54:17"
}
}, {
"source": "9e42824c-569a-5b89-808f-8b8ece56476e",
"target": "f4653eeb-de7f-51f4-b5ab-516f8d3bf5e7",
"relation": "contains",
"weight": null,
"all_weights": {},
"relationship_type": null,
"edge_info": {
"source_node_id": "9e42824c-569a-5b89-808f-8b8ece56476e",
"target_node_id": "f4653eeb-de7f-51f4-b5ab-516f8d3bf5e7",
"relationship_name": "contains",
"updated_at": "2025-12-04 08:54:17"
}
}, {
"source": "9e42824c-569a-5b89-808f-8b8ece56476e",
"target": "af397680-8867-5ec5-9ba9-dddd39dfd7a8",
"relation": "contains",
"weight": null,
"all_weights": {},
"relationship_type": null,
"edge_info": {
"source_node_id": "9e42824c-569a-5b89-808f-8b8ece56476e",
"target_node_id": "af397680-8867-5ec5-9ba9-dddd39dfd7a8",
"relationship_name": "contains",
"updated_at": "2025-12-04 08:54:17"
}
}, {
"source": "9e42824c-569a-5b89-808f-8b8ece56476e",
"target": "d08449e0-0ce8-52e9-97ab-44e1e8efc4a7",
"relation": "is_part_of",
"weight": null,
"all_weights": {},
"relationship_type": null,
"edge_info": {
"source_node_id": "9e42824c-569a-5b89-808f-8b8ece56476e",
"target_node_id": "d08449e0-0ce8-52e9-97ab-44e1e8efc4a7",
"relationship_name": "is_part_of",
"updated_at": "2025-12-04 08:54:17"
}
}, {
"source": "2d09f34b-aee1-5d32-a2f9-23eb7ed48b24",
"target": "379107f4-bd9d-5823-990f-cc4becfeccfc",
"relation": "is_a",
"weight": null,
"all_weights": {},
"relationship_type": null,
"edge_info": {
"source_node_id": "2d09f34b-aee1-5d32-a2f9-23eb7ed48b24",
"target_node_id": "379107f4-bd9d-5823-990f-cc4becfeccfc",
"relationship_name": "is_a",
"updated_at": "2025-12-04 08:54:17"
}
}, {
"source": "2d09f34b-aee1-5d32-a2f9-23eb7ed48b24",
"target": "af397680-8867-5ec5-9ba9-dddd39dfd7a8",
"relation": "converts_documents_into",
"weight": null,
"all_weights": {},
"relationship_type": null,
"edge_info": {
"relationship_name": "converts_documents_into",
"source_node_id": "2d09f34b-aee1-5d32-a2f9-23eb7ed48b24",
"target_node_id": "af397680-8867-5ec5-9ba9-dddd39dfd7a8",
"ontology_valid": false
}
}, {
"source": "f4653eeb-de7f-51f4-b5ab-516f8d3bf5e7",
"target": "dd9713b7-dc20-5101-aad0-1c4216811147",
"relation": "is_a",
"weight": null,
"all_weights": {},
"relationship_type": null,
"edge_info": {
"source_node_id": "f4653eeb-de7f-51f4-b5ab-516f8d3bf5e7",
"target_node_id": "dd9713b7-dc20-5101-aad0-1c4216811147",
"relationship_name": "is_a",
"updated_at": "2025-12-04 08:54:17"
}
}, {
"source": "af397680-8867-5ec5-9ba9-dddd39dfd7a8",
"target": "dd9713b7-dc20-5101-aad0-1c4216811147",
"relation": "is_a",
"weight": null,
"all_weights": {},
"relationship_type": null,
"edge_info": {
"source_node_id": "af397680-8867-5ec5-9ba9-dddd39dfd7a8",
"target_node_id": "dd9713b7-dc20-5101-aad0-1c4216811147",
"relationship_name": "is_a",
"updated_at": "2025-12-04 08:54:17"
}
}, {
"source": "59c04417-3fad-53dd-a7b5-dd2ce28dd2dc",
"target": "9e42824c-569a-5b89-808f-8b8ece56476e",
"relation": "made_from",
"weight": null,
"all_weights": {},
"relationship_type": null,
"edge_info": {
"source_node_id": "59c04417-3fad-53dd-a7b5-dd2ce28dd2dc",
"target_node_id": "9e42824c-569a-5b89-808f-8b8ece56476e",
"relationship_name": "made_from",
"updated_at": "2025-12-04 08:54:17"
}
}];
d3.select(svgRef.current).selectAll("*").remove();
const svg = d3.select(svgRef.current);
const width = 800;
const height = 600;
svg.attr("width", width).attr("height", height);
const container = svg.append("g");
const tooltip = d3.select(tooltipRef.current);
const simulation = d3.forceSimulation(nodes).force("link", d3.forceLink(links).id(d => d.id).strength(0.1)).force("charge", d3.forceManyBody().strength(-275)).force("center", d3.forceCenter(width / 2, height / 2)).force("x", d3.forceX().strength(0.1).x(width / 2)).force("y", d3.forceY().strength(0.1).y(height / 2));
const link = container.append("g").attr("class", "links").selectAll("line").data(links).enter().append("line").attr("stroke-width", d => {
if (d.weight) return Math.max(2, d.weight * 5);
if (d.all_weights && Object.keys(d.all_weights).length > 0) {
const avgWeight = Object.values(d.all_weights).reduce((a, b) => a + b, 0) / Object.values(d.all_weights).length;
return Math.max(2, avgWeight * 5);
}
return 2;
}).attr("class", d => {
if (d.all_weights && Object.keys(d.all_weights).length > 1) return "multi-weighted";
if (d.weight || d.all_weights && Object.keys(d.all_weights).length > 0) return "weighted";
return "";
}).on("mouseover", function (d) {
let content = "Edge Information
";
content += "Relationship: " + d.relation + "
";
if (d.all_weights && Object.keys(d.all_weights).length > 0) {
content += "Weights:
";
Object.keys(d.all_weights).forEach(function (weightName) {
content += " " + weightName + ": " + d.all_weights[weightName] + "
";
});
} else if (d.weight !== null && d.weight !== undefined) {
content += "Weight: " + d.weight + "
";
}
if (d.relationship_type) {
content += "Type: " + d.relationship_type + "
";
}
if (d.edge_info) {
Object.keys(d.edge_info).forEach(function (key) {
if (key !== 'weight' && key !== 'weights' && key !== 'relationship_type' && key !== 'source_node_id' && key !== 'target_node_id' && key !== 'relationship_name' && key !== 'updated_at' && !key.startsWith('weight_')) {
content += key + ": " + d.edge_info[key] + "
";
}
});
}
tooltip.html(content).style("left", d3.event.pageX + 10 + "px").style("top", d3.event.pageY - 10 + "px").style("opacity", 1);
}).on("mouseout", function () {
tooltip.style("opacity", 0);
});
const edgeLabels = container.append("g").attr("class", "edge-labels").selectAll("text").data(links).enter().append("text").attr("class", "edge-label").text(d => {
let label = d.relation;
if (d.all_weights && Object.keys(d.all_weights).length > 1) {
label += " (" + Object.keys(d.all_weights).length + " weights)";
} else if (d.weight) {
label += " (" + d.weight + ")";
} else if (d.all_weights && Object.keys(d.all_weights).length === 1) {
const singleWeight = Object.values(d.all_weights)[0];
label += " (" + singleWeight + ")";
}
return label;
});
const nodeGroup = container.append("g").attr("class", "nodes").selectAll("g").data(nodes).enter().append("g");
const node = nodeGroup.append("circle").attr("r", 13).attr("fill", d => d.color).call(d3.drag().on("start", dragstarted).on("drag", dragged).on("end", dragended));
nodeGroup.append("text").attr("class", "node-label").attr("dy", 4).attr("text-anchor", "middle").text(d => d.name);
node.append("title").text(d => JSON.stringify(d));
simulation.on("tick", function () {
link.attr("x1", d => d.source.x).attr("y1", d => d.source.y).attr("x2", d => d.target.x).attr("y2", d => d.target.y);
edgeLabels.attr("x", d => (d.source.x + d.target.x) / 2).attr("y", d => (d.source.y + d.target.y) / 2 - 5);
node.attr("cx", d => d.x).attr("cy", d => d.y);
nodeGroup.select("text").attr("x", d => d.x).attr("y", d => d.y).attr("dy", 4).attr("text-anchor", "middle");
});
svg.call(d3.zoom().on("zoom", function () {
container.attr("transform", d3.event.transform);
}));
function dragstarted(d) {
if (!d3.event.active) simulation.alphaTarget(0.3).restart();
d.fx = d.x;
d.fy = d.y;
}
function dragged(d) {
d.fx = d3.event.x;
d.fy = d3.event.y;
}
function dragended(d) {
if (!d3.event.active) simulation.alphaTarget(0);
d.fx = null;
d.fy = null;
}
};
loadD3();
}, []);
return
Interactive knowledge graph visualization -- drag nodes, zoom, and hover for details. Create your own visualization with 2 additional lines of code [here](/guides/graph-visualization).
async / await, Python’s way of doing asynchronous programming.
Asynchronous programming is used when functions may block because they are waiting for something (for example, a reply from an API call). By writing async def, you define a function that can pause at certain points.
The await keyword marks those calls that may need to pause.
To run such functions, Python provides the asyncio library. It uses a loop, called the event loop, which executes your code in order but, whenever a function is waiting, can temporarily run another one. From inside your function, though, everything still runs top-to-bottom: each line after an await only executes once the awaited call has finished.