Download Riak 2.0

Client Libraries

Basho-Supported Libraries

Basho officially supports a number of open-source client libraries for a variety of programming languages and environments.

Language Source Documentation Download
Erlang riak-erlang-client (riakc)
riak-erlang-http-client (rhc)
edoc
Java riak-java-client javadoc, wiki Maven Central
Python riak-python-client sphinx PyPI
Ruby riak-ruby-client rdoc, wiki RubyGems

Note: All official clients use the integrated issue tracker on Github for bug reporting.

In addition to the official clients, Basho provides some unofficial client libraries, listed below. There are also many client libraries and related community projects.

Language Source Documentation
C riak-c-client C Client Documentation
Node.js riak-js riak-js.org
PHP riak-php-client doxygen

Feature Matrix

Below is a series of tables that compares the functionality of our official client libraries with the features exposed by Riak's API, and also compares features that are desirable in well-developed clients. We have developed this matrix in an effort to ensure feature-parity across the different clients.

Legend

Symbol Meaning
has feature
lacks feature
text partially supports feature
(blank) unknown

HTTP

Bucket Operations Erlang (rhc) Java PHP Python Ruby
List buckets
List keys
Get Bucket Properties partial
Set Bucket Properties partial
Object/Key Operations Erlang (rhc) Java PHP Python Ruby
Fetch Object (get)
Fetch w/quorums no PR no PR
Store Object (put)
Store w/quorums no PW no PW
Delete Object
Query Operations Erlang (rhc) Java PHP Python Ruby
Link Walking
MapReduce
Secondary Indexes
Search emulated via MapReduce emulated via MapReduce
Server Operations Erlang (rhc) Java PHP Python Ruby
Ping
Status partial
List Resources

Protocol Buffers

Note: The PHP client does not support Protocol Buffers and is thus excluded from this matrix.

Bucket Operations Erlang (riakc) Java Python Ruby
List buckets
List keys
Get Bucket Properties
Set Bucket Properties
Object/Key Operations Erlang (riakc) Java Python Ruby
Fetch Object (get)
Fetch w/quorums
Store Object (put)
Store w/quorums
Delete Object
Query Operations Erlang (riakc) Java Python Ruby
MapReduce
Secondary Indexes (emulated, native) ✓✗ ✓✗ ✓✓ ✓✓
Search (emulated, native) ✓✗ ✓✗ ✓✓ ✓✓
Server Operations Erlang (riakc) Java Python Ruby
Ping
Server Info
Get Client ID
Set Client ID

Additional features

Protocols Erlang Java PHP Python Ruby
Cluster connections/pools
Retry failures (on other nodes) ✓ ✓ ✓ ✓
Failure-sensitive node selection
Automatic protocol selection
Media-Type Handling Erlang Java PHP Python Ruby
Use arbitrary media types
JSON (de-)serialization
Other included (de-)serializers Erlang Binary Term Format YAML, Marshal
Custom (de-)serializers
Eventual Consistency Erlang Java PHP Python Ruby
Exposes siblings
Sibling resolution policies/strategies
Mutators (encapsulating change ops)
Domain Types/Object Mapping Erlang Java PHP Python* Ruby*
Abstract domain types w/reification partial
Embedded/nested domain types
Domain-level sibling resolution
Secondary index integration partial
Search integration

Various community projects provide support for domain types and object mapping in Python and Ruby. The values in the table above represent the aggregate features of the projects listed below:

Community Libraries

The Riak Community is developing at a break-neck pace, and the number of community-contributed libraries and drivers is growing right along side it. Here is a list of projects that may suit your programming needs or curiosities. If you know of something that needs to be added or are developing something that you wish to see added to this list, please fork the Riak Docs repo on GitHub and send us a pull request.

Note on community-produced libraries

All of these projects and libraries are at various stages of completeness and may not suit your application's needs based on their level of maturity and activity.

Client Libraries and Frameworks

C/C++

Clojure

ColdFusion

Common Lisp

Dart

Django (Python)

Erlang

Go

Grails

Griffon

Groovy

Haskell

Java

Lisp-flavored Erlang

C#/.NET

Node.js

OCaml

Perl

PHP

Play (Java)

Python

Racket

Ruby

Scala

Smalltalk