---
title: Neo4j graph access in Cratis Arc
editUrl: https://github.com/Cratis/Arc/edit/main/Documentation/backend/csharp/neo4j/index.md
description: Read Neo4j graphs from Arc C# commands and queries using tenant-aware sessions, typed concept mapping and database naming shared with Chronicle.
lastUpdated: 2026-11-05T00:00:00.000Z
---


Cratis Arc's Neo4j integration gives commands and queries a session on the graph database of the current tenant. Add `Cratis.Arc.Neo4j` to inject an `IGraphSession` into model-bound queries, a command's `Provide()` method and ordinary services, with the same convenience the MongoDB integration gives documents. You can use it without Chronicle or event sourcing.

A graph is what events leave behind: Chronicle's Neo4j graph sink writes nodes and relationships from graph projections, and nobody writes to it directly. Arc reads it. That is why the session is a read session by default.

## Start with a read

Follow [getting started](/arc/backend/csharp/neo4j/getting-started/) to install the package, connect your host to a server and run the first query.

## Read the right graph

- [Tenancy](/arc/backend/csharp/neo4j/tenancy/): the database naming Arc and Chronicle share, and the single-database mode for development.
- [Connection resolution](/arc/backend/csharp/neo4j/connection-resolution/): choose a server, database or credentials for each tenant.

## Write the queries

- [Querying](/arc/backend/csharp/neo4j/querying/): run Cypher through the session and map the rows to your types.
- [Concepts](/arc/backend/csharp/neo4j/concepts/): bind `ConceptAs<T>` values as parameters and get them back in results.
- [Testing](/arc/backend/csharp/neo4j/testing/): substitute the session in specifications and command scenarios.

If your documents live in MongoDB instead, see the [MongoDB integration](/arc/backend/csharp/mongodb/). Both follow the same [tenancy](/arc/backend/csharp/tenancy/) model.
