You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2020/12/26 12:47:49 UTC

svn commit: r1884815 [1/15] - in /tinkerpop/site: docs/3.5.0-SNAPSHOT/ docs/3.5.0-SNAPSHOT/dev/provider/ docs/3.5.0-SNAPSHOT/images/ docs/3.5.0-SNAPSHOT/recipes/ docs/3.5.0-SNAPSHOT/reference/ docs/3.5.0-SNAPSHOT/tutorials/getting-started/ docs/3.5.0-S...

Author: spmallette
Date: Sat Dec 26 12:47:48 2020
New Revision: 1884815

URL: http://svn.apache.org/viewvc?rev=1884815&view=rev
Log:
Deploy docs for TinkerPop 3.5.0-SNAPSHOT

Added:
    tinkerpop/site/docs/3.5.0-SNAPSHOT/images/gremlin-snippets.png   (with props)
    tinkerpop/site/docs/3.5.0-SNAPSHOT/images/gremlin-translator.png   (with props)
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Driver.IMessageSerializer.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Driver.Messages.ResponseMessage-1.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Driver.Messages.ResponseResult-1.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Driver.Messages.ResponseStatus.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Structure.IO.GraphSON.GraphSON2MessageSerializer.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Structure.IO.GraphSON.GraphSON3MessageSerializer.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Structure.IO.GraphSON.GraphSONMessageSerializer.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Structure.IO.SerializationTokens.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Structure.IO.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/argfile
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/javadoc.sh   (with props)
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/options
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/EdgeLabelVerificationStrategy.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/HaltedTraverserStrategy.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/MatchAlgorithmStrategy.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/PartitionStrategy.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/ReservedKeysVerificationStrategy.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/SubgraphStrategy.html
Removed:
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/core/
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/allclasses-frame.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/allclasses-noframe.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/constant-values.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/deprecated-list.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/help-doc.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/index-all.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/index.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/org/
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/overview-frame.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/overview-summary.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/overview-tree.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/package-list
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/script.js
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/serialized-form.html
    tinkerpop/site/javadocs/3.5.0-SNAPSHOT/full/stylesheet.css
Modified:
    tinkerpop/site/docs/3.5.0-SNAPSHOT/dev/provider/index.html
    tinkerpop/site/docs/3.5.0-SNAPSHOT/index.html
    tinkerpop/site/docs/3.5.0-SNAPSHOT/recipes/index.html
    tinkerpop/site/docs/3.5.0-SNAPSHOT/reference/index.html
    tinkerpop/site/docs/3.5.0-SNAPSHOT/tutorials/getting-started/index.html
    tinkerpop/site/docs/3.5.0-SNAPSHOT/tutorials/gremlins-anatomy/index.html
    tinkerpop/site/docs/3.5.0-SNAPSHOT/tutorials/the-gremlin-console/index.html
    tinkerpop/site/docs/3.5.0-SNAPSHOT/upgrade/index.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Driver.GremlinClient.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Driver.Messages.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Driver.Tokens.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Driver.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/Gremlin.Net.Structure.IO.GraphSON.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/api/toc.html
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/index.json
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/manifest.json
    tinkerpop/site/dotnetdocs/3.5.0-SNAPSHOT/xrefmap.yml
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/AnonymousTraversalSource.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/Authenticator.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/Bytecode.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/Client.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/Connection.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/DriverRemoteConnection.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/Graph.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/GraphSON2Reader.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/GraphSON2Writer.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/GraphSON3Reader.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/GraphSON3Writer.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/GraphTraversal.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/GraphTraversalSource.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/P.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/Path.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/PlainTextSaslAuthenticator.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/RemoteConnection.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/RemoteStrategy.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/RemoteTraversal.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/ResponseError.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/ResultSet.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/SaslAuthenticator.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/SaslMechanismBase.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/SaslMechanismPlain.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/TextP.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/Translator.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/TraversalStrategies.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/TraversalStrategy.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/TypeSerializer.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_auth_authenticator.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_auth_mechanisms_sasl-mechanism-base.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_auth_mechanisms_sasl-mechanism-plain.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_auth_plain-text-sasl-authenticator.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_auth_sasl-authenticator.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_client.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_connection.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_driver-remote-connection.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_remote-connection.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_response-error.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/driver_result-set.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/global.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/index.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/process_anonymous-traversal.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/process_bytecode.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/process_graph-traversal.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/process_translator.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/process_traversal-strategy.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/process_traversal.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/structure_graph.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/structure_io_graph-serializer.js.html
    tinkerpop/site/jsdocs/3.5.0-SNAPSHOT/structure_io_type-serializers.js.html

