We are excited to announce the release of version 0.8 of Bokeh, an interactive web plotting library for Python… and other languages! This release includes many major new features:

  • New and updated language bindings: R, JavaScript, Julia, Scala, and Lua now available
  • More bokeh-server features geared towards production deployments
  • Live gallery of server examples and apps!
  • Simpler, more easily extensible design for charts API, plus new Horizon chart
  • New build automation and substantial documentation improvements
  • Shaded grid bands, configurable hover tool, and pan/zoom for categorical plots
  • Improved and more robust crossfilter application
  • AjaxDataSource for clients to stream data without a Bokeh server

In addition, many smaller bugfixes and features, both old and new–over 100 issues–were closed for this release! See the CHANGELOG for full details

Get It Now!

If you are using Anaconda, you can install with conda:

conda install bokeh

Alternatively, you can install with pip:

pip install bokeh

Developer builds are also now made available to get features in the hands of interested users more quickly. See the Developer Builds section in the documentation for more details.

BokehJS is also available by CDN for use in standalone Javascript applications:

Please note that the file layout on CDN has changed slightly (however all older releases will always be available at their original locations).

Finally, BokehJS is also installable with the Node Package Manager.

Languages a-plenty

Both the bokeh.jl and bokeh-scala projects have seen updates to bring them speed with the newest Bokeh features. Also notable, Facebook just recently released the iTorch project for machine learning, and in doing so dropped bokeh.lua without any warning!

But perhaps the biggest news on this front is the long awaited arrival of rbokeh, which brings native bindings for Bokeh to the R language. There is already an awesome demo/tutorial page with much more to come soon!

Almost all of these projects are part of the Github Organization for Bokeh. Anyone who is interested in developing new language bindings for Bokeh is encouraged to contact us about hosting your project under this organization.

Bokeh server

We’ve spent a good deal of time building up the capabilities of the Bokeh server in the last year. It is a great facility to allow Bokeh plots to deal with streaming or large data sets, to have rich, sophisticated interactions between the client and a computational backend. You can see a nice new example of these interactions (with explanation) in this new video in the Bokeh YouTube Channel:

But while all these great features were baking out, it was still too difficult to deploy the server in a production environments. Now that things have settled down, we are making a big push to make the server simpler and easier to deploy. This release includes the first steps towards that goal:

Additionally, you can now view examples of Bokeh server apps and dashboards in a newserver gallery on the main docs site. Below is one of the examples, a simple app with sliders that let you control the visual aspects of the plot:

The deployment hosting this example is running with a combination of gunicorn and tornado. Expect many more examples to show up in the server gallery soon, as well as more notes on different deployment scenarios.

Annotations and Tools

A simple but visually pleasing addition is the ability to specify that a grid should have alternating colored bands, as seen in this example from the gallery:

grid bands

It’s also now possible to add your own basic styling to the hover tooltip using HTML templates:


The astute reader will note that the tooltip mentions clicking to open a URL. The newOpenURL is the first of several planned JavaScript callbacks or actions that will allow static documents to encapsulate even more sophisticated interactions.

One last enhancement, that falls under the category of “small but nice”, is that pan and zoom tools now work with categorical plots.

Ajax Data Source

One of the big ongoing efforts is to push as much capability as possible into the client library, BokehJS. The Bokeh server is a fantastic bit of technology, and it will always have a place enabling the most sophisticated use-cases, but there are also many common interaction and update patterns that would be nice to have, even in static documents. In addition to the callback interface mentioned above, we have also introduced a new data source type that can be configured from python, but that pulls all the data directly from the client:

source = AjaxDataSource(
p = figure()
p.circle('x', 'y', source=source)



This AjaxDataSource is still fairly basic, but there is already much interest around it, and even pull requests from new contributors. Look for many enhancements and features to this in the next few releases. Expect finer control over data ingest and conversion, the ability to connect directly to Blaze data sources, including computed columns, and better append/overwrite/buffering options.

Documentation, Documentation, Documentation

Creating and maintaining accurate and useful documentation is a constantly ongoing task. But for this release we have made big strides towards easing this burden by automating many parts of our documentation build process. Now you can access:

Much of this is made possible by new Sphinx extensions. In particular a bokeh-plotextensions makes it easy for anyone to include interactive charts to their Sphinx docs:

.. bokeh-plot::

    from bokeh.plotting import figure, output_file, show


    x = [1, 2, 3, 4, 5]
    y = [6, 7, 6, 4, 5]

    p = figure(title="example", plot_width=300, plot_height=300)
    p.line(x, y, line_width=2)
    p.circle(x, y, size=10, fill_color="white")


You can also include plots that are created from external .py files, and soon it will be possible to display plots that are published from Bokeh servers.

What’s Next?

The release of Bokeh 0.9 should happen around Spring 2015. Some notable features we intend to work on in the near future include:

  • More JS actions for sophisticated interactions in static plots
  • Headless output of static SVG, PNG, etc
  • Better support for maps and projections
  • Bokeh command line tool
  • CSS styling and React integration
  • Updated Tutorial, new Case Studies, and better User Guide organization

We also intend to pursue a WebGL rendering backend later this year, potentially including some types of 3d plotting capability.

How to get involved

Bokeh has recently seen a pretty dramatic uptick in interest and attention. One of the better side effects of this is that there has been a corresponding uptick in contributions as well. We would like to thank and welcome all new contributors, as well as invite anyone interested to jump in and get involved! In particular we’d like to point out @birdsarah, @hafen, @rothnic,@matdrapeau, and @shughes-uk for their significant contributions to the Bokeh 0.8 release!

Issues, enhancement requests, and pull requests can be made on the Bokeh Github page:https://github.com/continuumio/bokeh

Questions can be directed to the Bokeh mailing list: [email protected]

If you would like some help incorporating Bokeh into your Notebooks, apps, or dashboards, please send an email to [email protected] to inquire about Continuum’s training andconsulting services—not just for Bokeh, but for anything in the full NumPy/SciPy/PyData stack.