Skip to content

Release Notes

okram edited this page Aug 1, 2011 · 80 revisions

All releases can be accessed through the TinkerPop Maven2 repository identified below.

<repository>
  <id>tinkerpop-repository</id>
  <name>TinkerPop Maven2 Repository</name>
  <url>http://tinkerpop.com/maven2</url>
</repository>

Gremlin 1.X

Version 1.2 (New Sheriff in Town — August 1, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>1.2</version>
</dependency>
  • Added respective pipe support for Vertex.getOutEdges(String...) and Vertex.getInEdges(String...)
  • Added path closures to paths to allow for post-processing a returned path
  • Added map entry closures to groupCount to allow for pre-processing an entry’s key/value pairs
  • Added Gremlin.version() to get version information (returns GremlinTokens.VERSION)
  • Added Gremlin.defineStep() to make it simple for developers to add new steps
  • Added support for Graph.loadGraphML(URL)
  • Renamed ifelse to ifThenElse and provided ‘scatter’ functionality if branch yields an iterator/iterable
  • Implemented Pipe.reset() method for all Gremlin-specific pipes
  • Migrated all Gremlin-specific pipes to Pipes
    • Added GroovyPipeClosure to map a Groovy Closure to a PipeClosure
  • Update g.idx() to reflect null behavior of Blueprints index API update
  • Added map step to emit an element’s property map
  • Added support for aggregate step closure to process object prior to insertion into the aggregate collection
  • Bumped to Groovy 1.8.1

Version 1.1 (Clownin’ Around — June 15, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>1.1</version>
</dependency>
  • The .gremlin_history file is always saved to the users home directory
  • Supports an inclusive max on RangeFilterPipe
  • Supports integer range filtering for Map — e.g. m[0..10]
  • Added meta methods loadGraphML and saveGraphML to Graph
  • SailGraph is no longer a strict dependency (however, loads meta methods if in classpath)
  • Added optional step for doing back, but without filtering
  • Extended support for graph pattern matching
  • Added AsPipe for naming steps.
    • Added table step with respective TablePipe and Table data structure
    • Added support for named steps in loop
    • Added support for named steps in back
    • Added support for named steps in optional

Version 1.0 (Gremlin — May 8, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>1.0</version>
</dependency>
  • Added out(label?), in(label?), and both(label?)
  • Added copySplit, fairMerge, exhaustMerge
  • SailLoader is loaded on startup (no longer required by developer)
  • Faster Gremlin.compile() using GremlinScriptEngine
  • Renamed andf, off, and propf to andFilter, orFilter, and propFilter
  • Moved to the more optimal vertex/edge adjacency Pipes
  • Renamed unique to uniqueObject
  • Updated Gremlin-specific pipes to support reset() API

Gremlin 0.X

Version 0.9 (Gremlin the Grouch — April 4, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>0.9</version>
</dependency>
  • Iterable and Iterator meta methods are now Pipe exclusive
  • Index results are auto-wrapped in an IdentityPipe to ensure consistent behavior across graphs
  • Added DexGraph as imported graph database
  • Object.propertyMissing is no longer defined to ensure Gremlin safety
  • emit step renamed to transform
  • foreach step renamed to sideeffect
  • Removed futuref step as back supplies necessary computation
  • The it of the gather step is now the gathered List

Version 0.8 (Grem Stefani — March 2, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>0.8</version>
</dependency>
  • Added new steps
    • emit to emit results of provided closure
    • ifelse to perform a if/then/else branch
    • uniquePath to filter looping paths
  • Added new methods
    • Object.mean() to calculate the average of delegate
    • Pipe.count() to calculate the number of objects in pipe
  • Added support for stack trace printing during an error in the console
  • loop step now requires “back integer”
  • Added step caching model to increase speed of property notation
  • Added outE(label), inE(label) and bothE(label) support
  • Added support for dynamic counter adjustment in groupCount
  • Bumped to using Groovy 1.7.8
  • Created a type-cast friendly groupCount step

Version 0.7 (Gremopoly — January 22, 2011)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>0.7</version>
</dependency>
  • Added many new steps
    • loop step for in-line looping
    • foreach step for closure based operations on flowing objects
    • back step for backtracking in pipeline (i.e. ../)
    • aggregate, except, and retain for except/retain pattern
    • groupCount for map aggregations (i.e. g:op-value())
    • step for anonymous/lambda steps
  • Massive refactoring of documentation
  • Changed to Groovy as the host language

Version 0.6 (Gremalicious — December 14, 2010)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>0.6</version>
</dependency>
  • Fixed foreach bug that occurred on single object looping
  • Fixed if/else bug that occurred on function call
  • null and empty iterator/iterable result now printed in console
  • Empty path expression returns an empty iterable, not null
  • Added g:copy-ve() function that conveniently copies an element from one graph into another
  • Fixed numerous bugs in how functions were computing atoms
  • GPath optimization through auto-reset of Gremlin-specific range-based pipes
  • Comparing numbers is now possible without casting
  • Fixed a major bug in error message handling (many exceptions w/o message being provided in console)
  • Improved Gremlin evaluator load time with static function and step loading
  • Added support for Blueprints 0.3 multi-indexes
    • g:add-aidx-key(), g:add-idx(), g:drop-idx(), g:show-aidx-keys(), g:show-idx(), g:remove-aidx-keys()
  • Added return ?object to return from a user defined function or step
  • Added support for path generation through g:path() (main body of work in Pipes)

Version 0.5.5 (Gremlivich — October 28, 2010)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>0.5.5</version>
</dependency>
  • A rework of the user-defined step model
    • Renamed the concept of “path” to “step”
    • Users can now define computations in steps
  • Added gather and scatter steps to allow for aggregation and unrolling of objects within a path
  • Added g:append() function to concatenate objects to an iterable (e.g. list, set)

Version 0.5 (Gremlivich — September 22, 2010)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>0.5</version>
</dependency>
  • A complete redesign and implementation of the Gremlin compiler
  • Significant performance improvements
    • Order of magnitude increase in speed for numerous operations
    • Lazy evaluation for better memory usage
  • Functions implement the ServiceLoader pattern for ease of incorporating 3rd-party extensions
  • Numerous changes to the Gremlin function library
    • All core functions are now in the g namespace (e.g. g:count(), g:string())
    • g:id() changed to g:id-v() and g:id-e() for getting vertices and edges, respectively
    • g:key() changed to g:key-v()
    • Added g:version() function to retrieve version information
    • Added g:g() (group) to semi-replace () model in Gremlin 0.2.2
    • Added g:flatten() to flatten embedded iterables
    • Added g:includes() to determine if an object is in an iterable
    • Added g:power() to implement raising a number by a power
    • Added g:range() to allow for integer ranges to be created
    • Changed g:difference() to g:diff() (abbreviation policy enacted for function names)
    • Added g:set() to create a set (unordered, unique collection of objects)
    • Added g:integer(), g:long(), g:float(), and g:double() to support number casting
  • Additions to the Gremlin type system
    • Supports iterable as a super type in order to have direct support for lazy evaluation
    • Supports set as an unordered, unique collection of objects
    • Supports integer (1), long (1l), float (1.0), double (1.0d) as different number types
  • Print streams can be dynamically set in GremlinScriptContext
  • true(), false(), and null() are now keywords—true, false, null
  • String concatenation is supported with the + operation
  • Range filter support through [1..10] type syntax
  • Index of lists starts at 0 instead of 1 as in Gremlin 0.2.2
  • Test cases now provide performance statistics
  • Removed the ‘show all aspects’ * step (i.e. ./outE/inV/*)
  • Allow for the use of assignment and other operations within a path (e.g. ./outE/inV[g:p($x := .)]
  • Provided support for OrientDB graph database (main body of work in Blueprints)
  • Update to dependency inclusions
    • Distribution includes all supported graph databases in Blueprints (gremlin-*-standalone.jar)
    • Dependency provide <scope>provided</scope>

Version 0.2.2 (Gremicide — March 7, 2010)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>0.2.2</version>
</dependency>
  • Fixed a bug introduced in 0.2.1 having to do with variables copied from a parent path context
  • Added dependency on Neo4j RDF and SAIL SNAPSHOTS
  • Added Neo4jSailGraph BETA to the core distribution

Version 0.2.1 (Gremicide — February 25, 2010)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>0.2.1</version>
</dependency>
  • Instance naming convention for Functions changed to FunctionLibrary
  • list g:list(object+) is now list g:list(object*)
  • Added support for Java 1.6+ JSR 223 ScriptEngine and ScriptEngineFactory
    • Renamed GremlinEngine to GremlinScriptEngine
    • Renamed GremlinEngineFactory to GremlinScriptEngineFactory

Version 0.2 (Gremicide — February 14, 2010)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>0.2</version>
</dependency>
  • Added user defined functions
    • Gremlin and Java defined functions supported
  • Added user defined paths
    • Gremlin and Java defined functions supported
  • Added .gremlinrc load script
  • Added support for manual transaction handling of Neo4j graphs
    • boolean neo4j:start-tx(), boolean neo4j:stop-tx(boolean) added
  • Added support for embedded maps and lists
  • Added support for JSON encoding and decoding of Gremlin types
    • g:json(object) was removed
    • string g:to-json(object) and object g:from-json(string) added
  • Added better support for vertex and edge property indexing
  • Added working graph $_g variable and updated graph functions to support it
  • Added support for SPARQL queries for SAIL-based graphs
    • list sail:sparql(string) was added
  • Added support for Linked Data SAIL for real-time analysis of the Web of Data
  • Added support for script loading
    • script gremlin-script.grm
  • Added support for JUNG algorithms over Gremlin graphs
  • Renamed g:append(object, object+) to g:list(object+)
  • Renamed the general graph model to property graph model
    • Moved the model and its implementations to Blueprints
    • Uses Blueprints 0.1
  • Various bug fixes and optimizations

Version 0.1 (XMas Alpha — December 25, 2009)

<dependency>
  <groupId>com.tinkerpop</groupId>
  <artifactId>gremlin</artifactId>
  <version>0.1</version>
</dependency>
  • Initial release of the language and virtual machine