Modified: tinkerpop/site/docs/3.5.0-SNAPSHOT/dev/provider/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.5.0-SNAPSHOT/dev/provider/index.html?rev=1884815&r1=1884814&r2=1884815&view=diff
==============================================================================
--- tinkerpop/site/docs/3.5.0-SNAPSHOT/dev/provider/index.html (original)
+++ tinkerpop/site/docs/3.5.0-SNAPSHOT/dev/provider/index.html Sat Dec 26 12:47:48 2020
@@ -836,7 +836,7 @@ table.CodeRay td.code>pre{padding:0}
 <li><a href="#_traversal_opprocessor">Traversal OpProcessor</a></li>
 </ul>
 </li>
-<li><a href="#_authentication">Authentication</a></li>
+<li><a href="#_authentication_and_authorization">Authentication and Authorization</a></li>
 </ul>
 </li>
 <li><a href="#gremlin-plugins">Gremlin Plugins</a></li>
@@ -1688,7 +1688,7 @@ var graphsonReader = new GraphSON3Reader
 var graphsonWriter = new GraphSON3Writer(
     new Dictionary&lt;Type, IGraphSONSerializer&gt; {{typeof(MyType), new MyClassWriter()}});
 
-var gremlinClient = new GremlinClient(new GremlinServer(&quot;localhost&quot;, 8182), graphsonReader, graphsonWriter);</code></pre>
+var gremlinClient = new GremlinClient(new GremlinServer(&quot;localhost&quot;, 8182), new GraphSON2MessageSerializer());</code></pre>
 </div>
 </div>
 </div>
@@ -2775,7 +2775,7 @@ a different language.</p>
 <div class="paragraph">
 <p>Unlike Standard and Session OpProcessors, the Traversal OpProcessor does not simply return the results of the
 <code>Traversal</code>. It instead returns <code>Traverser</code> objects which allows the client to take advantage of
-<a href="https://tinkerpop.apache.org/docs/current/reference/#barrier-step">bulking</a>. To describe this interaction more
+<a href="https://tinkerpop.apache.org/docs/3.5.0-SNAPSHOT/reference/#barrier-step">bulking</a>. To describe this interaction more
 directly, the returned <code>Traverser</code> will represent some value from the <code>Traversal</code> result and the number of times it
 is represented in the full stream of results. So, if a <code>Traversal</code> happens to return the same vertex twenty times
 it won&#8217;t return twenty instances of the same object. It will return one in <code>Traverser</code> with the <code>bulk</code> value set to
@@ -2785,10 +2785,10 @@ twenty. Under this model, the amount of
 <p>To demonstrate consider this example:</p>
 </div>
 <section class="tabs tabs-2">
-  <input id="tab-1599657379-1" type="radio" name="radio-set-1599657379-1" class="tab-selector-1" checked="checked" />
-  <label for="tab-1599657379-1" class="tab-label-1">console (groovy)</label>
-  <input id="tab-1599657379-2" type="radio" name="radio-set-1599657379-1" class="tab-selector-2" />
-  <label for="tab-1599657379-2" class="tab-label-2">groovy</label>
+  <input id="tab-1608972802-1" type="radio" name="radio-set-1608972802-1" class="tab-selector-1" checked="checked" />
+  <label for="tab-1608972802-1" class="tab-label-1">console (groovy)</label>
+  <input id="tab-1608972802-2" type="radio" name="radio-set-1608972802-1" class="tab-selector-2" />
+  <label for="tab-1608972802-2" class="tab-label-2">groovy</label>
   <div class="tabcontent">
     <div class="tabcontent-1">
 <div class="listingblock">
@@ -2796,9 +2796,9 @@ twenty. Under this model, the amount of
 <pre class="CodeRay highlight"><code data-lang="groovy">gremlin&gt; cluster = Cluster.open()
 ==&gt;localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>
 gremlin&gt; client = cluster.connect()
-==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>ClusteredClient<span class="error">@</span><span class="integer">518</span>ed96e
+==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>ClusteredClient<span class="error">@</span><span class="integer">42542698</span>
 gremlin&gt; aliased = client.alias(<span class="string"><span class="delimiter">&quot;</span><span class="content">g</span><span class="delimiter">&quot;</span></span>)
