YugaByteDB is a transactional, high-performance database for building distributed cloud services. It currently supports Redis API (as a true DB) and Cassandra API, with SQL coming very soon.
C++ Java CMake C Shell Python Other
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
arcanist_util Add Apache license Sep 7, 2017
bin Java test fixes: reduce default number of tablet per TS, log spew, ru… Mar 23, 2018
build-support Java test fixes: reduce default number of tablet per TS, log spew, ru… Mar 23, 2018
cloud Exposing universe dashboard in public clouds Mar 17, 2018
cmake_modules ENG-2726: Managed DNS to get the endpoints for a YB EE universe. Mar 6, 2018
docs Create cloud-machine-types-analysis.md Feb 15, 2018
java Java test fixes: reduce default number of tablet per TS, log spew, ru… Mar 23, 2018
python/yb ENG-3021: Handle dependencies for libraries in mac_library_packager.py Mar 12, 2018
src/yb ENG-3073: Callhome should report version info Mar 23, 2018
thirdparty #1 Enable building on gcc 7 on Ubuntu 17.10 Mar 19, 2018
www Fix Dashboard UI styling issues Nov 15, 2017
.arcconfig Output compiler command line on compilation failure Jul 7, 2016
.arclint ENG-2737: Porting nonredundant functionalities of local_cluster_ctl t… Feb 22, 2018
.clang-format use the google style for the precommit hook Sep 30, 2016
.gitignore Improvements to snapshots and yb-admin, and some additional cleanup Feb 6, 2018
.travis.yml ENG-2611: Fix notification target in Travis CI configuration Jan 31, 2018
.ycm_extra_conf.py Remove "exportable libraries" to decrease build time and simplify CMa… May 29, 2017
CMakeLists.txt Write every Java test method's log into a separate file Mar 21, 2018
Doxyfile Removing some irrelevant files Sep 8, 2017
LICENSE.txt Removing some irrelevant files Sep 8, 2017
NOTICE.txt Detect the edition based on the Jenkins job name, and add NOTICE.txt … Dec 30, 2017
README.md Fix CQL link in YugaByte readme Feb 27, 2018
code_style.xml Ensure our code style enables multiline align to be consistent with g… Jan 25, 2017
requirements.txt Update yb_release to remove devops dependencies Nov 18, 2017
version.txt Bumping version in yugabyte to Mar 21, 2018
yb_build.sh Java test fixes: reduce default number of tablet per TS, log spew, ru… Mar 23, 2018
yb_release Fix recent issues with release tarball creation (symlinks, gzip) and … Nov 21, 2017
yb_release_manifest.json RPC support for processing commands from Postgresql clients. Mar 16, 2018


YugaByte DB

License Documentation Status Ask in forum Gitter chat

A cloud-native database for building mission-critical applications. This repository contains the Community Edition of the YugaByte Database.

Table of Contents

About YugaByte

YugaByte offers both SQL and NoSQL in a single, unified db. It is meant to be a system-of-record/authoritative database that applications can rely on for correctness and availability. It allows applications to easily scale up and scale down in the cloud, on-premises or across hybrid environments without creating operational complexity or increasing the risk of outages.

Supported APIs

In terms of data model and APIs, YugaByte supports the following on top of a common core data platform:

  • Cassandra Query Language (CQL) - with enhancements to support ACID transactions in the works
  • Redis - as a full database with automatic sharding, clustering, elasticity
  • PostgreSQL (in progress) - with linear scalability, high availability and fault tolerance

Note: You can run your Apache Spark applications on YugaByte DB

YugaByte DB is driver compatible with Apache Cassandra CQL and Redis - you can run existing applications written using existing open-source client drivers.

The distributed transactions feature is supported in the core data platform. The work to expose this as strongly consistent secondary indexes, multi-table/row ACID operations and SQL support is actively in progress. You can follow the progress of these features in our community forum.

Getting Started

