0.12.4 (Jan 2017)

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

  • Efficient binary array protocol. (#2204)
  • A general mechanism to add CustomJS callbacks to any property. (#5498)
  • Several fixes to log plots. (#2789, #3834, #5389, #5549, #5576)
  • Fixes related to custom extensions. (#5315, #5590)
  • Guidance and examples for embedding a Bokeh server directly in standalone scripts, Jupyter notebooks, and Tornado and Flask applications.
  • Support for read-only (client-side) properties, e.g. plot inner dimensions (#5199)
  • Improved documentation for the bokeh.palettes module. (#5619)
  • Major refactor of bokeh.core including expanded documentation and tests (#5626, #5627)

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

NOTE: the 0.12.x series is the last planned release series before a version 1.0 release. The focus of the 1.0 release will be implementing build automation to enforce API stability, and a very small number of high value features. For more information see the project roadmap.

Migration Guide

As the project approaches a 1.0 release, it is necessary to make some changes to bring interfaces and functionality up to a point that can be maintained long-term. We try to limit such changes as much as possible, and have a period of deprecation.

Broken Dialog Removed

The Dialog widget has been broken for some time. Due to lack of user reports about it, and because custom extensions now provide a path for users to integrate third party JS dialog libaries, this widget has been removed immediately.

Custom Extension Import/Export

BokehJS is making a slow migration to TypeScript to support long-term stability and maintainability. This necessitates some short term changes for writing custom extensions.

JavaScript extension code with requires and module.exports, such as:

Model = require "model"

class DateGapTickFormatter extends TickFormatter
    # implementation here

module.exports =
    Model: DateGapTickFormatter

should be re-written as:

import {Model} from "model"

export class DateGapTickFormatter extends TickFormatter
    # implementation here

Legend Locations

To improve consistency, the following locations names have changed:

old location name new location name
left_center center_left
right_center center_right

The old location names will continue to work for some time with a deprecation warning.

App Current Directory

Directory style apps no longer chdir into the app directory. The module attribute __file__ should be used to construct any file paths relative to main.py for use with open, etc.

Window Titles

Bokeh apps embedded with autoload_server will no longer set the browser window title.

Positional Argument Order For hbar

In order to provide much improved interactive help (true function signatures and rich auto-generated docstrings) the order of the left and right parameters to hbar had to be swapped (cannot have non-default args after a default arg). The new function signature is:

p.hbar(y, height, right, left=0, **kwargs)

Old bokeh-server Command Removed

Since 0.11, the old bokeh-server command remained and only printed a message directing to information about using bokeh serve. It has been removed completely.

Cruft auto Functions removed

The following functions in bokeh.io were long unused and have been removed: autoadd, autopush, and autosave.

Eco Templates No Longer Supported

BokehJS has migrated to using .tsx templates. Provisional support for including .eco templates has been removed from both BokehJS and the Bokeh Python library.

Base64 serialisation and Python 3.3

The addition a binary protocol that uses a base 64 encoding for NumPy arrays means that Bokeh will not function with NumPy arrays on Python 3.3, due to a bug in Python. A possible workaround is to convert all arrays to plain python lists. As a reminder, Bokeh official support includes Python 2.7 and 3.4+ only.

BokehJS BackboneView $ Removed

In part of a longer effort to remove the JQuery dependency from BokehJS entirely, the $ attribute that BokehJS added to BackboneView has been removed. Use e.g., @$el.find instead.

Additionally, use of Bokeh.$ and Bokeh._

Refactor of bokeh.core

It is expected that all of these these changes should be below the level that standard users will ever be exposed to. These changes are listed here for completeness.

The overly large bokeh.core.properties module has been split up. This improves maintainability and allows the contents of bokeh.core.properties to limited to things of that might be useful to users writing custom models. The new file structure:

The following class names have been changed to improve intent and clarity (i.e. only things that are actually Python descriptors are named “Descriptor”):

old class name new class name
PropertyFactory PropertyDescriptorFactory
PropertyDescriptor Property
ParameterizedPropertyDescriptor ParameterizedProperty
BasicProperty BasicPropertyDescriptor
DataSpecProperty DataSpecPropertyDescriptor
UnitsSpecProperty UnitsSpecPropertyDescriptor

The following unused and non-useful properties were removed in this effort: Align, Event, Function, and This.

The default value for the owner parameter of the __get__ method on property descriptors was an unnecessary change to the standard Python descriptor protocol, and has been removed.

Additionally, the HasProps.set method has been removed. The name caused problems with the Sphinx docs build, and it was an unnecessary duplicate of HasProps.update (which should be used instead).