-==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>AliasClusteredClient<span class="error">@</span><span class="integer">1</span>b96f15e
+==&gt;org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>AliasClusteredClient<span class="annotation">@b956293</span>
 gremlin&gt; g = traversal().withEmbedded(org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph.instance()) <span class="invisible">//</span><b class="conum">1</b><span class="invisible">\</span>
 ==&gt;graphtraversalsource[emptygraph[empty], standard]
 gremlin&gt; rs = aliased.submit(g.V().both().barrier().both().barrier()).all().get() <span class="invisible">//</span><b class="conum">2</b><span class="invisible">\</span>
@@ -2969,23 +2969,51 @@ single alias).</p></td>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_authentication">Authentication</h3>
+<h3 id="_authentication_and_authorization">Authentication and Authorization</h3>
 <div class="paragraph">
 <p>Gremlin Server supports <a href="https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer">SASL-based</a>
 authentication.  A SASL implementation provides a series of challenges and responses that a driver must comply with
-in order to authenticate.  By default, Gremlin Server only supports the "PLAIN" SASL mechanism, which is a cleartext
-password system.  When authentication is enabled, an incoming request is intercepted before it is evaluated by the
-<code>ScriptEngine</code>.  The request is saved on the server and a <code>AUTHENTICATE</code> challenge response (status code <code>407</code>) is
-returned to the client.</p>
+in order to authenticate.  Gremlin Server supports the "PLAIN" SASL mechanism, which is a cleartext
+password system, for all <a href="https://tinkerpop.apache.org/docs/current/tutorials/gremlin-language-variants/">Gremlin Language Variants</a>.
+Other SASL mechanisms supported for selected clients are listed in the
+<a href="https://tinkerpop.apache.org/docs/3.5.0-SNAPSHOT/reference/#security">security section of the Gremlin Server reference documentation</a>.</p>
+</div>
+<div class="paragraph">
+<p>When authentication is enabled, an incoming request is intercepted before it is evaluated by the <code>ScriptEngine</code>.  The
+request is saved on the server and a <code>AUTHENTICATE</code> challenge response (status code <code>407</code>) is returned to the client.</p>
+</div>
+<div class="paragraph">
+<p>The client will detect the <code>AUTHENTICATE</code> and respond with an <code>authentication</code> for the <code>op</code> and an <code>arg</code> named <code>sasl</code>.
+In case of the "PLAIN" SASL mechanism the <code>arg</code> contains the password.  The password should be either, an encoded
+sequence of UTF-8 bytes, delimited by 0 (US-ASCII NUL), where the form is : <code>&lt;NUL&gt;username&lt;NUL&gt;password</code>, or a Base64
+encoded string of the former (which in this instance would be <code>AHVzZXJuYW1lAHBhc3N3b3Jk</code>).  Should Gremlin Server be
+able to authenticate with the provided credentials, the server will return the results of the original request as it
+normally does without authentication.  If it cannot authenticate given the challenge response from the client, it will
+return <code>UNAUTHORIZED</code> (status code <code>401</code>).</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Note</div>
+</td>
+<td class="content">
+Gremlin Server does not support the "authorization identity" as described in <a href="https://tools.ietf.org/html/rfc4616">RFC4616</a>.
+</td>
+</tr>
+</table>
 </div>
 <div class="paragraph">
-<p>The client will detect the <code>AUTHENTICATE</code> and respond with an <code>authentication</code> for the <code>op</code> and an <code>arg</code> named <code>sasl</code>
-that contains the password.  The password should be either, an encoded sequence of UTF-8 bytes, delimited by 0
-(US-ASCII NUL), where the form is : <code>&lt;NUL&gt;username&lt;NUL&gt;password</code>, or a Base64 encoded string of the former (which
-in this instance would be <code>AHVzZXJuYW1lAHBhc3N3b3Jk</code>).  Should Gremlin Server be able to authenticate with the
-provided credentials, the server will return the results of the original request as it normally does without
-authentication.  If it cannot authenticate given the challenge response from the client, it will return <code>UNAUTHORIZED</code>
-(status code <code>401</code>).</p>
+<p>In addition to authenticating users at the start of a connection, Gremlin Server allows providers to authorize users on
+a per request basis. If
+<a href="https://tinkerpop.apache.org/docs/3.5.0-SNAPSHOT/reference/#_configuring_2">a java class is configured</a> that implements the
+<a href="https://tinkerpop.apache.org/javadocs/3.5.0-SNAPSHOT/full/org/apache/tinkerpop/gremlin/server/authz/Authorizer.html">Authorizer interface</a>,
+Gremlin Server passes each request to this <code>Authorizer</code>. The <code>Authorizer</code> can deny authorization for the request by
+throwing an exception and Gremlin Server returns <code>UNAUTHORIZED</code> (status code <code>401</code>) to the client. The <code>Authorizer</code>
+authorizes the request by returning the original request or the request with some additional constraints. Gremlin Server
+proceeds with the returned request and on its turn returns the result of the request to the client. More details on
+implementing authorization can be found in the
+<a href="https://tinkerpop.apache.org/docs/3.5.0-SNAPSHOT/reference/#security">reference documentation for Gremlin Server security</a>.</p>
 </div>
 <div class="admonitionblock note">
 <table>
