0.12.15 (Mar 2018)

Bokeh Version 0.12.15 is an incremental update that adds a few important features and fixes several bugs. Some of the highlights include:

  • Addressed several WebGL bugs #6867, #7087, #7211, #7681
  • Switched to Chrome headless for CI image tests, will support better WebGL testing #6594
  • Updated data source selections to be proper Bokeh models #6845
  • Fixed memory leaks with certain kinds of Bokeh server usage #7468
  • Added new glyphs for hexagon markers and hex tiles, and a new hexbin method #7638, #4786
  • Completed BokehJS port to TypeScript #6481

Many other small bugfixes and docs additions. For full details see the CHANGELOG.

Additionally, we are pleased to announce Bokeh joins NumFOCUS Sponsored Projects.

Migration Guide

NOTE: the 0.12.x series is the last planned release series before a version 1.0 release. For more information see the project roadmap.


The mis-named property DataTable.row_header has been deprecated. This property confusingly controlled the presence of an index column in a DataTable. Now, use the index_position property to specify where an index column should be located in the table (use None to suppress the index column).

Additionally, new properties index_header and index_width are now available to further customize the index column appearance.


The handling of selections has needed attention in Bokeh for some time. This release adds a new Bokeh model Selection to represent selections on data sources. Having a proper Bokeh model makes selections simpler to use and to synchronize in apps than the previous “bare dict” that represented selections.

The new Selection model is found in the same location on data sources, i.e. source.selected. It has the following properties:

.indices            # which scatter typer indices have been hit
                    # previously selected["1d"].indices

.line_indices       # which point(s) on a line have been hit
                    # previously selected["0d"].indices

.multiline_indices  # which points on which line of a MultiLine
                    # previously selected["2d"].indices

In the near future, a property image_indices will be added to support hit testing of image glyphs.

All code should update to use these new properties. For now read only access to things like selected['1d'].indicies will continue to function as before for compatibility. However, programmtically setting selections must now go through the mode properties, i.e. .indices, .line_indices, etc.

Grid Bounds

Grids now automatically defer to any existing axis bounds when their own bounds are set to “auto”. Previously grids used always used the full range bounds. This change makes it simpler to have axes and grids both use a consistent set of bounds.

Minor Ticks

Minor ticks are no longer displayed outside explicitly set axis bounds. Previously minor ticks would display one extra “major tick” distance outside explicit range bounds.


This validation warning resulted in false or irrelevant warnings in many reasonable configurations, and has been removed.

Document and ServerContext callbacks

All Document and ServerContext methods that add callbacks can now add the same callback multiple times. Methods that remove callbacks now receive the value returned from a previous method call that added the callback. Example:

# Was

# Now
cb_id = doc.add_next_tick_callback(my_cb)

Sphinx Version

The bokeh.sphinxext Sphinx extension has been updated to work with currnt versions. Sphinx >= 1.6 is now required to use the extension.