TL;DR

Titanium is a powerful Clojure graph library that is built on top of Aurelius Titan. It combines a Clojure-friendly API and graph processing DSL with the power of Titan.

The Quest To Improve

ClojureWerkz projects are mostly known for our data store clients. Data processing is a sweet spot for Clojure and that’s what we primarily use it for.

Over time we’ve developed and released a number of data store clients:

and a few others.

Some of them work very well and we will likely be happy with them for years to come. However, with some projects we keep thinking there is a limit to their usefullness or application. Sometimes the limitations are completely outside of our control, for example, licensing or implementation details of dependencies.

Standing On The Shoulders of Giants

Fortunately, the open source community is moving fast and new data stores are being released every year. Last year folks from Aurelius released Titan, a new powerful graph library that has pluggable storage backends and nails a few problems we’ve been having with other graph data stores.

Titan is primarily used as a JVM library which is significantly more efficient than issuing HTTP requests all the time when you are busy populating or updating the graph from an ongoing flow of events in the same JVM (e.g. a Web crawler activity). In addition, it can use Cassandra or HBase for durable storage, largely eliminating operations-related limitations (backup tools, HA) in some other popular open source graph data stores.

As Titan was getting more and more mature, we kept evaluating it and discussing what a good Clojure library on top of it would look like.

Today we are happy to release some results of that thinking.

Introducing Titanium

Titanium is a powerful Clojure graph library that is built on top of Aurelius Titan. It combines a Clojure-friendly API and graph processing DSL with the power of Titan:

Today we release a very early version, 1.0.0-alpha1.

What’s In The Box

In 1.0.0-alpha1, with Titanium you can

  • Populate the graph (add vertices, edges)
  • Manipulate properties of vertices and edges
  • Define indexes for graph elements
  • Query the graph using key/value lookups
  • Query and traverse the graph via a (semi-complete) DSL powered by Gremlin and Pipes
  • Configure Titan graphs

all via easy to use, Clojuric API.

Documentation & Examples

Because this is a ClojureWerkz project, we could not make this release public without at least one complete documentation guide.

Titanium’s test suite can be used to get more code examples.

Development, Issue Tracking, Supported Clojure Versions

Titanium targets Clojure 1.3+ and tested against 3 Clojure versions (1.4, 1.3, 1.5-master-SNAPSHOT) x 3 JDKs (OpenJDK 7, Oracle JDK 7, OpenJDK 6).

The source is available on GitHub. We also use GitHub to track issues. If you want to contribute, there is a section on our workflow in the README.

License

Titanium is double-licesned under the Eclipse Public License (the same as Clojure) and the Apache Public License 2.0 (the same as Titan).

What’s Ahead

We definitely want Titanium to be feature complete and get more powerful as Titan itself gets more powerful and mature. The Tinkerpop stack has a lot to offer and a lot of potential to grow into the industry standard graph technologies stack (at least on the JVM). Titanium will take full advantage of that.

We also think Titanium can grow to offer useful features of its own. There is a lot of work ahead even to catch up with Titan, but we already have a few ideas. Our short term goal is to make Titanium reach rough feature parity with Neocons and expose all the good parts of Titan.

Needless to say, documentation guides will only get better.

News and Updates

New releases and updates are announced on Twitter. Titanium also has a mailing list, feel free to ask questions and report issues there.

Titanium is a ClojureWerkz Project

Titanium is part of the group of libraries known as ClojureWerkz, together with

  • Welle, a Riak client with batteries included
  • Monger, a Clojure MongoDB client for a more civilized age
  • Elastisch, a minimalistic Clojure client for ElasticSearch
  • Neocons, a Clojure client for the Neo4J REST API
  • Langohr, a Clojure client for RabbitMQ that embraces the AMQP 0.9.1 model
  • Quartzite, a powerful scheduling library

and several others. If you like Titanium, you may also like our other projects.

Let us know what you think on Twitter or on the Clojure mailing list.

Michael on behalf of the ClojureWerkz Team.