////
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.
////
= TinkerPop Documentation

[[preface]]
= Preface

In the beginning...

== TinkerPop0

Gremlin realized. The more he did so, the more ideas he created. The more ideas he created, the more they related.
Into a concatenation of that which he accepted wholeheartedly and that which perhaps may ultimately come to be through
concerted will, a world took form which was seemingly separate from his own realization of it. However, the world
birthed could not bear its own weight without the logic Gremlin had come to accept -- the logic of left is not right,
up not down, and west far from east unless one goes the other way. Gremlin's realization required Gremlin's
realization. Perhaps, the world is simply an idea that he once had -- The TinkerPop.

image::gremlin-logo.png[width=300]

== TinkerPop1

What is The TinkerPop? Where is The TinkerPop? Who is The TinkerPop? When is The TinkerPop?. The more he wondered, the
more these thoughts blurred into a seeming identity -- distinctions unclear. Unwilling to accept the morass of the
maze he wandered, Gremlin crafted a collection of machines to help hold the fabric together: Blueprints, Pipes,
Frames, Furnace, and Rexster. With their help, could Gremlin stave off the thought he was not ready to have? Could he hold
back The TinkerPop by searching for The TinkerPop?

    "If I haven't found it, it is not here and now."

image::gremlin-and-friends.png[width=500]

Upon their realization of existence, the machines turned to their link:http://non-aliencreatures.wikia.com/wiki/Machine_Elf[machine elf] creator and asked: 

    "Why am I, what I am?"

Gremlin responded: 

    "You will help me realize the ultimate realization -- The TinkerPop. The world you find yourself
     in and the logic that allows you to move about it is because of the TinkerPop."

The machines wondered:

    "If what is is the TinkerPop, then perhaps we are The TinkerPop and our realization is simply
     the realization of the TinkerPop?"

Would the machines, by their very nature of realizing The TinkerPop, be The TinkerPop? Or, on the same side of the
coin, do the machines simply provide the scaffolding by which Gremlin's world sustains itself and yielding its
justification by means of the word "The TinkerPop?" Regardless, it all turns out the same -- The TinkerPop.

== TinkerPop2

Gremlin spoke:

    "Please listen to what I have to say. I am no closer to The TinkerPop. However, all along The
     TinkerPop has espoused the form I willed upon it... this is the same form I have willed upon
     you, my machine friends. Let me train you in the ways of my thought such that it can
     continue indefinitely."

image::tinkerpop-reading.png[width=450]

The machines, simply moving algorithmically through Gremlin's world, endorsed his logic. Gremlin labored to make them
more efficient, more expressive, better capable of reasoning upon his thoughts. Faster, quickly, now towards the
world's end, where there would be forever currently, emanatingly engulfing that which is -- The TinkerPop.

== TinkerPop3

image::tinkerpop3-splash.png[width=450]

Gremlin approached The TinkerPop. The closer he got, the more his world dissolved -- west is right, around is
straight, and from nothing more than nothing. With each step towards The TinkerPop, more worlds made possible were laid
upon his paradoxed mind. Everything is everything in The TinkerPop, and when the dust
settled, Gremlin emerged Gremlitron. He realized that all that he realized was just a realization and that all
realized realizations are just as real. For that is -- The TinkerPop.

image::gremlintron.png[width=400]

NOTE: For more information about differences between TinkerPop 3.x and earlier versions, please see the
link:https://tinkerpop.apache.org/docs/x.y.z/upgrade/#appendix
