NEW Use Case
AboutYou: data-driven recommendations
the multi-model NoSQL database

A distributed free and open-source database with a flexible data model for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.


Get started

User Survey
get your Arango T-Shirt

  • Multi-ModelDocuments, graphs and key-value pairs — model your data as you see fit for your application.

    read more

  • Joins, Joins, JoinsConveniently join what belongs together for flexible ad-hoc querying, less data redundancy.

    read more

  • TransactionsEasy application development keeping your data consistent and safe. No hassle in your client.

    read more

persons and cities are documents; friendship relation is a graph; fast lookup by identifier
FOR p In Persons
  FILTER myfunctions::mustPayTax(p)
  LET distance = LENGTH(
    SHORTEST_PATH(Persons, Friends, p, 'Persons/godfather', 'any'))
join persons with their cities using fast hash lookup, even when sharding
  FOR c IN Cities
     FILTER ==
all modifications together behave as transactions or sub-transactions
      UPDATE p WITH {taxPaid: p.taxPaid * * distance}
        IN Persons

ArangoDB Query Language

Describe document and graph queries in a self-explaining query language. Easy to learn, easy to join.

Build your own Microservices


Use the Foxx framework to expose queries, traversals and database operations as REST/Web API. No need to copy queries to every new client you write. Simply create a microservices to access the data the way you like. Enhance security by access control down to field level.

Query Builder
var Foxx = require("org/arangodb/foxx"),
    controller = new Foxx.Controller(applicationContext),
    joi = require("joi"),
qb = require("aqb"),
    db = require("internal").db;

  function(req, res) {
'FOR p In Persons' +
  'FILTER myfunctions::mustPayTax(p)' +
    'LET distance = LENGTH(' +
      'SHORTEST_PATH(Persons, Friends, p, @godfather, 'any'))' +
    'FOR c IN Cities' +
      'FILTER ==' +
      'UPDATE p WITH {taxPaid: p.taxPaid * * distance}' +
        'IN Persons',
  .let("distance", qb.LENGTH(qb.SHORTEST_PATH(
      "Persons", "Friends", "p", "@godfather", "any")))
    .filter(qb.eq("", ""))
        {taxPaid: qb.mul("p.taxPaid", "", "distance")})
      {godfather: req.params("godfather")}
  }).pathParam("godfather", joi.string().required());

Sign up for ArangoDB Weekly Newsletter

Enter your email and stay informed,

Subscribe to ArangoDB weekly!