<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<div class="container">
   <div class="hero-unit">
      <div class="row">
         <div class="col-md-6">
            <b><font size="6" face="american typewriter">Apache TinkerPop&trade;</font></b>
            <p><img src="images/tinkerpop-splash.png" width="420" class="img-responsive" style="padding:10px;"/></p>
            <p><font size="3">Apache TinkerPop&trade; is a graph computing framework for both graph databases (OLTP) and graph analytic systems (OLAP).</font></p>
         </div>
         <div class="col-md-6">
            <br/>
            <p>
               <b><font size="4">TinkerPop</font> <font size="4">3.3.4</font></b> (<font size="2">Released: 15-Oct-2018</font>)
            </p>
            <p><b>Downloads</b></p>
            <p>
               <a href="https://www.apache.org/dyn/closer.lua/tinkerpop/3.3.4/apache-tinkerpop-gremlin-console-3.3.4-bin.zip" class="btn btn-primary">Gremlin Console <span class="glyphicon glyphicon-download-alt"></span></a>
               <a href="https://www.apache.org/dyn/closer.lua/tinkerpop/3.3.4/apache-tinkerpop-gremlin-server-3.3.4-bin.zip" class="btn btn-primary">Gremlin Server <span class="glyphicon glyphicon-download-alt"></span></a>
               <a href="https://www.apache.org/dyn/closer.lua/tinkerpop/3.3.4/apache-tinkerpop-3.3.4-src.zip" class="btn btn-primary">Source <span class="glyphicon glyphicon-download-alt"></span></a>
            </p>
            <div class="row">
               <div class="col-md-6">
                  <p><b>Documentation</b></p>
                  <ul>
                     <li><a href="http://tinkerpop.apache.org/docs/current/">TinkerPop Documentation</a></li>
                     <ul>
                        <li><a href="http://tinkerpop.apache.org/docs/current/reference">Reference Documentation</a></li>
                     </ul>
                     <li><a href="http://tinkerpop.apache.org/docs/3.3.4/upgrade/#_tinkerpop_3_3_4">Upgrade Information</a></li>
                     <li>TinkerPop Javadoc - <a href="http://tinkerpop.apache.org/javadocs/current/core/">core</a> / <a href="http://tinkerpop.apache.org/javadocs/current/full/">full</a></li>
                  </ul>
               </div>
               <div class="col-md-6">
                  <br/>
                  <a href="http://tinkerpop.apache.org/docs/current/tutorials/getting-started">
                     <img src="images/gremlin-gym-mini.png" width="150" class="img-responsive" align="left"/>
                  </a>
               </div>
            </div>
            <div class="row">
               <div class="col-md-5">
                  <div class="hovereffect">
                      <img src="images/cityscape-button.png" style="width:200px;" class="img-responsive" /></a>
                      <div class="overlay"><a class="info" href="gremlin.html">Understand Gremlin</a></div>
                  </div>
               </div>
               <div class="col-md-5">
                  <div class="hovereffect">
                      <img src="images/meeting-room-button.png" style="width:200px;" class="img-responsive" /></a>
                      <div class="overlay"><a class="info" href="providers.html">Become TinkerPop-Enabled</a></div>
                  </div>
               </div>
               <div class="col-md-2"></div>
            </div>
         </div>
      </div>
   </div>
   <div><br/></div>
   <div id="gremlinCarousel" class="carousel slide" data-ride="carousel" data-interval="30000" border="none">
      <!-- Indicators -->
      <ol class="carousel-indicators carousel-indicators-numbers">
         <li data-target="#gremlinCarousel" data-slide-to="0" class="active">1</li>
         <li data-target="#gremlinCarousel" data-slide-to="1">2</li>
         <li data-target="#gremlinCarousel" data-slide-to="2">3</li>
         <li data-target="#gremlinCarousel" data-slide-to="3">4</li>
         <li data-target="#gremlinCarousel" data-slide-to="4">5</li>
      </ol>
      <div class="carousel-inner" role="listbox">
         <div class="item active">
                  <pre><code class="language-gremlin">


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


          </code></pre>
         </div>
         <div class="item">
                  <pre><code class="language-gremlin">
    // 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")
          </code></pre>
         </div>
         <div class="item">
                  <pre><code class="language-gremlin">

    // 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")

          </code></pre>
         </div>
         <div class="item">
                  <pre><code class="language-gremlin">

    // 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")

          </code></pre>
         </div>
         <div class="item">
                  <pre><code class="language-gremlin">

    // 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)
          </code></pre>
         </div>
      </div>
   </div>
   <!-- /.carousel -->
   <div class="container">
      <h3>The Benefits of Graph Computing</h3>
      <p><img src="images/graph-globe.png" style="float:left;width:15%;padding:10px;"> A <strong>graph</strong> is a structure composed of <strong>vertices</strong> and <strong>edges</strong>.
         Both vertices and edges can have an arbitrary number of key/value-pairs called <strong>properties</strong>.
         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 was recently at a particular place. Properties express non-relational information about the
         vertices and edges. Example properties include a vertex having a name, an age and an edge having a timestamp and/or a weight. Together, the aforementioned
         graph is known as a <strong>property graph</strong> and it is the foundational data structure of Apache TinkerPop.
      </p>
      <br/>
      <p><img src="images/graph-vs-table.png" style="float:right;width:22%;padding:10px;">If a user's domain is composed of a heterogenous 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. This empowers the data modeler to think in terms of actors within
         a world of complex relations as opposed to, in relational databases, statically-typed tables joined in aggregate. Once a domain is modeled, that
         model must then be exploited in order to yield novel, differentiating information. Graph computing has a rich history that includes not only query
         languages devoid of table-join semantics, but also algorithms that support complex reasoning: path analysis, vertex clustering and ranking, subgraph
         identification, and more. The world of applied graph computing offers a flexible, intuitive data structure along with a host of algorithms able to
         effectively leverage that structure.
      </p>
      <br/>
      <p><a href="#"><img src="images/apache-tinkerpop-logo.png" style="float:left;width:22%;padding:10px;"/></a>Apache TinkerPop&trade; is an open source, vendor-agnostic, graph computing framework distributed under the commercial friendly <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache2 license</a>.
         When a data system is <a href="providers.html">TinkerPop-enabled</a>, its users are able to model their domain as a graph and analyze that graph using the <a href="gremlin.html">Gremlin graph traversal language</a>.
         Furthermore, all TinkerPop-enabled systems integrate with one another allowing them to easily expand their offerings as well as allowing users to choose the appropriate graph
         technology for their application. Sometimes an application is best served by an in-memory, transactional graph database. Sometimes a multi-machine distributed graph database will do the job.
         Or perhaps the application requires both a distributed graph database for real-time queries and, in parallel, a Big(Graph)Data processor for batch analytics. Whatever the application's
         requirements, there exists a TinkerPop-enabled graph system out there to meet its needs.
      </p>
   </div>
   <h3>Contributing to Apache TinkerPop</h3>
   <div class="row">
      <div class="col-xs-12">
         <div class="row">
            <div class="col-xs-8">
               TinkerPop is an open source project that <a href="http://tinkerpop.apache.org/docs/current/dev/developer#_contributing">welcomes contributions</a>. There are many ways to get involved:
               <p/>
               <ol>
                  <li>
                     Join the <a href="http://groups.google.com/group/gremlin-users">Gremlin-Users</a> public mailing list.
                     <ul>
                        <li>Help users by answering questions and demonstrating your expertise in TinkerPop and graphs.</li>
                     </ul>
                  <li>
                     Join the <a href="https://lists.apache.org/list.html?dev@tinkerpop.apache.org">TinkerPop Developer</a> public mailing list.
                     <ul>
                        <li>Contribute ideas on how to make the TinkerPop code- and documentation-base better.</li>
                     </ul>
                  <li>Submit bug and feature issues to TinkerPop <a href="https://issues.apache.org/jira/browse/TINKERPOP/">JIRA</a>.</li>
                  <ul>
                     <li>Provide easily reproducible bug reports and well articulated feature requests.</li>
                  </ul>
                  <li>
                     Clone the TinkerPop <a href="https://github.com/apache/tinkerpop">Git repository</a> and provide a <a href="https://help.github.com/articles/using-pull-requests/">pull-request</a>.
                     <ul>
                        <li>Focus on a particular area of the codebase and take responsibility for your contribution.</li>
                     </ul>
                  <li>Make significant, long lasting contributions over time.</li>
                  <ul>
                     <li>Become a TinkerPop Committer and help determine the evolution of The TinkerPop.</li>
                  </ul>
               </ol>
               <p>To build TinkerPop from source, please review the <a href="http://tinkerpop.apache.org/docs/current/dev/developer/#building-testing">developer documentation</a>.
            </div>
            <div class="col-xs-4">
               <a href="http://tinkerpop.apache.org/docs/current/dev/developer/"><img src="images/gremlin-apache.png" width="250" class="img-responsive" /></a>
            </div>
         </div>
         <h3>Community Contributions</h3>
         TinkerPop is at the center of a larger development ecosystem that extends on its core interfaces, integration points, and ideas.  The graph systems and libraries below represent both
         TinkerPop-maintained reference implementations as well as third-party managed projects. The TinkerPop community is always interested in hearing about projects like these and aiding
         in their support. Please read our <a href="policy.html">provider listing policy</a> and feel free to promote such projects on the user and developer mailing lists. Information on
         how to build implementations of the various interfaces that TinkerPop exposes can be found in the <a href="http://tinkerpop.apache.org/docs/current/dev/provider/">Provider Documentation</a>.
         <p/>
         <a name="graph-systems"></a>
         <h4 id="graph-systems">Graph Systems</h4>
         <small>[<a href="providers.html#data-system-providers">learn more</a>]</small>
         <ul>
            <li><a href="https://aws.amazon.com/neptune/">Amazon Neptune</a> - Fully-managed graph database service.</li>
            <li><a href="https://github.com/lambdazen/bitsy/wiki">Bitsy</a> - A small, fast, embeddable, durable in-memory graph database.</li>
            <li><a href="https://github.com/blazegraph/tinkerpop3">Blazegraph</a> - RDF graph database with OLTP support.</li>
            <li><a href="https://docs.microsoft.com/en-us/azure/cosmos-db/graph-introduction">CosmosDB</a> - Microsoft's distributed OLTP graph database.</li>
            <li><a href="https://github.com/MartinHaeusler/chronos/tree/master/org.chronos.chronograph">ChronoGraph</a> - A versioned graph database.</li>
            <li><a href="http://www.datastax.com/products/datastax-enterprise-graph">DSEGraph</a> - DataStax graph database with OLTP and OLAP support.</li>
            <li><a href="https://grakn.ai/">GRAKN.AI</a> - Distributed OLTP/OLAP knowledge graph system.</li>
            <li><a href="http://tinkerpop.apache.org/docs/current/reference/#giraphgraphcomputer">Hadoop (Giraph)</a> - OLAP graph processor using Giraph.</li>
            <li><a href="http://tinkerpop.apache.org/docs/current/reference/#sparkgraphcomputer">Hadoop (Spark)</a> - OLAP graph processor using Spark.</li>
            <li><a href="https://github.com/rayokota/hgraphdb">HGraphDB</a> - OLTP graph database running on Apache HBase.</li>
            <li><a href="https://console.ng.bluemix.net/catalog/services/ibm-graph/">IBM Graph</a> - OLTP graph database as a service.</li>
            <li><a href="http://janusgraph.org/">JanusGraph</a> - Distributed OLTP and OLAP graph database with BerkeleyDB, Apache Cassandra and Apache HBase support.</li>
            <li><a href="https://github.com/awslabs/dynamodb-janusgraph-storage-backend//">JanusGraph (Amazon)</a> - The Amazon DynamoDB Storage Backend for JanusGraph.</li>
            <li><a href="http://tinkerpop.apache.org/docs/current/reference/#neo4j-gremlin">Neo4j</a> - OLTP graph database (embedded and high availability).</li>
            <li><a href="https://github.com/SteelBridgeLabs/neo4j-gremlin-bolt">neo4j-gremlin-bolt</a> - OLTP graph database (using Bolt Protocol).</li>
            <li><a href="https://github.com/orientechnologies/orientdb-gremlin">OrientDB</a> - OLTP graph database</li>
            <li><a href="http://s2graph.apache.org/">Apache S2Graph</a> - OLTP graph database running on Apache HBase.</li>
            <li><a href="https://github.com/pietermartin/sqlg">Sqlg</a> - OLTP implementation on SQL databases.</li>
            <li><a href="http://stardog.com/">Stardog</a> - RDF graph database with OLTP and OLAP support.</li>
            <li><a href="http://tinkerpop.apache.org/docs/current/reference/#tinkergraph-gremlin">TinkerGraph</a> - In-memory OLTP and OLAP reference implementation.</li>
            <li><a href="http://thinkaurelius.github.io/titan/">Titan</a> - Distributed OLTP and OLAP graph database with BerkeleyDB, Apache Cassandra and Apache HBase support.</li>
            <li><a href="https://github.com/awslabs/dynamodb-titan-storage-backend">Titan (Amazon)</a> - The Amazon DynamoDB storage backend for Titan.</li>
            <li><a href="https://github.com/classmethod/tupl-titan-storage-backend">Titan (Tupl)</a> - The Tupl storage backend for Titan.</li>
            <li><a href="https://github.com/rmagen/unipop">Unipop</a> - OLTP Elasticsearch and JDBC backed graph.</li>
         </ul>
         <a name="language-variants-compilers"></a>
         <h4 id="language-variants-compilers">Query Languages</h4>
         <small>[<a href="providers.html#query-language-providers">learn more</a>]</small>
         <ul>
            <li><a href="http://syncleus.com/Ferma/">Ferma</a> (java/dsl) - An ORM / OGM for Apache TinkerPop.</li>
            <li><a href="https://github.com/davebshow/goblin">Goblin</a> (python/dsl) - Goblin OGM for the TinkerPop 3 Gremlin Server.</li>
            <li><a href="http://tinkerpop.apache.org/docs/current/reference/#gremlin-DotNet">Gremlin.Net</a> (.NET - C#/variant) - Gremlin hosted in C# for use with any .NET-based VM.</li>
            <li><a href="https://github.com/gremlin-orm/gremlin-orm">gremlin-orm</a> (javascript) Gremlin ORM for Node.js.</li>
            <li><a href="http://tinkerpop.apache.org/docs/current/reference/#gremlin-python">gremlin-python</a> (python/variant) - Gremlin hosted in Python for use with any Python-based VM.</li>
            <li><a href="https://github.com/emehrkay/gremlinpy">gremlin-py</a> (python/variant) - Write pure Python Gremlin that can be sent to Gremlin Server.</li>
            <li><a href="https://github.com/mpollmeier/gremlin-scala">gremlin-scala</a> (scala/variant) - A Scala-based Gremlin language variant for TinkerPop3.</li>
            <li><a href="https://github.com/karthicks/gremlin-ogm">gremlin-objects</a> (java/dsl) - An Object Graph Mapping Library For Gremlin.</li>
            <li><a href="https://github.com/jbmusso/gremlin-template-string">gremlin-template-string</a> (js/variant) - A Gremlin language builder.</li>
            <li><a href="https://github.com/davebshow/ipython-gremlin">ipython-gremlin</a> (python/variant) - Gremlin in IPython and Jupyter.</li>
            <li><a href="http://ogre.clojurewerkz.org/">ogre</a> (clojure/variant) - A Clojure language wrapper for TinkerPop3.</li>
            <li><a href="http://bayofmany.github.io/">Peapod</a> (java/dsl) - An object-graph-wrapper.</li>
            <li><a href="https://github.com/LITMUS-Benchmark-Suite/sparql-to-gremlin">sparql-gremlin</a> (sparql/distinct) - A SPARQL to Gremlin traversal compiler.</li>
            <li><a href="https://github.com/twilmes/sql-gremlin">sql-gremlin</a> (sql/distinct) - An SQL to Gremlin traversal compiler.</li>
         </ul>
         <a name="language-drivers"></a>
         <h4 id="language-drivers">Language Drivers</h4>
         <ul>
            <li><a href="https://github.com/davebshow/gremlinclient">gremlinclient</a> (python) - An asynchronous Python 2/3 client for Gremlin Server that allows for flexible coroutine syntax - Trollius, Tornado, Asyncio.</li>
            <li><a href="https://github.com/marcelocf/gremlin_client">gremlin_client</a> (ruby) - A Gremlin Server driver for Ruby.</li>
            <li><a href="http://tinkerpop.apache.org/docs/current/reference/#connecting-via-java">gremlin-driver</a> (java) - A Gremlin Server driver for Java.</li>
            <li><a href="https://github.com/jbmusso/gremlin-javascript">gremlin-javascript</a> (js) - A Gremlin Server driver for JavaScript.</li>
            <li><a href="https://github.com/qasaur/gremgo">gremgo</a> (go) - A Gremlin Server driver for Go.</li>
            <li><a href="http://tinkerpop.apache.org/docs/current/reference/#gremlin-DotNet">Gremlin.Net</a> (.NET - C#) - Gremlin Server driver for .NET.</li>
            <li><a href="https://github.com/PommeVerte/gremlin-php">gremlin-php</a> (php) - A Gremlin Server driver for PHP.</li>
            <li><a href="http://tinkerpop.apache.org/docs/current/reference/#gremlin-python">gremlin-python</a> (python) - Gremlin Server driver for Python.</li>
            <li><a href="http://gremlinrestclient.readthedocs.org/en/latest/">gremlinrestclient</a> (python) - Python 2/3 library that uses HTTP to communicate with the Gremlin Server over REST.</li>
            <li><a href="https://github.com/windj007/python-gremlin-rest">python-gremlin-rest</a> (python) - A REST-based client for Gremlin Server.</li>
            <li><a href="https://github.com/coreyauger/reactive-gremlin">reactive-gremlin</a> (scala) - An Akka HTTP Websocket Connector.</li>
            <li><a href="https://github.com/viagraphs/scalajs-gremlin-client">scalajs-gremlin-client</a> (scala) - A Gremlin-Server client with ad-hoc extensible, reactive, typeclass based API.</li>
            <li><a href="https://github.com/RedSeal-co/ts-tinkerpop">ts-tinkerpop</a> (typescript) - A helper library for Typescript applications via node-java.</li>
         </ul>
         <a name="poweredby"></a>
         <h4 id="poweredby">Powered By</h4>
         <ul>
            <li><a href="https://bricaud.github.io/graphexp/graphexp.html">Graphexp</a> - Interactive visualization of the Gremlin graph database with D3.js.</li>
            <li><a href="http://www.pitneybowes.com/us/customer-information-management/data-integration-management/spectrum-data-hub-module.html">Pitney Bowes Spectrum Data Hub Module</a> - Uses Gremlin OLTP to query Neo4j-powered master data management based graph database.</li>
         </ul>
         <a name="committers"></a>
         <h3 id="committers">Apache TinkerPop Committers</h3>
         <img src="images/tinkerpop-logo-small.png" style="float:right" />TinkerPop seeks committers dedicated to the art of graph computing. TinkerPop committers bring solid theoretical,
         development, testing, documentation, etc. skills to the group. Committers contribute to TinkerPop beyond the ever-changing requirements of their day-to-day jobs and maintain
         responsibility for their contributions through time.
         <p/>
         <ul>
            <li><a href="http://markorodriguez.com">Marko A. Rodriguez</a> (2009 - PMC): Gremlin language, Gremlin machine, documentation.</li>
            <li><a href="http://ketrinadrawsalot.tumblr.com">Ketrina Yim</a> (2009 - Committer): Illustrator, creator of Gremlin and his merry band of robots.</li>
            <li><a href="http://stephen.genoprime.com/">Stephen Mallette</a> (2011 - PMC Chair): Gremlin Console/Server/Driver, Graph I/O, testing, documentation, mailing list support.</li>
            <li><a href="http://jamesthornton.com/">James Thornton</a> (2013 - PMC): Promotions, evangelism.</li>
            <li><a href="http://gremlin.guru">Daniel Kuppitz</a> (2014 - PMC): Gremlin language design, benchmarking, testing, documentation, mailing list support.</li>
            <li><a href="https://www.linkedin.com/in/hzbarcea">Hadrian Zbarcea</a> (2015 - PMC): Project mentor, provider liason.</li>
            <li><a href="https://github.com/Humbedooh">Daniel Gruno</a> (2015 - PMC): Project mentor, infrastructure liason.</li>
            <li><a href="https://github.com/mhfrantz">Matt Frantz</a> (2015 - Committer): Gremlin language design, ts-tinkerpop.</li>
            <li><a href="https://github.com/pluradj">Jason Plurad</a> (2015 - PMC): Gremlin Console/Server, mailing list support.</li>
            <li><a href="https://www.linkedin.com/in/dylan-millikin-32567934">Dylan Millikin</a> (2015 - PMC): Gremlin Server/Driver, gremlin-php, GremlinBin, mailing list support.</li>
            <li><a href="https://github.com/twilmes">Ted Wilmes</a> (2015 - PMC): Promotions, mailing list support, benchmarking, sql-gremlin.</li>
            <li><a href="https://github.com/pietermartin">Pieter Martin</a> (2016 - Committer): Gremlin language, Sqlg.</li>
            <li><a href="https://github.com/jbmusso">Jean-Baptiste Musso</a> (2016 - Committer): Gremlin Server testing, Gremlin Driver (Node.js/JavaScript), mailing list support.</li>
            <li><a href="http://www.michaelpollmeier.com/">Michael Pollmeier</a> (2016 - Committer): Gremlin language, Gremlin-Scala.</li>
            <li><a href="https://github.com/davebshow">David Brown</a> (2016 - Committer): Python libraries, Gremlin Server testing.</li>
            <li><a href="https://github.com/robertdale">Robert Dale</a> (2016 - PMC): Gremlin Console/Server, documentation, mailing list support.</li>
            <li><a href="https://github.com/jorgebay">Jorge Bay</a> (2017 - Committer): JavaScript and .NET libraries, mailing list support.</li>
            <li><a href="https://github.com/FlorianHockmann/">Florian Hockmann</a> (2017 - Committer): .NET libraries, mailing list support.</li>
            <li><a href="http://www.kelvinlawrence.net/">Kelvin Lawrence</a> (2017 - Committer): Documentation and mailing list support.</li>
         </ul>
      </div>
   </div>
</div>
