////
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[appendix].
