Gremlin: A Graph Traversal Language
http://gremlin.tinkerpop.com
```xml
tinkerpop-repository
TinkerPop Maven2 Repository
http://tinkerpop.com/maven2
```
```xml
com.tinkerpop
gremlin-core
1.4-SNAPSHOT
```
- Generalized Gremlin to be a meta-language
- Added
gremlin-core
for core functionality used by all Gremlin implementations - Added
gremlin-test
as a universal test suite for all Gremlin implementations - Added
gremlin-groovy
as the Groovy representation of the Gremlin language - Added
gremlin-scala
as the Scala representation of the Gremlin language - Added
IndexElementsPipe
as a start pipe that pulls elements from an index - Renamed
uniqueObject
step todedup
- Renamed
orFilter
andandFilter
toor
andand
, respectively - Renamed
uniquePath
tosimplePath
- Added
```xml
com.tinkerpop
gremlin
1.3
```
- Added
SailGraph.loadRDF()
meta method to make it easier to load RDF files - Optimized
>>-1
to use a try/catch model which is more efficient given the architecture ofAbstractPipe
- Updated
gremlin.sh
to respect previous classpaths and to make sym-linking easier - Fixed table width bug in
Table
- Added
Graph.loadGraphJSON()
andGraph.saveGraphJSON()
with respectivedata/graph-example-1.json
- Moved to
FluentPipeline
model provided by Pipes - Filter functions must be made explicit now (e.g.
out{it.id > 2}
must now beout.filter{it.id > 2}
) - Migrated
TablePipe
andTable
to Pipes - Renamed
propFilter
step topropertyFilter
- Added multi-vertex/edge lookup support via
g.v(1,2,3) -> [v[1],v[2],v[3]]
(andg.e()
as well) - Added
memoize()
step to provide theMemoizePipe
functionality to Gremlin - Added support for simpler
PipeFunction
model introduced by Pipes - Bumped to Groovy 1.8.2
```xml
com.tinkerpop
gremlin
1.2
```
- Added respective pipe support for
Vertex.getOutEdges(String...)
andVertex.getInEdges(String...)
- Added path functions to
paths
to allow for post-processing a returned path - Added map entry functions to
groupCount
to allow for pre-processing an entry’s key/value pairs - Added
Gremlin.version()
to get version information (returnsGremlinTokens.VERSION
) - Added
Gremlin.defineStep()
to make it simple for developers to add new steps - Added support for
Graph.loadGraphML(URL)
- Renamed
ifelse
toifThenElse
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 GroovyClosure
to aPipeClosure
- Added
- Update
g.idx()
to reflectnull
behavior of Blueprints index API update - Added
map
step to emit an element’s property map - Added support for
aggregate
step function to process object prior to insertion into the aggregate collection - Bumped to Groovy 1.8.1
```xml
com.tinkerpop
gremlin
1.1
```
- 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
andsaveGraphML
toGraph
SailGraph
is no longer a strict dependency (however, loads meta methods if in classpath)- Added
optional
step for doingback
, but without filtering - Extended support for graph pattern matching
- Added
AsPipe
for naming steps.- Added
table
step with respectiveTablePipe
andTable
data structure - Added support for named steps in
loop
- Added support for named steps in
back
- Added support for named steps in
optional
- Added
```xml
com.tinkerpop
gremlin
1.0
```
- Added
out(label?)
,in(label?)
, andboth(label?)
- Added
copySplit
,fairMerge
,exhaustMerge
SailLoader
is loaded on startup (no longer required by developer)- Faster
Gremlin.compile()
usingGremlinScriptEngine
- Renamed
andf
,orf
, andpropf
toandFilter
,orFilter
, andpropFilter
- Moved to the more optimal vertex/edge adjacency Pipes
- Renamed
unique
touniqueObject
- Updated Gremlin-specific pipes to support
reset()
API
```xml
com.tinkerpop
gremlin
0.9
```
Iterable
andIterator
meta methods are nowPipe
exclusiveIndex
results are auto-wrapped in anIdentityPipe
to ensure consistent behavior across graphs- Added
DexGraph
as imported graph database Object.propertyMissing
is no longer defined to ensure Gremlin safetyemit
step renamed totransform
foreach
step renamed tosideeffect
- Removed
futuref
step asback
supplies necessary computation - The
it
of thegather
step is now the gatheredList
```xml
com.tinkerpop
gremlin
0.8
```
- Added new steps
emit
to emit results of provided functionifelse
to perform a if/then/else branchuniquePath
to filter looping paths
- Added new methods
Object.mean()
to calculate the average of delegatePipe.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)
andbothE(label)
support - Added support for dynamic counter adjustment in
groupCount
- Bumped to using Groovy 1.7.8
- Created a type-cast friendly
groupCount
step
```xml
com.tinkerpop
gremlin
0.7
```
- Added many new steps
loop
step for in-line loopingforeach
step for function based operations on flowing objectsback
step for backtracking in pipeline (i.e.../
)aggregate
,except
, andretain
for except/retain patterngroupCount
for map aggregations (i.e.g:op-value()
)step
for anonymous/lambda steps
- Massive refactoring of documentation
- Changed to Groovy as the host language
```xml
com.tinkerpop
gremlin
0.6
```
- 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-e()
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)
```xml
com.tinkerpop
gremlin
0.5.5
```
- A rework of the user-defined step model
- Renamed the concept of “path” to “step”
- Users can now define computations in steps
- Added
gather
andscatter
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)
```xml
com.tinkerpop
gremlin
0.5
```
- 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 theServiceLoader
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 tog:id-v()
andg:id-e()
for getting vertices and edges, respectivelyg:key()
changed tog: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()
tog: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()
, andg:double()
to support number casting
- All core functions are now in the
- 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()
, andnull()
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>
- Distribution includes all supported graph databases in Blueprints (
```xml
com.tinkerpop
gremlin
0.2.2
```
- 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
```xml
com.tinkerpop
gremlin
0.2.1
```
- Instance naming convention for
Functions
changed toFunctionLibrary
list g:list(object+)
is nowlist g:list(object*)
- Added support for Java 1.6+ JSR 223
ScriptEngine
andScriptEngineFactory
- Renamed
GremlinEngine
toGremlinScriptEngine
- Renamed
GremlinEngineFactory
toGremlinScriptEngineFactory
- Renamed
```xml
com.tinkerpop
gremlin
0.2
```
- 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 removedstring g:to-json(object)
andobject 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(graph?, 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
map jung:pagerank(graph?, map?)
list jung:dijkstra(graph?, vertex, vertex, map?)
- Renamed
g:append(object, object+)
tog:list(object+)
- Renamed the general graph model to property graph model
- Moved the model and its implementations to Blueprints
- Dependency is on Blueprints 0.1
- Various bug fixes and optimizations
```xml
com.tinkerpop
gremlin
0.1
```
- Initial release of the language and virtual machine