Here are a few resources for getting started with YugaByte:

  • Quick start guide - install, create a local cluster and read/write from YugaByte.
  • Explore core features - automatic sharding & rebalancing, linear scalability, fault tolerance, tunable reads etc.
  • Real world apps - how real-world, end-to-end applications can be built using YugaByte DB.
  • Architecture docs - to understand how YugaByte was designed and how it works

Cannot find what you are looking for? Have a question? We love to hear from you - please post your questions or comments to our community forum.

Developing Apps

Here is a tutorial on implementing a simple Hello World application for YugaByte CQL and Redis in different languages:

We are constantly adding documentation on how to build apps using the client drivers in various languages, as well as the ecosystem integrations we support. Please see our app-development docs for the latest information.

Once again, please post your questions or comments to our community forum if you need something.

Building YugaByte code

Prerequisites for CentOS 7

CentOS 7 is the main recommended development and production platform for YugaByte.

Update packages on your system, install development tools and additional packages:

sudo yum update
sudo yum groupinstall -y 'Development Tools'
sudo yum install -y ruby perl-Digest epel-release ccache
sudo yum install -y cmake3 ctest3

Also we expect cmake / ctest binaries to be at least version 3. On CentOS one way to achive this is to symlink them into /usr/local/bin.

sudo ln -s /usr/bin/cmake3 /usr/local/bin/cmake
sudo ln -s /usr/bin/ctest3 /usr/local/bin/ctest

You could also symlink them into another directory that is on your PATH.

We also use Linuxbrew to provide some of the third-party dependencies on CentOS. We install Linuxbrew in a separate directory, ~/.linuxbrew-yb-build, so that it does not conflict with any other Linuxbrew installation on your workstation, and does not contain any unnecessary packages that would interfere with the build.

git clone git@github.com:linuxbrew/brew.git ~/.linuxbrew-yb-build
~/.linuxbrew-yb-build/bin/brew install autoconf automake boost flex gcc libtool

We don't need to add ~/.linuxbrew-yb-build/bin to PATH. The build scripts will automatically discover this Linuxbrew installation.

Prerequisites for Mac OS X

Install Homebrew:

/usr/bin/ruby -e "$(
  curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Install the following packages using Homebrew:

brew install autoconf automake bash bison boost ccache cmake coreutils flex gnu-tar libtool \
             pkg-config pstree wget zlib

Also YugaByte build scripts rely on Bash 4. Make sure that which bash outputs /usr/local/bin/bash before proceeding. You may need to put /usr/local/bin as the first directory on PATH in your ~/.bashrc to achieve that.

Prerequisites for drivers and sample apps

YugaByte core is written in C++, but the repository contains Java code needed to run sample applications. To build the Java part, you need:

Also make sure Maven's bin directory is added to your PATH, e.g. by adding to your ~/.bashrc

export PATH=$HOME/tools/apache-maven-3.5.0/bin:$PATH

if you've installed Maven into ~/tools/apache-maven-3.5.0.

For building YugaByte Java code, you'll need to install Java and Apache Maven.

Java driver

YugaByte and Apache Cassandra use different approaches to split data between nodes. In order to route client requests to the right server without extra hops, we provide a custom load balancing policy in our modified version of Datastax's Apache Cassandra Java driver.

The latest version of our driver is available on Maven Central. You can build your application using our driver by adding the following Maven dependency to your application:


Building the code

Assuming this repository is checked out in ~/code/yugabyte-db, do the following:

cd ~/code/yugabyte-db
./yb_build.sh release --with-assembly

The above command will build the release configuration, put the C++ binaries in build/release-gcc-dynamic-community, and will also create the build/latest symlink to that directory. Then it will build the Java code as well. The --with-assembly flag tells the build script to build the yb-sample-apps.jar file containing sample Java apps.

Reporting Issues

Please use GitHub issues to report issues. Also feel free to post on the YugaByte Community Forum.


We accept contributions as GitHub pull requests. Our code style is available here (mostly based on Google C++ Style Guide).


YugaByte Community Edition is distributed under an Apache 2.0 license. See the LICENSE.txt file for details.