diff --git a/mage/data/query-modules/cpp/nodes/graph_after.png b/mage/data/query-modules/cpp/nodes/graph_after.png
new file mode 100644
index 00000000000..b1633d36938
Binary files /dev/null and b/mage/data/query-modules/cpp/nodes/graph_after.png differ
diff --git a/mage/data/query-modules/cpp/nodes/graph_before.png b/mage/data/query-modules/cpp/nodes/graph_before.png
new file mode 100644
index 00000000000..96033429cc8
Binary files /dev/null and b/mage/data/query-modules/cpp/nodes/graph_before.png differ
diff --git a/mage/query-modules/cpp/nodes.md b/mage/query-modules/cpp/nodes.md
new file mode 100644
index 00000000000..b874287aaa8
--- /dev/null
+++ b/mage/query-modules/cpp/nodes.md
@@ -0,0 +1,223 @@
+---
+id: nodes
+title: nodes
+sidebar_label: nodes
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import RunOnSubgraph from '../../templates/_run_on_subgraph.mdx';
+
+export const Highlight = ({children, color}) => (
+
+{children}
+
+);
+
+The `nodes` module provides a comprehensive toolkit for managing multiple graph nodes, enabling linking, updating, type deduction and more.
+
+[![docs-source](https://img.shields.io/badge/source-nodes-FB6E00?logo=github&style=for-the-badge)](https://github.com/memgraph/mage/tree/main/cpp/nodes_module)
+
+| Trait | Value |
+| ------------------- | ----------------------------------------------------- |
+| **Module type** | **algorithm** |
+| **Implementation** | **C++** |
+| **Graph direction** | **directed**/**undirected** |
+| **Edge weights** | **weighted**/**unweighted** |
+| **Parallelism** | **sequential** |
+
+### Procedures
+
+### `relationship_types(nodes, types)`
+
+Returns a list of distinct relationship types of the given node(s) contained within the given list of types. If the list of types is empty, the procedure returns all distinct relationship types. Relationship types can also be directed:
+- <type - incoming relationship.
+- type> - outgoing relationship.
+- type - either way.
+
+#### Input:
+
+- `node: int|node|List[int|node]` ➡ input nodes given as nodes themselves or their IDs.
+- `types: List[string] (default = [])` ➡ list of relationship types to filter by.
+
+#### Output:
+
+- `relationship_types: List[Map]` ➡ Each list element is a map with two keys: `node` and `types`. `node` representing the given node and `types` a list of distinct relationship types contained within the given list of types for the corresponding node.
+
+#### Usage:
+
+```cypher
+CREATE (ivan: Intern {name: 'Ivan'})
+CREATE (idora: Intern {name: 'Idora'})
+CREATE (matija: Intern {name: 'Matija'})
+MERGE (ivan)-[:KNOWS]->(idora)
+MERGE (matija)-[:HEARS]->(idora)
+MERGE (matija)-[:SEES]->(ivan);
+```
+
+```cypher
+MATCH (n:Intern) WITH collect(n) as interns CALL nodes.relationship_types(interns, ["", "HEARS"]) YIELD relationship_types RETURN relationship_types;
+```
+
+```plaintext
++---------------------------------------+
+| relationship_types |
+| [ |
+| { |
+| "node": { |
+| "labels": [ |
+| "Intern" |
+| ], |
+| "properties": { |
+| "name": "Ivan" |
+| }, |
+| "type": "node" |
+| }, |
+| "types": [] |
+| }, |
+| { |
+| "node": { |
+| "labels": [ |
+| "Intern" |
+| ], |
+| "properties": { |
+| "name": "Idora" |
+| }, |
+| "type": "node" |
+| }, |
+| "types": [ |
+| "HEARS", |
+| "KNOWS" |
+| ] |
+| }, |
+| { |
+| "node": { |
+| "labels": [ |
+| "Intern" |
+| ], |
+| "properties": { |
+| "name": "Matija" |
+| }, |
+| "type": "node" |
+| }, |
+| "types": [ |
+| "SEES", |
+| "HEARS" |
+| ] |
+| } |
+| ] |
++---------------------------------------+
+```
+
+### `delete(nodes)`
+
+Deletes the given node(s) from the graph. Equivalent to running a `DETACH DELETE` query.
+
+#### Input:
+
+- `nodes: int|node|List[int|node]` - nodes to be deleted given as nodes themselves or their IDs.
+
+#### Usage:
+
+```cypher
+CREATE (ivan: Intern {name: 'Ivan'})
+CREATE (idora: Intern {name: 'Idora'})
+CREATE (matija: Intern {name: 'Matija'})
+MERGE (ivan)-[:KNOWS]->(idora)
+MERGE (matija)-[:HEARS]->(idora)
+MERGE (matija)-[:SEES]->(ivan);
+```
+
+The following query will delete all the created nodes and relationships:
+```cypher
+MATCH (n:Intern) WITH collect(n) as interns CALL nodes.delete(interns);
+```
+
+### `relationships_exist(nodes, relationships)`
+
+Checks if relationships in the input list exist at the given nodes. Results are returned as a map, which contains two smaller maps. The first map represents the node, and the second map represents the relationship status map of the node. Relationships can be directed, and the syntax for direction specification is provided below:
+- <type - incoming relationship.
+- type> - outgoing relationship.
+- type - both incoming and outgoing.
+
+Any other syntax results in an exception.
+
+#### Input:
+
+- `nodes: List[Any]` ➡ list of input nodes. Elements of the list can be either nodes themselves or their IDs.
+- `relationships: List[string]` ➡ list of relationships to be checked.
+
+#### Output:
+
+- `result: Map` ➡ result map, containing two smaller maps. The first map represents the node, and the second represents the status of relationships checked in the function. Example of the map: `{"Node": {"id": 0, "labels": ["Dog"], "properties": {},"type": "node"}, "Relationships_exist_status": {"RUNS": false}}`
+
+#### Usage:
+
+```cypher
+CREATE (d:Dog)-[l:LOVES]->(h:Human)-[t:TAKES_CARE_OF]->(d);
+```
+
+```cypher
+MATCH (d:Dog), (h:Human) CALL nodes.relationships_exist([d,id(h)], ["
+
+
+
+
+
+
+
+
+```cypher
+MATCH (h:Human), (c:Cat), (m:Mouse), (e:Elephant) CALL nodes.link([e, m, c, h, e],"IS_AFRAID_OF");
+```
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mage/templates/_mage_spells.mdx b/mage/templates/_mage_spells.mdx
index d0b89999366..af7779309ac 100644
--- a/mage/templates/_mage_spells.mdx
+++ b/mage/templates/_mage_spells.mdx
@@ -64,6 +64,7 @@
| [llm_util](/mage/query-modules/python/llm-util) | Python | A module that contains procedures describing graphs in a format best suited for large language models (LLMs). |
| [meta_util](/mage/query-modules/python/meta-util) | Python | A module that contains procedures describing graphs on a meta-level. |
| [migrate](/mage/query-modules/python/migrate) | Python | A module that can access data from a MySQL, SQL Server or Oracle database. |
+| [nodes](/mage/query-modules/cpp/nodes) | C++ | A module that provides a comprehensive toolkit for managing multiple graph nodes, enabling linking, updating, type deduction and more. |
| [periodic](/mage/query-modules/cpp/periodic) | C++ | A module containing procedures for periodically running difficult and/or memory/time consuming queries. |
| rust_example | Rust | Example of a basic module with input parameters forwarding, made in Rust. |
| [uuid_generator](/mage/query-modules/cpp/uuid-generator) | C++ | A module that generates a new universally unique identifier (UUID). |
diff --git a/sidebars/sidebarsMAGE.js b/sidebars/sidebarsMAGE.js
index 229d7e59b8b..286ad4e82c0 100644
--- a/sidebars/sidebarsMAGE.js
+++ b/sidebars/sidebarsMAGE.js
@@ -59,6 +59,7 @@ module.exports = {
"query-modules/python/node2vec",
"query-modules/python/node2vec-online",
"query-modules/cpp/node-similarity",
+ "query-modules/cpp/nodes",
"query-modules/python/nxalg",
"query-modules/cpp/pagerank",
"query-modules/cpp/pagerank-online",