# Query modules

The Cypher query language can be extended with custom procedures written in
**Python**, **C**, **C++** and **Rust**. These procedures are grouped into so
called query modules. Memgraph offers an open-source collection of implemented
query modules in the form of **MAGE** - **Memgraph Advanced Graph
Extensions**.

MAGE Documentation

Check out the **MAGE documentation** for a detailed overview of all the
available modules and installation instructions.

## Available query modules

### Traditional graph algorithms

Algorithms | Lang | Description |
---|---|---|

betweenness_centrality | C++ | The betweenness centrality of a node is defined as the sum of the of all-pairs shortest paths that run through the node, divided by the number of all-pairs shortest paths in the graph. The algorithm has O(nm) time complexity. |

biconnected_components | C++ | Algorithm for calculating maximal biconnected subgraph. A biconnected subgraph is a subgraph with a property that if any vertex were to be removed, the graph will remain connected. |

bipartite_matching | C++ | Algorithm for calculating maximum bipartite matching, where matching is a set of nodes chosen in such a way that no two edges share an endpoint. |

bridges | C++ | A bridge is an edge, which when deleted, increases the number of connected components. The goal of this algorithm is to detect edges that are bridges in a graph. |

community_detection | C++ | The Louvain method for community detection is a greedy method for finding communities with maximum modularity in a graph. Runs in O(nlogn) time. |

cycles | C++ | Algorithm for detecting cycles on graphs. |

distance_calculator | C++ | Module for finding the geographical distance between two points defined with 'lng' and 'lat' coordinates. |

degree_centrality | C++ | The basic measurement of centrality that refers to the number of edges adjacent to a node. |

graph_coloring | Python | Algorithm for assigning labels to the graph elements subject to certain constraints. In this form, it is a way of coloring the graph vertices such that no two adjacent vertices are of the same color. |

katz_centrality | C++ | Katz centrality is a centrality measurement that outputs a node's influence based on the number of shortest paths and their weighted length. |

kmeans | Python | An algorithm for clustering given data. |

max_flow | Python | An algorithm for finding a flow through a graph such that it is the maximum possible flow. |

node_similarity | Python | A module that contains similarity measures for calculating the similarity between two nodes. |

pagerank | C++ | Algorithm that yields the influence measurement based on the recursive information about the connected nodes influence. |

set_cover | Python | An algorithm for finding the minimum cost subcollection of sets that covers all elements of a universe. |

tsp | Python | An algorithm for finding the shortest possible route that visits each vertex exactly once. |

union_find | Python | A module with an algorithm that enables the user to check whether the given nodes belong to the same connected component. |

vrp | Python | Algorithm for finding the shortest route possible between the central depot and places to be visited. The algorithm can be solved with multiple vehicles that represent a visiting fleet. |

weakly_connected_components | C++ | A module that finds weakly connected components in a graph. |

### Streaming graph algorithms

Algorithms | Lang | Description |
---|---|---|

betweenness_centrality_online | C++ | A dynamic algorithm that updates exact betweenness centrality scores of nodes in evolving graphs. Suitable for graph streaming applications. |

community_detection_online | C++ | A dynamic community detection algorithm suitable for large-scale graphs based upon label propagation. Runs in O(m) time and has O(mn) space complexity. |

katz_centrality_online | C++ | Online implementation of the Katz centrality. Outputs the approximate result for Katz centrality while maintaining the order of rankings. |

node2vec_online | Python | An algorithm for calculating node embeddings as new edges arrive. |

pagerank_online | C++ | A dynamic algorithm made for calculating PageRank in a graph streaming scenario. |

### Graph ML algorithms

Algorithms | Lang | Description |
---|---|---|

link_prediction_with_gnn | Python | Module for predicting links in the graph by using graph neural networks. |

node-classification_with_gnn | Python | Graph neural network-based node classification module |

node2vec | Python | An algorithm for calculating node embeddings on static graph. |

temporal_graph_networks | Python | A graph neural network (GNN) algorithm that can learn to predict new edges and node labels from the graph structure and available node and edge features. |

### Utility algorithms

Algorithms | Lang | Description |
---|---|---|

export_util | Python | A module for exporting the graph database in different formats (JSON). |

graph_analyzer | Python | This Graph Analyzer query module offers insights about the stored graph or a subgraph. |

graph_util | C++ | A module with common graph algorithms and graph manipulation utilities |

import_util | Python | A module for importing data from different formats (JSON). |

json_util | Python | A module for loading JSON from a local file or remote address. |

meta_util | Python | A module that contains procedures describing graphs on a meta-level. |

rust_example | Rust | Example of a basic module with input parameters forwarding, made in Rust. |

uuid_generator | C++ | A module that generates a new universally unique identifier (UUID). |

### Integrations

Algorithms | Lang | Description |
---|---|---|

cugraph | CUDA | Collection of NVIDIA GPU-powered algorithms integrated in Memgraph. Includes centrality measures, link analysis and graph clusterings. |

elasticsearch | Python | A module used for synchronizing Memgraph and Elasticsearch. |

igraph | Python | A module that provides igraph integration with Memgraph and implements many igraph algorithms. |

nxalg | Python | A module that provides NetworkX integration with Memgraph and implements many NetworkX algorithms. |