# Apache TinkerPop™

Apache TinkerPop™ is a graph computing framework for both graph databases (OLTP) and graph analytic systems (OLAP).

## Downloads & Documentation

Released: 10-January-2022

### TinkerPop 3.5.2 Downloads

Gremlin Console
Gremlin Server
Source

### Documentation

Javadoc - Core
Upgrade Information
Javadoc - Full

## Gremlin Query Language

Gremlin is the graph traversal language of Apache TinkerPop. Gremlin is a functional, data-flow language that enables users to succinctly express complex traversals on (or queries of) their application's property graph. Every Gremlin traversal is composed of a sequence of (potentially nested) steps.

    // What are the names of Gremlin's friends' friends?
    g.V().has("name","gremlin").
      out("knows").out("knows").values("name")

    // What are the names of projects that were created by two friends?
    g.V().
      match(as("a").out("knows").as("b"),
        as("a").out("created").as("c"),
        as("b").out("created").as("c"),
        as("c").in("created").count().is(2)).
      select("c").by("name")

    // What are the names of the managers in the
    // management chain going from Gremlin to the CEO?
    g.V().has("name","gremlin").
      repeat(in("manages")).until(has("title","ceo")).
      path().by("name")

    // What is the distribution of job titles
    // amongst Gremlin's collaborators?
    g.V().has("name","gremlin").as("a").
      out("created").in("created").
      where(neq("a")).
      groupCount().by("title")

    // Get a ranking of the most relevant products for Gremlin
    // given his purchase history.
    g.V().has("name","gremlin").out("bought").aggregate("stash").
      in("bought").out("bought").
      where(not(within("stash"))).
      groupCount().
      order(local).by(values,desc)

Learn More

## Benefits & Use Cases

A graph is a structure composed of vertices and edges. Both vertices and edges can have an arbitrary number of key/value-pairs called properties. Vertices denote discrete objects such as a person, a place, or an event. Edges denote relationships between vertices. For instance, a person may know another person, have been involved in an event, and/or have recently been at a particular place.

If a user's domain is composed of a heterogeneous set of objects (vertices) that can be related to one another in a multitude of ways (edges), then a graph may be the right representation to use. In a graph, each vertex is seen as an atomic entity (not simply a "row in a table") that can be linked to any other vertex or have properties added or removed at will.

Learn More

## How to use TinkerPop

Database Support

TinkerPop is widely supported by more than two dozen commercial and open source graph databases

Learn More

Languages and Tools

TinkerPop provides official language drivers for Java, Groovy, Python, .NET, and NodeJS with additional drivers provided through community contributions

There is a wide array of third-party managed tools and applications that are TinkerPop-compatible

Learn More

## Getting Started

Start with tutorials
See documentation
Learn with Practical Gremlin
Explore common query patterns

## Community

TinkerPop is an open source project that welcomes contributions

Discord
Twitter
Gremlin Users
Developers
GitHub
How to Contribute

## TinkerPop Contributors

TinkerPop seeks contributors dedicated to the art of graph computing. TinkerPop contributors bring solid theoretical, development, testing, documentation, etc. skills to the group. These individuals contribute to TinkerPop beyond the ever-changing requirements of their day-to-day jobs and maintain responsibility for their contributions through time.

Marko A. Rodriguez (Founder)

Year : 2009

Gremlin language, Gremlin machine, documentation

Joshua Shinavier (Founder)

Year : 2009

Graph data models, semantics, and interoperability

Ketrina Yim(Committer)

Year : 2009

Illustrator, creator of Gremlin and his merry band of robots.

Stephen Mallette (PMC)

Year : 2011

Gremlin Console/Server/Driver, Language Variants and general core development

Jorge Bay-Gondra(PMC)

Year : 2017

GraphBinary serialization, JavaScript and .NET libraries, mailing list support.

Florian Hockmann (PMC Chair)

Year : 2017

.NET libraries, mailing list support.

Kelvin Lawrence (PMC)

Year : 2017

Gremlin language, Python GLV, documentation and mailing list support.

Divij Vaidya (Committer)

Year : 2019

Gremlin server-client interaction.

Øyvind Sæbø (Committer)

Year : 2021

Gremlint query formatter.

Lyndon Bauto (Committer)

Year : 2021

Gremlin Language Variants for Python and Go.

Mike Personick (Committer)

Year : 2022

Gremlin language and general core development

James Thornton (PMC)

Year : 2013

Promotions, evangelism.

Daniel Kuppitz (PMC)

Year : 2014

Gremlin language design, benchmarking, testing, documentation, mailing list support.

Hadrian Zbarcea (PMC)

Year : 2015

Project mentor, provider liason.

Daniel Gruno(PMC)

Year : 2015

Project mentor, infrastructure liason.

Matt Frantz (Committer)

Year : 2015

Gremlin language design, ts-tinkerpop.

Jason Plurad (PMC)

Year : 2015

Gremlin Console/Server, mailing list support.

Dylan Millikin(PMC)

Year : 2015

Gremlin Server/Driver, gremlin-php, GremlinBin, mailing list support.

Ted Wilmes (PMC)

Year : 2015

Promotions, mailing list support, benchmarking, sql-gremlin.

Pieter Martin (Committer)

Year : 2016

Gremlin language, Sqlg.

Jean-Baptiste Musso (Committer)

Year : 2016

Gremlin Server testing, Gremlin Driver (Node.js/JavaScript), mailing list support.

Michael Pollmeier (Committer)

Year : 2016

Gremlin language, Gremlin-Scala.

David Brown (Committer)

Year : 2016

Python libraries, Gremlin Server testing.

Robert Dale(PMC)

Year : 2016

Gremlin Console/Server, documentation, mailing list support.

Harsh Thakkar (Committer)

Year : 2018

Gremlin-SPARQL module.

## Join Us on

Join us on our Discord Chat