.NET Standard 2.0
dotnet add package SliccDB --version
NuGet\Install-Package SliccDB -Version
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SliccDB" Version="" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SliccDB --version
#r "nuget: SliccDB,"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SliccDB as a Cake Addin
#addin nuget:?package=SliccDB&version=

// Install SliccDB as a Cake Tool
#tool nuget:?package=SliccDB&version=


C# .Net Visual Studio Version

Light Embedded Graph Database for .net

<img src="" width="128" height="128" align="right">

Important News

Since I am now working on my thesis I don't have time neccessary to work on SliccDB. I am looking for contributors. Please reach out by email Thanks! I've made SliccDB (actually a companion app, but still) my thesis Project topic! Now I can focus on development of this library to full capacity. Expect new stuff!

Where do i get this????

You have three options to get this package.

Nuget Package

You can download nuget package from here or by using this command

NuGet\Install-Package SliccDB

Unstable Builds

If you feel adventurous, you can download SliccDB as a build artifact from github actions. Note that these are not official releases, so they may contain bugs. But, they can also contain features not yet found on nuget... you never know ¯_(ツ)_/¯

Compiling from source

You can always just clone this repo, open the solution with visual studio and compile it yourself. The build will produce both the dll and nuget package. You can also just build it with dotnet tool thingy. You're the boss here!

What is it?

Think of it like SQLite for graph databases. There were some efforts to build something like this (such as Graph Engine) but Microsoft decided to abandon all of their graph database related projects. Be aware that I have no intention to make this some sort of Neo4J .net Clone. It will be not fully compliant with features of mentioned database. I intend on integrating Cypher, because it is an ISO standard GQL (Graph Query Language). More info and resources about cypher can be found on their site (

Update regarding Cypher

I've decided to focus on extending and optimizing C# ↔ database interaction. Cypher implementation is under consideration.


Here are some simple examples:

Basic Operations
Create Node Programatically
DatabaseConnection connection = new DatabaseConnection("filename");
var properties = new Dictionary<string, string>();
var labels = new HashSet<string>();
properties.Add("Name", "Alice");

var nodeOne = connection.CreateNode(properties, labels);
properties.Add("Name", "Steve");

var nodeTwo = connection.CreateNode(properties, labels);
Create Relations between two nodes

Note that relations also have ability to hold data like Properties and Labels

var properties = new Dictionary<string, string>();
var labels = new HashSet<string>();
properties.Add("How Much", "Very Much");
labels.Add("Label on a node!");
sn => sn.First(x => x.Hash == nodeOne.Hash), tn => tn.First(a => a.Hash == nodeTwo.Hash), properties, labels);

You can query nodes and relations as you would any collection (With Linq).

Query Nodes
var selectedNode = Connection.Nodes().Properties("Name".Value("Tom")).Labels("Person").FirstOrDefault();
Query Relations
var queriedRelation = Connection.Relations().Properties("Property".Value("PropertyValue"))
 var relation = Connection.Relations("Likes").ToList().First();
            relation.Properties["How Much"] = "Not So Much";
            relation.Labels.Add("Love Hate Relationship");


 var node = Connection.Nodes().Properties("Name".Value("Steve")).First();
            node.Properties["Name"] = "Steve2";

var toDelete = Connection.CreateNode(
                new Dictionary<string, string>() { { "Name", "Tom" } },
                new HashSet<string>() { "Person" }

var queryToDelete = Connection.Nodes().Properties("Name".Value("Tom")).Labels("Person").FirstOrDefault();

 var testNode1 = Connection.CreateNode(
                new Dictionary<string, string>() { { "Name", "C" } },
                new HashSet<string>() { "S" }

            var testNode2 = Connection.CreateNode(
                new Dictionary<string, string>() { { "Name", "A" } },
                new HashSet<string>() { "S" }

var properties = new Dictionary<string, string>();
var labels = new HashSet<string>();
properties.Add("Test", "Test");
labels.Add("Test on a node!");
Connection.CreateRelation("Test", sn => sn.First(x => x.Hash == testNode1.Hash), tn => tn.First(a => a.Hash == testNode2.Hash), properties, labels);

var queriedRelation = Connection.Relations("Test").FirstOrDefault();

Schemas and Mappings

Since 0.1.1 SliccDb features object - graph entity mapping, allowing to treat Relations and Nodes like regular poco classes. To ensure correct mapping for both types and property names it was neccessary to implement some sort of schema enforcement.Therefore, schemas were born.


Schemas are like recipes for your graph entities, they enforce the existence of certain fields and allow to specify to which type these fields should be mapped. Schemas are strongly related to labels. Schemas are defined per label.


schema = Connection.CreateSchema("Person",
                    new List<Property>() { new() { FullTypeName = "System.String", Name = "Name" }, new() { FullTypeName = "System.Double", Name = "Age" } });

Now when we label any entity with "Person", missing fields will be automatically added to it. In this example, when we add a label "Person" to a node or relation it will create Fields "Name" and "Age" if those do not exist.


Mapper allows us to manipulate graph by manipulating regular POCOs. Let's say we have two classes, representing Trains, Stations and a class RidesTo which represents relation between train and station:

public class Train
    public string SerialNumber { get; set; }
public class Station
    public string City { get; set; }
public class RidesTo
    public int Platform { get; set; }

By passing an object as an argument to method CreateNode we can create node with properties equal to the properties of an object:

  Connection.CreateNode(new Train() { SerialNumber = "CE2332" });
  Connection.CreateNode(new Train() { SerialNumber = "CE2356" });
  Connection.CreateNode(new Station() { City = "Katowice" });
  Connection.CreateNode(new Station() { City = "Warsaw" });

We can also create a relation connecting two stations (by a query) with a train:

Connection.CreateRelation(n =>
                a => Connection.Nodes().Properties("SerialNumber".Value("CE2356")).FirstOrDefault(),
                new RidesTo(){ Platform = 2 });

Why it exists?

I just need embedded Graph Database Solution that supports Cypher Language. Graph DBMS is a perfect solution for some gamedev ai-related stuff (Procedural Behaviour Design, Perception and context awareness storage), but every solution needs a server. Imagine that in order to play your game you must install Neo4J's server in the first place, or every time your npc makes a decision it queries Azure Cloud to check how much he likes pizza. It's unreliable and forces you to host a game server for the entirety of a game's lifetime even though your game is singleplayer. Sounds stupid? Well, ask EA about Simcity 2013 - they thought it's a great idea! But really, Graph DBMS has other use cases. Watch this video to know more about Graph DBMS

DB Explorer

DB Explorer is now considered obsolete, but you can still get the source code here DB Explorer Screenshot
DB Explorer is a companion app currently used for interaction with database. It allows for CRUD operations on the database to test its' functionalities. This app is now considered legacy code and was moved to a different repository


Below you'll find a list of features that will be included in the 1st milestone release of SliccDB:

  • Basic Structures (Relations, Nodes)
  • Serialization (Reading and Writing)
  • Queries
  • Basic Debugger App (Ability to add, remove, edit nodes and relations)
  • Schemas for Nodes and Relations
  • ORM (Object Relational Mapper) for Nodes and Relations
  • New Companion App

Can I help?

Of course! Any help with the SliccDB will be appreciated.

Special Thanks!
Product Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows net7.0 net7.0-android net7.0-ios net7.0-maccatalyst net7.0-macos net7.0-tvos net7.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48 net481
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated 133 2/2/2023
0.1.1 549 2/1/2023
0.1.0 221 11/1/2022
0.0.1 211 10/31/2022