@@ -2994,7 +3022,8 @@ authentication.  If it cannot authentica
 <div class="title">Note</div>
 </td>
 <td class="content">
-Gremlin Server does not support the "authorization identity" as described in <a href="https://tools.ietf.org/html/rfc4616">RFC4616</a>.
+While Gremlin Server supports this authorization feature it is not a feature that TinkerPop requires of graph
+providers as part of the agreement between client and server.
 </td>
 </tr>
 </table>
@@ -3407,7 +3436,7 @@ in use with the Gremlin Console plugin h
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2020-09-09 09:16:49 EDT
+Last updated 2020-12-26 05:25:56 EST
 </div>
 </div>
 </body>

Added: tinkerpop/site/docs/3.5.0-SNAPSHOT/images/gremlin-snippets.png
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.5.0-SNAPSHOT/images/gremlin-snippets.png?rev=1884815&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tinkerpop/site/docs/3.5.0-SNAPSHOT/images/gremlin-snippets.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: tinkerpop/site/docs/3.5.0-SNAPSHOT/images/gremlin-translator.png
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.5.0-SNAPSHOT/images/gremlin-translator.png?rev=1884815&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tinkerpop/site/docs/3.5.0-SNAPSHOT/images/gremlin-translator.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: tinkerpop/site/docs/3.5.0-SNAPSHOT/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.5.0-SNAPSHOT/index.html?rev=1884815&r1=1884814&r2=1884815&view=diff
==============================================================================
--- tinkerpop/site/docs/3.5.0-SNAPSHOT/index.html (original)
+++ tinkerpop/site/docs/3.5.0-SNAPSHOT/index.html Sat Dec 26 12:47:48 2020
@@ -924,6 +924,11 @@ A series of blog posts that examine the
 <td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="http://kelvinlawrence.net/book/Gremlin-Graph-Guide.html">Practical Gremlin: An Apache TinkerPop Tutorial</a><br>
 A getting started guide for users of graph databases and the Gremlin query language featuring hints, tips and sample queries. (<strong>external</strong>)</p></td>
 </tr>
+<tr>
+<td class="tableblock halign-center valign-top"><p class="tableblock"><span class="image"><img src="images/gremlin-snippets.png" alt="gremlin snippets" width="200"></span></p></td>
+<td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="http://stephen.genoprime.com">Gremlin Snippets</a><br>
+Advanced Gremlin query samples and topics with detailed explanation. (<strong>external</strong>)</p></td>
+</tr>
 </tbody>
 </table>
 </div>
@@ -1000,7 +1005,7 @@ Documentation for providers who implemen
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><span class="image"><img src="images/gremlin-io2.png" alt="gremlin io2" width="200"></span></p></td>
 <td class="tableblock halign-left valign-middle"><p class="tableblock"><a href="https://tinkerpop.apache.org/docs/3.5.0-SNAPSHOT/dev/io/">IO Reference</a><br>
-Reference Documentation for providers and users of the various IO formats that TinkerPop has: GraphML, GraphSON and Gryo.</p></td>
+Reference Documentation for providers and users of the various IO formats that TinkerPop has: GraphML, GraphSON, GraphBinary and Gryo.</p></td>
 </tr>
 </tbody>
 </table>
@@ -1010,7 +1015,7 @@ Reference Documentation for providers an
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2020-06-03 12:42:25 EDT
+Last updated 2020-12-26 07:46:27 EST
 </div>
 </div>
 </body>