Bokeh Version 2.0.0 (XXXX 2019) is a major milestone of the Bokeh project. This release cycle closed more than 180 issues. Highlights include:
2.0.0
New, modern MultiChoice widget added #9532
MultiChoice
BokehJS CDN resources are loaded with SRI hashes enabled #8937
New DatePicker implementation with more features #9509, #9494, #6728, #8917
DatePicker
Package relative imports work in directory-style Bokeh apps #9545
App sessions now use an expirable token that is not visible in query arguments #3458
Full HTTP header and cookies can be accessed by Bokeh app code #9505
Reference documentation show inherited properties on all Bokeh models #4966
IPyWidgets can be used in Bokeh applications, and Bokeh content can be put in IPyWidgets #9590
Added tile providers for ESRI and OSM #9560
And several other bug fixes and docs additions. For full details see the CHANGELOG.
This release raises the minimum version for some packages
Bokeh now requires Python 3.6 or higher.
Bokeh now requires Numpy 1.11.3 or higher.
The Bokeh server now requires Tornado 5.0 or higher.
Server lifecycle hooks should now goin in a file named app_hooks.py, which is also where new request hooks are to be defined. The previous module name server_lifecycle.py will continue to function, but is deprecated.
app_hooks.py
server_lifecycle.py
Previously, the formatters property accepted a CDS column name. For example a formatter for a tooltip for "@foo could be specied with just "foo":
formatters
"@foo
"foo"
hover_tool.formatters = { "foo": "datetime"} # BAD
Now, the full matching tooltip specification, including the "@", should be used:
"@"
hover_tool.formatters = { "@foo": "datetime"} # GOOD
This allows tooltip formatters to be used uniformly with both columns, as well as “special variables”, e.g. "$x".
"$x"
The obsolete Sphinx confiuguration parameters bokeh_plot_use_relative_paths and bokeh_plot_pyfile_include_dirs have been removed. The unused PLOT_PAGE template has also been removed.
bokeh_plot_use_relative_paths
bokeh_plot_pyfile_include_dirs
PLOT_PAGE
The deprecated and unsupported PhantomJS dependency is no longer used for exporting Bokeh content. Bokeh will use Chromedriver by default, but can also be configured to use Geckodriver.
The use_strict property has been removed from all models that it had been on previously. All JavaScript code, e.g. for CustomJS will always be rendered with "use_strict" added.
use_strict
CustomJS
"use_strict"
require()
The require() function s not available from CustomJS anymore. It exposed the underlying module system, which should not be used by general users. Use APIs exposed on Bokeh object or (as a last resort), use Bokeh.require().
Bokeh
Bokeh.require()
Bokeh wire protocol messages no longer express any revision, and URLs for server sessions no longer specify "bokeh-protocol-version". It is assumed any client and server communicating are the same release version (which has always been true in any usage scenario).
"bokeh-protocol-version"
The obsolete old-style selection dictionaries, i.e. selected['1d'] have been removed. Use selected.indices, etc. only.
selected['1d']
selected.indices
Previously, Bokeh used a complicated copy-on-access scheme to return palettes as lists. The necessary “module hack” could confuse IDEs, complicated the docs build process, and sometimes lead to unexpected behavior. All palettes are now tuples, which is a simpler solution to the problem of mutable module attributes.
The main difference is that palettes can no longer be modified in place, including reversing the palette. To reverse a palette, do:
list(reverse(pal))
The named tile properties in tile_providers.py, e.g CARTODBPOSITRON now return then vendor id for that tile provider. This is can be passed to the get_provider method directly to return a new TileProvider instance.
tile_providers.py
CARTODBPOSITRON
get_provider
TileProvider
The ColumnDataSource.selected property is now read-only.
ColumnDataSource.selected
The ColumnDataSource.data property can only be set from plain Python dicts. Attempting to set from another CDS, i.e s1.data = s2.data, will raise an error.
ColumnDataSource.data
s1.data = s2.data
The Date property has been narrowed, in order to afford an unambiguous date type in the form of an ISO date string. The Date type accepts ISO date strings, and datetime.date objects.
Date
datetime.date
As a result, the DatePicker widget no longer accepts datetime values or timestamps. All values must be valid Date values.
The Datetime now accepts timestamps (milliseconds since epoch) directly.
Datetime
The W-1000 (MISSING_RENDERERS) validation warning will no longer trigger for plots that have added annotations, even if no other glyphs are present.
W-1000 (MISSING_RENDERERS)
The UnitsSpec class is now a base class and is not useful ln its own. If you were using UnitsSpec in an extension model, you should change to use the new PropertyUnitsSpec class, which affords the capability for adding separate *_units properties.
UnitsSpec
PropertyUnitsSpec
*_units
The command line utilities bokeh html, bokeh png, and bokeh svg were early experimental tools that were never widely promoted. It was recently discovered that they have been broken since version 1.0, indicating that they are completely unused. To reduce codebase cruft, they have been removed.
bokeh html
bokeh png
bokeh svg
The previous environment variable BOKEH_VERSION that could be use to specify which version of BokehJS should be loaded from CDN, has been renamed to BOKEH_CDN_VERSION.
The following modules and functions were previously deprecated or were internal and no longer needed:
bokeh.client
Method ClientSession.loop_until_closed removed
ClientSession.loop_until_closed
bokeh.io
Function create_webdriver removed, use webdriver_control instead.
create_webdriver
webdriver_control
bokeh.models.callbacks
Methods CustomJS.from_py_func and CustomJS.from_coffeescript removed
CustomJS.from_py_func
CustomJS.from_coffeescript
bokeh.models.filters
Methods CustomJSFilter.from_py_func and CustomJSFilter.from_coffeescript removed
CustomJSFilter.from_py_func
CustomJSFilter.from_coffeescript
bokeh.models.formatters
Methods FuncTickFormatter.from_py_func and FuncTickFormatter.from_coffeescript removed
FuncTickFormatter.from_py_func
FuncTickFormatter.from_coffeescript
bokeh.models.plots
Properties Plot.h_symmetry and Plot.v_symmetry removed
Plot.h_symmetry
Plot.v_symmetry
bokeh.models.tools
Methods CustomJSHover.from_py_func and CustomJSHover.from_coffeescript removed
CustomJSHover.from_py_func
CustomJSHover.from_coffeescript
bokeh.models.transforms
Methods CustomJSTransform.from_py_func and CustomJSTransform.from_coffeescript removed
CustomJSTransform.from_py_func
CustomJSTransform.from_coffeescript
bokeh.models.widgets.buttons
Properties Dropdown.default_value, Dropdown.value and AbstractButton.clicks removed.
Dropdown.default_value
Dropdown.value
AbstractButton.clicks
bokeh.models.widgets.sliders
callback, callback_throttle, and callback_policy removed from all sliders. Use value for continous updates and value_throttled for updates only on mouseup
callback
callback_throttle
callback_policy
value
value_throttled
bokeh.plotting.helpers
Entire module removed
bokeh.protocol
Entire versions module removed, messages.register function removed
versions
messages.register
bokeh.util.compiler
Class CoffeeScript and related code removed
CoffeeScript
bokeh.util.future
bokeh.util.string
Functions encode_utf8, decode_utf8, and escape removed
encode_utf8
decode_utf8
escape
Additionally, the callback property is removed from all Bokeh models except CustomAction, HoverTool TapTool, and OpenURL. Instead, the more general js_on_change or js_on_event methods should be used.
CustomAction
HoverTool
TapTool
OpenURL
js_on_change
js_on_event
The following new deprecations are effective:
bokeh.layouts.WidgetBox is deprecated use bokeh.layouts.Column instead.
bokeh.layouts.WidgetBox
bokeh.layouts.Column
Importing from_networkx from bokeh.models.graphs is deprecated. Import from bokeh.plotting instead.
from_networkx
bokeh.models.graphs
bokeh.plotting
The SRI Hashes for version 2.0.0 are given in the table below:
Filename
Hash
bokeh-2.0.0.js
TQAjsk2/lDn1NHjYoe8HIascd3/Cw4EWdk6GNtYXVVyAiUkbEZiuP7fEgbSwM37Y
bokeh-2.0.0.legacy.js
KvYk7iMwUT+T6wbXsJNaIbaxXlBNk2id4b4CRlfr0b2M++o+ycEdp9fvMXqrDwZc
bokeh-2.0.0.legacy.min.js
CCIKna2ZIlI0MivXi2r7apQaMx554Ztel6IGoEh0vInb0GdzgeIW2tTkjQxzNxVY
bokeh-2.0.0.min.js
5Y+xuMRAbgBj/2WKUiL8yzV4fBFic1HJPo2hT3pq2IsEzbsJjj8kT2i0b1lZ7C2N
bokeh-api-2.0.0.js
wtdLa278p5B8/9lLHjKx3v1PllDHlUTVqeGMO+00z5Iii6DTlM6Wn2M6EezrscT9
bokeh-api-2.0.0.legacy.js
xEygVlSYXCNxhx/3LL+biSHdP4IBCosQ/a4+3SXafbcygWVgA5HyhsO3O7Xsg593
bokeh-api-2.0.0.legacy.min.js
TPxIDWEddrIyL2IWMd79GCOWaeKcG27aNAp/px+K0F9Aj7l+09sELd4lqdq4fqzg
bokeh-api-2.0.0.min.js
jhjuIqjWjq4QgpHjcldtKYaCU8Wwmlq0niq6Yk5RkWm3Di1WP05WJboVdpmKzuO8
bokeh-gl-2.0.0.js
HXKiX+aZU1CnSpIM8+MS+Z2kObaTt+IPrDRg7VCe4IFUKrIYAtDgV9RZnVtrVnSN
bokeh-gl-2.0.0.legacy.js
nnDqIZuQmxaXtk4EhiVRC3AcMgetsms60jLqqefduePl1VnmvjB9NtZXoKMwxjMR
bokeh-gl-2.0.0.legacy.min.js
5Sy4Qp3254i0UqkYlCULUkAkW6B6MyXzJyrLklStxQwxmIn2Up4EvEb5q74JQwTo
bokeh-gl-2.0.0.min.js
fpJSoIQ2gW/5hIlVy9e7+9nUgvu/7Vw7JV70rKVtzAbp1DEFDfgVO4hr7G1GtzH5
bokeh-tables-2.0.0.js
R9GUSWQi4zC2NFb1iP/MiTd3UyN3Uy6U5jats866GBVfGm2flsPtOduBe0Y2LxZS
bokeh-tables-2.0.0.legacy.js
UHZAShxlRzXd//DAISUiRhjjUU6E1SoLNa7Uzycu7CmR/OYU2Q9MfHmcdznsT3hq
bokeh-tables-2.0.0.legacy.min.js
8GgoJwiRBs3WXJVUgg7SCwG85J0W2eT6RSwblZCqZA3594d15I1JevOV+cTrm8Y1
bokeh-tables-2.0.0.min.js
BGyDyuSaiu0cchXHeEcHeNqhBFiLD5nWxahw58BXz2o1yZvZh4DCAMVUBoIrZfUP
bokeh-widgets-2.0.0.js
zE8U60r320XXO/09Pt8AF+lqqvYfSHXetUsyNzGZXQ7lOz9qGp4DXVVDEuJK2s3G
bokeh-widgets-2.0.0.legacy.js
WawSlUEPeUkkCbhvxy6CTrth9lbhLrQctssY0WrtwoyC3QAuvyeKehyeuPGyy7Ra
bokeh-widgets-2.0.0.legacy.min.js
oKQ2GMrLvR6C63C3fOHg8yRWyEUtYhMiMK5keQH2UBbgpP1XmY+KzQXqud5ooU4S
bokeh-widgets-2.0.0.min.js
2ltAd1cQhavmLeBEZXGgnna8fjbw+FjvDq9m2dig4+8KVS8JcYFUQaALvLT//qHE
Bokeh Version 1.4.0 (October 2019) is a significant release that marks the end of support for Python 2.7 and Python 3.5 and earlier.
1.4.0
Starting with the next release, Bokeh 2.0, Python 3.6 or later will be required.
This release includes several important fixes and features:
Complete new site design for documentation, including search #8209
Jupyterlab ipywidgets integrations #9137
Security related improvements to the Bokeh server #9139, #9140
New integration added fot Django Channels #9009
Precompiled Bokeh extensions #9196
Legend improvements #9135, #9144
And several other bug fixes and docs additions. For full details see the CHANGELOG. #8676
The overburdened legend keyword argument to glyph methods is deprecated. It is replaced with three purpose-specific keyword arguments:
legend
legend_label="some_label"
This will always produce a legend item with exactly the given label.
legend_field="some_colname"
This will produce a “grouped” legend, where the grouping is done by JavaScript in the browser. Python code will only see a single legend item representing the grouping.
legend_group="some_colname"
This will produce a “grouped” legend, where the grouping is done by Python code, bedore the content is rendered in the browser. Python code will see individual legend items for each group.
These keywords remove the ambiguities due to the “automagic” operation of legend with respect to legend grouping. The existing legend keyword argument will continue to function until at least version 3.0 of Bokeh.
The SRI Hashes for version 1.4.0 are given in the table below:
bokeh-1.4.0.js
vn/jmieHiN+ST+GOXzRU9AFfxsBp8gaJ/wvrzTQGpIKMsdIcyn6U1TYtvzjYztkN
bokeh-1.4.0.min.js
mdMpUZqu5U0cV1pLU9Ap/3jthtPth7yWSJTu1ayRgk95qqjLewIkjntQDQDQA5cZ
bokeh-api-1.4.0.js
Y3kNQHt7YjwAfKNIzkiQukIOeEGKzUU3mbSrraUl1KVfrlwQ3ZAMI1Xrw5o3Yg5V
bokeh-api-1.4.0.min.js
4oAJrx+zOFjxu9XLFp84gefY8oIEr75nyVh2/SLnyzzg9wR+mXXEi+xyy/HzfBLM
bokeh-gl-1.4.0.js
/+5P6xEUbH87YpzmmpvP7veStj9hr1IBz+r/5oBPr9WwMIft5H4rEJCnyRJsgdRz
bokeh-gl-1.4.0.min.js
nGZaob7Ort3hHvecwVIYtti+WDUaCkU+19+OuqX4ZWzw4ZsDQC2XRbsLEJ1OhDal
bokeh-tables-1.4.0.js
I2iTMWMyfU/rzKXWJ2RHNGYfsXnyKQ3YjqQV2RvoJUJCyaGBrp0rZcWiTAwTc9t6
bokeh-tables-1.4.0.min.js
pj14Cq5ZSxsyqBh+pnL2wlBS3UX25Yz1gVxqWkFMCExcnkN3fl4mbOF8ZUKyh7yl
bokeh-widgets-1.4.0.js
scpWAebHEUz99AtveN4uJmVTHOKDmKWnzyYKdIhpXjrlvOwhIwEWUrvbIHqA0ke5
bokeh-widgets-1.4.0.min.js
xR3dSxvH5hoa9txuPVrD63jB1LpXhzFoo0ho62qWRSYZVdyZHGOchrJX57RwZz8l
Bokeh Version 1.3.4 (Aug 2019) is a micro-release to test changes to build and release automation.
1.3.4
The SRI Hashes for version 1.3.4 are given in the table below:
bokeh-1.3.4.js
hxYaSDo9UOW449HmDfCJM8HEfDssTqfbM2MEj6Y1kX0NWSobeYNMb1yZ+gZEoP99
bokeh-1.3.4.min.js
QGUo+MeWXFKCQ/7fjKTybRP8Ppnp0KBnlT47OxaVTz4GgKZ1FHcE1HQ+E+eQCOhp
bokeh-api-1.3.4.js
nJUu+sx8zSb41hqOdx43gieIbvKctxvE1p9t+pk/LPfEa/NkdXLzabs0l9Ei6IWt
bokeh-api-1.3.4.min.js
uiQK8rYxuWmtxis0SRCPutN+wBC3I2mpeiEcpNBGu0r2I5cZFvxBRp81KQQMd68i
bokeh-gl-1.3.4.js
uMcdujhqERVMJTJ61CtRysRPxg/IHxUyG2Lg1Cz0ZADlyb04LKuVo9JOH8n9fAHD
bokeh-gl-1.3.4.min.js
ADA0PW/OwoRXwpwdip39O2fv8bODqyQrfG7+93px9tBd95sodfrG08hvl4BmlFZ7
bokeh-tables-1.3.4.js
NwpciY1ja7iqnMnmr44ZDhWGkqdEvboTbndFsw+5NxKCZxIMZUYGFvgc4TrPmAW3
bokeh-tables-1.3.4.min.js
zWoUJmvc67QcNkwy37hrt8j8hkx+AnkDxddpM2llEzXmq/rEDQCC65Wlwu2rvdqF
bokeh-widgets-1.3.4.js
lwaiwsl6zHSRB67alfn0bVx0GlBwUovKXqcXZYTuyf0FQz4izhwFF5+YbU4CJmpO
bokeh-widgets-1.3.4.min.js
NuVOeEsS+hhEJQGsO94fKMfY74rRsFLaYpw1VPzGLN2+pwD9m2PkYQ+W56WAYVTi
Bokeh Version 1.3.2 (Aug 2019) is a micro-release to test changes to build and release automation.
1.3.2
The SRI Hashes for version 1.3.2 are given in the table below:
bokeh-1.3.2.js
EohK5rErHRcmdCJbvCpee7KR9k6kXGye6xtuLBvddGY4uPjxQe/L9/vNnvuAiO3C
bokeh-1.3.2.min.js
HvAJhQCPIyzZvnEIfRCKWH7Wpnn4WHCkds1x2ZmltiXsv9zSHgpsul+Gn/6HS8H6
bokeh-api-1.3.2.js
bokeh-api-1.3.2.min.js
bokeh-gl-1.3.2.js
bokeh-gl-1.3.2.min.js
bokeh-tables-1.3.2.js
bokeh-tables-1.3.2.min.js
bokeh-widgets-1.3.2.js
bokeh-widgets-1.3.2.min.js
Bokeh Version 1.3.1 (Jul 2019) is a hotfix micro-release to fix #9123.
1.3.1
The SRI Hashes for version 1.3.1 are given in the table below:
bokeh-1.3.1.js
gvzEY0xhVHzwW+7ML6zOrcY7QJ5setdu3GtOKu0bLehUNjVND4fZ43wOD4ijVWuZ
bokeh-1.3.1.min.js
F53X81jIKZEulkAZ03WqtV0aOIuVMsP4Fc93kfCNwNUU0VXluJDpH+FCGORdH8WK
bokeh-api-1.3.1.js
bokeh-api-1.3.1.min.js
bokeh-gl-1.3.1.js
bokeh-gl-1.3.1.min.js
bokeh-tables-1.3.1.js
bokeh-tables-1.3.1.min.js
bokeh-widgets-1.3.1.js
bokeh-widgets-1.3.1.min.js
Bokeh Version 1.3.0 (Jul 2019) is a point release that adds some interesting new features:
1.3.0
FileInput widget added #6096
FileInput
New DataCube widget affords groups and aggregations of tabular data #8100
TextInput widget now has a new per-keystroke capability. #8676
TextInput
Can now set source.data directly from DataFrames #9052
source.data
And several other bug fixes and docs additions. For more details see the CHANGELOG or the blog announcement.
The SRI Hashes for version 1.3.0 are given in the table below:
bokeh-1.3.0.js
wy2+PIm3maus9uYDYc0cku7FK/YZhPclomtlXlPmXqcSnlAqyDDfxZXqhw6NOtSu
bokeh-1.3.0.min.js
HaIutCwfjRbn7WHpFRm/L2WvVUki6RZfPHZ1DsqhGoy/M4yJ0VdVQiFKpeE6ZrZy
bokeh-api-1.3.0.js
pkLtYJrxBkmy8jqWylBV2S97rr/JKTvIXDa3TOFSPZomJtXtwsn3n9WnaA2dKoCz
bokeh-api-1.3.0.min.js
qTwyASzNbuiyKzz0j+uKgJMpPUIfBS1wbEr/+fnB3eMUTQ3JibCGzPjX8wTyc5rY
bokeh-gl-1.3.0.js
QGFuv/RfrL27Vqyds/p6Gg7NrFf20yXuAH7Tc7/7oufRrGONemXUsJ4G8AmQGGlc
bokeh-gl-1.3.0.min.js
2QvOYCx8RvnCTAIxD8SXXzf02XWqHpxMKhsoptQ1hhA7JBoFkz9eHkebwPBLGDqS
bokeh-tables-1.3.0.js
1EJ6UROyLiGCAEjiU6gmIaWeIeqpt0AfiXLFwLh+213EzqdUvvjAALiQVuyVPX5/
bokeh-tables-1.3.0.min.js
ayyYYAvA8tqfur11kBVP3RLElr83x3u+O3YvY/G22751vRDvtIKxuyKhdhLEXp+Q
bokeh-widgets-1.3.0.js
b8x6rSZzuJ3/MBhrIkxffHUaUsboM804zDA40CaI0pMeUaC4zycPFHY59XvACDQx
bokeh-widgets-1.3.0.min.js
gMNOGxDAy9M4pV7bHkWKL6bYt9OxAbOJs6rhuX7+ea+8dALJ61bvrmOguix7f9bx
Bokeh Version 1.2.0 (May 2019) is a point release that adds some interesting new features:
1.2.0
Styling options for fill patterns / hatching #6135
Built-in support for stacked areas and lines #8848
New title property for Legend #6769
Slider callback_policy now works for Bokeh Apps #4540
The Google Groups mailing list has been retired. In it’s place, there is now a Discourse site for community discussions. All of the old content from the mailing list has been imported into the Disourse, and is searchable.
Sliders add a value_throttled property that is updated (and triggers JS and Python callbacks) only according to the callback_policy:
slider.callback_policy = "mouseup" # both of these will respect the callback policy now slider.js_on_change('value_throttled', ...) slider.on_change('value_throttled', ...)
The callbacks above will only execute when the user releases the mouse after adjusting a slider.
Note that the value property can also still be used to trigger callbacks —they will execute unconditionally on every movement.
The old-style callback property still works for JS callbacks, but will be removed in Bokeh 2.0 in the near future. The general js_on_change and on_change mothods should be used going forward.
New varea and harea methods add support for single directed areas (filled regions between two series that share a common index). Also added:
varea
harea
varea_stack
harea_stack
for stacking directed areas, and
vline_stack
hline_stack
for stacking lines.
For example:
colnames = ['y0', 'y1', 'y2', 'y3', 'y4', 'y5', 'y6'] p.varea_stack(colnames, x='index', color=colors, source=df, legend=[value(x) for x in colnames]) p.vline_stack(colnames, x='index', color="black", source=df)
Legends now support displaying a title:
p.legend.title = "Things"
The SRI Hashes for version 1.2.0 are given in the table below:
bokeh-1.2.0.js
4+KQbypUa/uxpWNeDNyRzufi1YlGqZsInZemZigvHdv32WWjdp1KlPEFmf4wzpta
bokeh-1.2.0.min.js
mWbJ8jmrSa+2knhNY9k+1+n76Cpty+egxqOgaFKhsP+OwM8Tbrf7+MEkGEncZ46/
bokeh-api-1.2.0.js
0xhTYoa2v15o3EtJEVKsQjrx1ipFUE0cdCzu0RwDx2UF2yj3lABwBdQfHoaNpCbg
bokeh-api-1.2.0.min.js
4e4aipXilPqIIIY5JJ+3wAlkb9mzjzn/dd11/jeniYRSPWqWWBzO00rpkTyJ+Sci
bokeh-gl-1.2.0.js
mLCxwlced495i8wopmgPu0JvM1onA110FJv5Gqdr9on9Ccy4WCjPZVDOOdHyIWtM
bokeh-gl-1.2.0.min.js
rKTYZL5VxTanIFQYMm/2YJ3FBH5fLFzmkAAg+flp320LO+mVle7IEaRYhXlmwp2/
bokeh-tables-1.2.0.js
Sj0zYcj0PABOSygJwRGZkssJrqE65FLGez7Ui5DmKraR+AvH6eZvdlIBWZw0/peK
bokeh-tables-1.2.0.min.js
MxwNCLd4QwWNk5mNp9+Iuz7DGP6vwxPnYwkA/f4P+uW57uGkApbskjEznL5ZVXRv
bokeh-widgets-1.2.0.js
RZh7VtqT7oE5uCqziEQGJRd7kbqHTAPnSkahkfGBHDCbg8bIyjU+pGvq7xYuKYjB
bokeh-widgets-1.2.0.min.js
PybI+m+ISoRb/8ragk5JtlK+Wn89GsTwz6NczXKduasD8KvuSHaunx57QX/NhMU5
Bokeh Version 1.1.0 (April 2019) is a significant release that primarily addresses the layout system. More than 50 layout-related issues were closed, addressing bugs, missing features, and performance. Other topics of this release included:
1.1.0
Hover tool fixes and features #8742, #8668, #7991
Widget improvements #7665, #8717, #6822, #6333
Sphinx extensions more generally useable #5955
Notebook integration work #8583, #8681, #8681, #8733
Live BokehJS examples added to docs #8692
Improved DataTable performance #8227
The js_link function was added to make it simpler to link two Bokeh model properties together:
js_link
slider.js_link('value', r.glyph, 'radius')
See Linked Properties for more information.
The Slider.value_as_date method was added to conveniently retrieve Slider values as date objects when appropriate.
Slider.value_as_date
The following features or APIs were deprecated in version 1.1 and will be removed in a future 2.0 release:
Support for CoffeeScript in CustomJS or custom extensions. Use JavaScript or Typescript instead.
Support for ClientSession.loop_until_closed. This function is intended to support testing only, and will be removed from the public API. Bokeh applications should be run directly on a Bokeh server.
Support for “transpiling” Python code to JavaScript. All from_py_func methods will be removed. Use JavaScript or Typescript instead.
from_py_func
In order to support a longer term goal of moving Bokeh docs to ReadTheDocs, some changes to the bokeh-plot Sphinx directive were necessary. These are:
bokeh-plot
Plot script files are now always placed immediately adjacent to the document they are for, and loaded using relative URLs.
The config values bokeh_plot_pyfile_include_dirs and bokeh_plot_use_relative_paths are no longer needed. Setting them will have no effect (but will not break existing builds). These config values will be removed in a future 2.0 release.
We believe that there are very few users of bokeh.sphinxext outside the project itself, and that these changes will not cause any breakage for any of those users. However, please reach out for support if any unforeseen issues arise.
bokeh.sphinxext
The SRI Hashes for version 1.1.0 are given in the table below:
bokeh-1.1.0.js
i6JTfKyFleN5etrHejE0mMxC1ojRunUXzW8AbtoOEmXhDaal+bp5ZTiFHnEmZ6hh
bokeh-1.1.0.min.js
oMrsRASUWaEgdoXnhJNE7i+hMUcd9YLfAvsqc+nbNzWDs74md2vw28Y9PyYDnDCd
bokeh-api-1.1.0.js
uOA/ree+K+qCkPGbiHMGXcgavCa2kwDQ84d8u0ywZif5V6WMgtvRM1W3RR7vP3Cq
bokeh-api-1.1.0.min.js
P+QDPQq5g+PjbZbpmCmmQwBSnwv1ikx7g7WvDI00FoVG1W8NzRGBvNbnWGHz0AZB
bokeh-gl-1.1.0.js
i79a9wGnXni9NxaWcgzkl6tR+l4wSs/ttCv2YC3XvRAOIe+A0RUnm0D5V3JOipOw
bokeh-gl-1.1.0.min.js
t9vFW5DVCN4euZ9tupeZ1CO/U2lneLe3INQGzYfnBe9nQws+y6dMRIXLIRD2b1dL
bokeh-tables-1.1.0.js
hQH/DueMLJWZsj/bckRJs2bcIo1bbBFNbHHQr+z1G9Yh6GQP6zI215ic3hybyrNK
bokeh-tables-1.1.0.min.js
5hEoSrEshPM9GHeSmlta945zxAxsCf4qNGrC/jGb3qe+EeM3F7yZ7PYk5ZHadq2h
bokeh-widgets-1.1.0.js
44Re6Vy1RtmN/ygLt6X8de76/4Upoo4a5JHuRKFbTT0GgwyVNqon8y9517Dry7cn
bokeh-widgets-1.1.0.min.js
KHHmmF1Tt4kLBdZxuSox84wwIszGK9adf6qP2VOTp9KKd0mX69j19g0vHFBsPTX1
Bokeh Version 1.0.4 (January 2019) primarily addresses a security issue regarding yaml.load (#8541).
1.0.4
yaml.load
For full details see the CHANGELOG.
The SRI Hashes for version 1.0.4 are given in the table below:
bokeh-1.0.4.js
+nXmcnsMn5+klFrTae7Qcqynq2XIvuvWTSCs3yTR6lh6ajv6X5XSbeyW9rMaqY5q
bokeh-1.0.4.min.js
GQcj6yhUtDYJmIMd9iQvkoORMVh3MfFofWnU8q7XTfSiLGlwMu44ZQkHJLKuXgiR
bokeh-api-1.0.4.js
XlktvJYrwyhD+8uwGi4DhDtxFq/xbEpVYNZGC+MNfcV/6CBISW79vIRm8saU9Isl
bokeh-api-1.0.4.min.js
NSKzY3Xo3QtIQoJyDdrS4WX32aIHy8AKe9EnylHEixnHAK6tiVv5S3b3m5MDmuYm
bokeh-gl-1.0.4.js
EYZpUMzNI2udt3oD7YSGPHthzQ6gt39iMldN1efrrdSrMZqzqxJjoLBHPifzVrxD
bokeh-gl-1.0.4.min.js
pvGNV4tMr8cTWJ6zCy6GgMnOb4vHXXCpnowJw8IQM0aa/XKVUlRVgjQu/BlOCH4L
bokeh-tables-1.0.4.js
2c8KG1SSTwpJvWGZpe7P7Hd6kXBHltLw8IcdaNvNn8Ec4wsMtSpT/6PtJKI/z+uz
bokeh-tables-1.0.4.min.js
1Cp+3MdtkZ0V/9bUsoqxHnvLrb2OoG76DPJNiPzN8Q+fYr1WpVs8IkmtNhJ5HijX
bokeh-widgets-1.0.4.js
Y1ITbV66rAm4sLToJ+ae4QbbfWwn/o/sj0V/Zuly8ZeQuEl9sp1Orl6hsSTzUkIH
bokeh-widgets-1.0.4.min.js
r5YLyp1NS4FDmCEPUgE3UPsalffFN99+rwnCi7PCw66rqZvPnCET3hOXcRVsvPL2
Bokeh Version 1.0.3 (December 2018) is a micro bugfix and feature release.
1.0.3
Some of the highlights include:
Enable Copy-and-Paste from DataTable (#7762)
DataTable
Add a Multi-line TextAreaInput widget (#2828)
TextAreaInput
The SRI Hashes for version 1.0.3 are given in the table below:
bokeh-1.0.3.js
h9nQ4/EQ+Xi5yICeD0JGFM8cwQBaetCUYuN+Zp3Okx8JD12XmtV2p3WO+oTkE/aC
bokeh-1.0.3.min.js
YpEQX836ZOA8FpMp6Enrn9K06USTUkAmdyN07sC73mC/dLl/rWfVipvtFb9Xiv32
bokeh-api-1.0.3.js
bokeh-api-1.0.3.min.js
bokeh-gl-1.0.3.js
bokeh-gl-1.0.3.min.js
bokeh-tables-1.0.3.js
bokeh-tables-1.0.3.min.js
bokeh-widgets-1.0.3.js
bokeh-widgets-1.0.3.min.js
Bokeh Version 1.0.2 (November 2018) is a micro bugfix and feature release.
1.0.2
Expose configurable DataTable row height (#8411)
Fix issue with legends and empty scatter glyphs (#8395)
The SRI Hashes for version 1.0.2 are given in the table below:
bokeh-1.0.2.js
0jTK+5+/+q7+O+LFk2/AmIe8rkQ3mrmZdhMESnSiYlZAGWypm7x/Xcnn4ozwRBDM
bokeh-1.0.2.min.js
MB1CtyBbhwJtEY/90MXLZO+GwCXQX3KqPa9r+3OEw6pi89PjfnqsNLJe1Hybie9O
bokeh-api-1.0.2.js
bokeh-api-1.0.2.min.js
bokeh-gl-1.0.2.js
bPAPq2rhiN1b+3/Te8GXQjKw06sQzN8p5k7UUhlwFSeK2+jCpGA9vEprXCOY3Cil
bokeh-gl-1.0.2.min.js
O7NaHDfUGE9DqNi2Q1of3g0esDzKChOiHMij3G/BMPp7oy81sV/FTdyZwgmdA/+e
bokeh-tables-1.0.2.js
LlkjH+41Fi9A0PPILNheU3AGhZSdq+CDCcHxAl/SYFlwYGIQQSKihy0xNEO9vCNN
bokeh-tables-1.0.2.min.js
MyvfExbfucny8HEqeQQ8KplFXOJ8NUh33k9fQfbJY6HFJEt3CjkNBmKmmCbrD91p
bokeh-widgets-1.0.2.js
4ZkUEpDR4V6T9fgF19LB4Az2Ih3HW6zz25j0f+5VWeF4LsAJSnB+Dt83O0CNLgYe
bokeh-widgets-1.0.2.min.js
1eKqmHJT75Elwy7zfQ4iP2wDDQoZWAnV7aISycekMKnC+qeLsub6ZzMJVQEi25W+
Bokeh Version 1.0.1 (October 2018) is a micro bugfix release.
1.0.1
Small fixes for export_png (#8362, #8374)
export_png
Better cleanup for DocumentLifeCycleHandler (#8367)
DocumentLifeCycleHandler
Fix issue with oval, ellipse legends (#8375)
Recognized CSS rgb(a) strings for colors (#4096)
The SRI Hashes for version 1.0.1 are given in the table below:
bokeh-1.0.1.js
+vfqyEk0+rr8HTfpyCMlOUA9GQrIk+uNRkUDrUk3xGyNqteh8Q7TW1VTdILKFhGL
bokeh-1.0.1.min.js
T4kjnvDzji3k2L8iECnfQhBXZGS6jEosAbkFeXhAQw/NozpEjSOKlKuzXXxRptJZ
bokeh-api-1.0.1.js
bokeh-api-1.0.1.min.js
bokeh-gl-1.0.1.js
bokeh-gl-1.0.1.min.js
bokeh-tables-1.0.1.js
wvhUEr7vbUKClQADIxcMySGeg+Xqxtc20dS5vL0VrpA4/Ij7w2APwIQg5Yu86DrS
bokeh-tables-1.0.1.min.js
ZtUO0KDmCDVXB2bNokYGTdirKQOlGd38Und4LaIN3rFQjAEU70RGnw8lvlorRwn3
bokeh-widgets-1.0.1.js
bokeh-widgets-1.0.1.min.js
Bokeh Version 1.0.0 (October 2018) is a major milestone of the Bokeh project.
1.0.0
Support for MultiPolygons with holes (#2321)
MultiPolygons
Fixes and improvements to DataTable (#6454, #7116, #7417, #8021, #8040, #8050, #8201)
CustomAction for user-defined Toolbar buttons (#8099)
Plain JSON export/embed functions (#5231)
Toolbar autohide property to hide toolbars when not in us(#8284)
autohide
Callback to allow AjaxDataSource to adapt JSON responses (#8321)
AjaxDataSource
Scatter glyph for parameterizable marker type (#5884)
Scatter
Reuse webdrivers for faster PNG/SVG export by default (#8329)
Improved testing capabilities (#2596, #8078, #8139, #8146, #8217, #8225)
Faster import times (#8309)
Previous versions of Bokeh mistakenly had code paths that could replace data source Selection objects with entirely new instances. This was a mistake, and resulted in several regressions and other problems. Unfortunately, the problem persisted for a few releases, and now that the situation has been fixed, it will require some code changes for some users to adapt to correct usage.
Selection
In general, you should NOT ever listen for a change of selections objects themselves, i.e. do not do this (anymore):
source.on_change('selected', callback) # BAD, DON'T DO THIS
Instead, you should listen for changes to the individual properties that are on Selection objects. For instance, to execute a callback when the indices on a selection change, (e.g. when a selection is made on a scatter plot), do this:
indices
source.selected.on_change('indices', callback) # GOOD
Any code that looks like the first version above should be updated to use the second version. This applies to both Python or JavaScript callbacks for selections.
While this breaking incompatibility is regretable, there are now much more extensive integration tests in place to maintain that the second version will always function as expected from now on.
“Pillow>=4.0” has been added to the list of Bokeh runtime dependencies.
The following examples have been removed or updated:
app/pivot: This large example was unfocused and unmaintained and has been removed
embed/simple: Old example removed
howto/us_marriages_divorces: Redundant notebook removed, script moved to plotting/file/us_marriages_divorces_hover.py
models/file/colorspec.py Old example removed
models/file/external_resources.py Moved to latex_extension.py
models/file/glyph1.py Moved to basic_plot.py
models/file/grid.py Old example removed
models/file/line.py Old example removed
models/file/transform_jitter_coffee.py Discouraged coffeescript example removed
plotting/file/bar_chart.py Removed old/duplicative example
plotting/file/brewer.py: Moved to stacked_area.py
plotting/file/bollinger.py Old example removed
plotting/file/joyplot.py Moved to ridgeplot.py
The pprint and pretty methods depended on IPython pretty-printing in order to function. Recent changes to IPython pretty-printing machinery made it impossible to use unless the “pretty” repr was also enabled. This caused ipython console to be spammed with very large amounts of output, making it unusable. As a result, both pprint and pretty methods have been removed. A “pretty” HTML repr still functions in Jupyter notebooks. This change is not expected to affect any normal usage.
pprint
pretty
Previously Bokeh generated unique UUIDs for every Bokeh object. Starting with this release, Bokeh generates simple increasing integer IDs by default. You can set the environment variable BOKEH_SIMPLE_IDS=no to restore the previous behavior. The generation of simple IDs is faster than UUIDs, otherwise this change is not expected to affect any normal usage. However, if you are creating Bokeh objects for a single Document in separate processes, i.e. by using the multiprocessing module, then you will want to turn off simple IDs. (This is expected to be a rare and unusual usage.)
BOKEH_SIMPLE_IDS=no
multiprocessing
bokeh.util.plot_utils
The bokeh.util.plot_utils module has been removed. This module contained only private functions used internally. This change is not expected to affect any normal usage.
bokeh.server.application_context
The bokeh.server.application_context module has been renamed to bokeh.server.contexts. This change is not expected to affect any normal usage.
bokeh.server.contexts
arguments
server_session
The server_session function accepted an arguments parameter that did not (and could not) have any actual effect. It has been removed, immediately. Since the parameter did not function, it is not expected that this change will affect any normal usage.
The Pytest “quality” mark has been changed to “codebase”. Now to run the codebase tests, execute py.test -m codebase. If you have installed a pre-commit hook to run quality tests before allowing a commit, the hook code should be updated as above. This change is only expected to affect those who are developing the Bokeh codebase.
py.test -m codebase
The SRI Hashes for version 1.0.0 are given in the table below:
bokeh-1.0.0.js
dgnXExOXGWxH08AryR1aD6AtA47+5PcSJai5zsfP76h/bqwPcEgM/m9X7aa+zKgM
bokeh-1.0.0.min.js
9OgUNL9b8g0W/aXZ1jh605glxu3r3i1NISZQTkNTwDg23Yb5eCjEiYyCrGwG+vLp
bokeh-api-1.0.0.js
bokeh-api-1.0.0.min.js
bokeh-gl-1.0.0.js
bokeh-gl-1.0.0.min.js
bokeh-tables-1.0.0.js
bokeh-tables-1.0.0.min.js
bokeh-widgets-1.0.0.js
xFmJzLc/1pRxm0E8+HIT0nF4IZPi7H0Z74/qlhIcoKgkJ20JX6dz13LLHc24E0fq
bokeh-widgets-1.0.0.min.js
Bokeh Version 0.13.0 (June 2018) is an incremental update that adds a few new features and fixes several bugs. Some of the highlights include:
0.13.0
Improved hover tool fields for common stacked bar plot cases
New CumSum transform to generate values from cumulative sums of CDS columns on the client side.
CumSum
NOTE: the 0.13.x series is a final series of small releases leading to a 1.0 release. For more information see the project roadmap.
A new command line option --websocket-max-message-size for the Bokeh server can be used to configure the Tornado websocket_max_message_size option. The default value is now 20mb, an increase from the previous 10mb implicit default.
--websocket-max-message-size
websocket_max_message_size
Two new hover tooltip fields are now available:
$name will preint the value of the name property of a glyph that is being hovered over.
$name
name
@$name will look up values from a column like a normal @ field, but will use $name as the name of the column.
@$name
@
Both of these are espeically useful in conjunction with stacked bar plots.
The gulp tool was previously used as the build system for BokehJS. This has been replaced with a smaller and simpler build script. This greatly reduced the number of dependencies required to build BokehJS and a completely clean NPM package security audit was obtained as a side effect.
gulp
To build now, run the commandf node make build instead of gulp build. Task names remained unchanged. If you want preserve the old workflow, e.g. to aid git bisect, it is suggested to create an alias for node make, e.g. in bash this would be alias gulp='node make'.
node make build
gulp build
git bisect
node make
alias gulp='node make'
The default line_join style has been changed from miter to bevel, to avoid exaggerating corners where connected lines meet at a sharp angle. The HTML Canvas miterLimit property is meant to prevent such issues, but it does not appear to be respected by current browsers.
line_join
miter
bevel
miterLimit
The SRI Hashes for version 0.13.0 are given in the table below:
bokeh-0.13.0.js
d+rVu1K3XCR/ZdOPn7ZHoAA0I3ezdpq6N1YfmEaDMMUaWoJsY10eprZ/FOA92hjx
bokeh-0.13.0.min.js
TctwjLNha0jCG96wYS7g73qxB7IQHyg9KYFrWGY1vDkUpucOUasaQhAImJ5HRJ3L
bokeh-api-0.13.0.js
yBTGPxaZRNWr3KhgXTR2e6ZYzhC6gjAEoWeEk8LrQbEgDmTNO8M3DGzB9zHCzd9r
bokeh-api-0.13.0.min.js
gOGPVkgRN5HbyNQbJuMHtM0yGG3qVVOosjMlw5tr/q7EZPu3+CqJsLXqF6pDns2K
bokeh-gl-0.13.0.js
DmLpK8wP+7n6Wd6P5VmYbLuIpop0hovo+Gbf+6ey3sHyqtGNFypDdEB4uWN5gIg2
bokeh-gl-0.13.0.min.js
EqrBsPyrwdORn+1tmeiAJt5sIdf7wS3u5hFVxFm/vcw+ynSWlInYsa0b36zPdBQM
bokeh-tables-0.13.0.js
dqrzFiNxCBqxwdiZ4WX1Z68GVE/o2/g0JIwkMrAnqHqAn90rVvS6DSwRKWD1dR9z
bokeh-tables-0.13.0.min.js
aTnhJtmqMsvvwC6mLPaey29fuGhILoxAVUBTj3S4K2QTGopKqUDYiTeduzNa49Cv
bokeh-widgets-0.13.0.js
d28uRolgKdZpW5/N4C1OvPFF1pucs77WNiQc5hW/5oUaLGPHSUvkaNtg++v2iTEM
bokeh-widgets-0.13.0.min.js
kG1FeiKKz0KSugJ5HW9ZreL5DpBY2s2U5IIyrgb4gp9IOEmkegiJxvcKm3BecxIQ
Bokeh Version 0.12.16 (May 2018) is an incremental update that adds a few new features and fixes several bugs. Some of the highlights include:
0.12.16
Hover tools now work with image glyphs (#3886)
BokehJS exposes a public reset method for Plots (#5071)
reset
Categorical tick labels at all levels may be rotates (:bokeh-issue`7643`)
New CustomJSHover for highly customized tooltip fields (#7647)
CustomJSHover
Axes may now have fixed positions inside plots (#113)
Small zoom tool enhancements (#3126, #3125, #2427)
MultiLine and Patches now function with categorical ranges (#7462)
MultiLine
Patches
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 following functions, arguments, or features have were previously deprecated with warnings and instructions for new usage, and have now been permanently removed:
--host argument to bokeh serve
--host
bokeh serve
responsive argument to plots and layout functions
responsive
Plot.toolbar_sticky property
Plot.toolbar_sticky
Tool.plot property
Tool.plot
bokeh.sampledata.population.load_population function
bokeh.sampledata.population.load_population
bokeh.util.notebook module
bokeh.util.notebook
To support publishing all release information on one page, the bokeh_index_toctree module and contents have been immediately moved to bokeh_releases. Since this facility had no use outside building official Bokeh documentation, no deprecation was given.
bokeh_index_toctree
bokeh_releases
column_names
ColumnDataSource models had a Bokeh property column_names for specifying the list of column names in source.data. This information was duplicative and had to be explicitly maintained in a fragile way. It has been replaced by read-only properties in both Python and JavaScript that always accurately report the current column names automatically. Setting column_names is no longer supported, however as this possibility has never been officially documented or demonstrated, it is not expected to affect any standard usage.
ColumnDataSource
renderers
Previously the default value, an empty list, corresponded to automatically choosing all available renderers for hit testing. Now, a new default value "auto" is used for that, so that an empty list can mean “hit test no renderers”. A value of None may also be used to indicate no hit testing should occur. Since there is typically no reason to explicitly set a property to its default value, it is not expected that this change impacts any standard usage.
"auto"
None
To finalize the rewrite of bokehjs in TypeScript, the source directory was renamed from src/coffee to src/lib. This change affects only bokehjs’ contributors or other advanced users (e.g. when repackaging bokehjs with Webpack or other JavaScript module bundler).
src/coffee
src/lib
BOKEH_DOCS_MISSING_API_KEY_OK
This environment variable is no longer used by Bokeh. Previously, the bokeh.sphinxext plot directive would always fail by default if a GOOGLE_API_KEY environment variable was not defined, and this environment variable could be set to override that default behavior. Now, builds will succeed by default, even witout a Google API key defined (but Google Maps plots will not fully render). To require an API be defined (i.e. to restore the previous behavior) you can now set bokeh_missing_google_api_key_ok = False in the Sphinx config file.
GOOGLE_API_KEY
bokeh_missing_google_api_key_ok = False
The SRI Hashes for version 0.12.16 are given in the table below:
bokeh-0.12.16.js
dIFtDoU0Gm60Zqy6863ATv2UxMK1Z68uAsQQhP96zPalDuA4G/gtmFtF0i2KAs7R
bokeh-0.12.16.min.js
skhu9SjKVjzk+4dGfSQsZBbttYwscaKdqm5zTu/0vKjh1sqEOhyenq82aatBzQG1
bokeh-api-0.12.16.js
o44K1BG1zUDRF02p1JW6lYaXJW/+B13omtKKVR6YLbQzsKkzJCztfApKwINtGAtm
bokeh-api-0.12.16.min.js
p8L4w1zNjV3sAq9zUWDVPLtcRYj2GOLJeQtLzw4HGS3FKieHTmk/KNxqu7Cq4xJg
bokeh-gl-0.12.16.js
R5d3XVPFCkFHeln9JCkOftuazxXC8vgLc4ScfqC0uCykZODwcgtXVCOCfNjzJ3NK
bokeh-gl-0.12.16.min.js
3hp390fmwlG8lmAXUZCQJNsv/BcMRHS0E+o5IC3SKGmwNxi+Sf4tJHm0PJVUU2Xl
bokeh-tables-0.12.16.js
ofP6yEEGFDN3V6FcfQzTHW9yFTjU+j0JvqIVuL7G8CpxiMBwpJc+ycQHS0T7zWGK
bokeh-tables-0.12.16.min.js
+DoUaLfYcM/+8vudGpErcuwIGmgYwEqa26tcn804/lBxeyt2W0mqOZ5a7Sitx35a
bokeh-widgets-0.12.16.js
LHtDzyc6GgwWl5FcaC1qNDga4Sq0TxuBRhGvLx08+Yk5+gD1h5GHisYKjiMxbdk3
bokeh-widgets-0.12.16.min.js
XkUKi9c932iyQN0/8AjVlGKhlQbCu3HMV9IcU1+nEMnhGAfeQV3TO91NRgI2gie8
Bokeh Version 0.12.15 (Mar 2018) is an incremental update that adds a few important features and fixes several bugs. Some of the highlights include:
0.12.15
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)
hexbin
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.
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).
DataTable.row_header
index_position
Additionally, new properties index_header and index_width are now available to further customize the index column appearance.
index_header
index_width
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:
source.selected
.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.
image_indices
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, programmatically setting selections must now go through the mode properties, i.e. .indices, .line_indices, etc.
selected['1d'].indicies
.indices
.line_indices
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 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.
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 doc.add_next_tick_callback(my_cb) doc.remove_next_tick_callback(my_cb) # Now cb_id = doc.add_next_tick_callback(my_cb) doc.remove_next_tick_callback(cb_id)
The bokeh.sphinxext Sphinx extension has been updated to work with currnt versions. Sphinx >= 1.6 is now required to use the extension.
The SRI Hashes for version 0.12.15 are given in the table below:
bokeh-0.12.15.js
/RWwyAMgtd7Z9m1FL/phsJYdlkH9TJgHV7hkN5TqDeksXr6R+iBhcLLw9xL/aMP9
bokeh-0.12.15.min.js
xtaZ4F+LfKS8HjWmdwg1a9yDhyLvv6a6SOaljlPiojPMSPrmt6EXni2YiafWwzBP
bokeh-api-0.12.15.js
MBN14ShOfqTydJ/0muUkkqJEWM3e4BPVKnQ68CBDyEbwOKi12kw41tq4/6g8fdub
bokeh-api-0.12.15.min.js
toEk4yKM9q5NZ8rzgaQatEr+lLhbKtIisLHIW4xKdpbninMQY1z3NS1VKVG+ZwXH
bokeh-gl-0.12.15.js
QCDqHfurOIDCtsispU4LI5bM+ur4IExTJ8hSF8xVm8Z0oEZICsya/CjRLNwy1X7l
bokeh-gl-0.12.15.min.js
DTIGNryy32pP+YqoT2jyivB4TBYYzVBnY8Ilu3/WIhlFrcbzArLPCMDuNGqNCLpT
bokeh-tables-0.12.15.js
e63xpSRoogqktZZ8uocsfOt0QC8zIwKXozxLQk/HOrVmOual2rYfG9l8Fm4/C8XW
bokeh-tables-0.12.15.min.js
4D3hp7UNjBh+pFC/ezCVFUvBGokeJBrbL8DaPh8dTnnmHAyZ9RZva2tnBNs6KyGT
bokeh-widgets-0.12.15.js
xBsplPUCSGWV4R2lLvLdtyVcUusq/+sEbgVYUD3u9LrzBRkEYBNEIN3Sdxz4nvHv
bokeh-widgets-0.12.15.min.js
j2jiGPDYDadudwANUFcoK8e+WPMVtL72ww8uCsOrUimYbzDUR0ovLnl+2m1Egn/4
Bokeh Version 0.12.14 (Feb 2018) is an incremental update that adds a few important features and fixes several bugs. Some of the highlights include:
0.12.14
Addition of several tools to draw and edit point, rect, multi-line and patches glyphs (#6370) by modifying the underlying ColumnDataSource.
The following deprecated features have been removed in this release:
DynamicImageRenderer (consider GeoViews instead)
BokehJS support for *.tsx templates (not typically user-facing)
autoload_server (use server_document or server_session instead)
The package packaging, available via both conda and pip, was added as a new runtime dependency.
packaging
Previously, data (e.g in a CDS column) referring to a categorical factor that did not exist in the relevant FactorRange, would cause an error in the browser. Now, any such attempted mappings will silently return NaN. Any data points with these factors as coordinates will not render.
FactorRange
NaN
The practical motivation for this change is that updating a FactorRange to have a new set of factors could result in an inconsistency triggering the error condition, causing plots to fail to render. With this change, the use-case of updating factor ranges should work more smoothly, however there will be no immediate indication of problems in case “bad” factors are included accidentally in data other than the data points not being rendered.
Previously Text Glyphs added to legends would always unconditionally render the word “text” as the visual symbol, which was not useful. Now, text glyphs render an empty space in legends. This is helpful when it is desired to use an interactive legend mute or hide both a primary glyph, as well as some associated text that goes with it. For more discssion, see #7337.
MercatorTileSource models previously snapped to the closest zoom level resulting in user supplied axis ranges to be largely ignored. The default behavior has now been changed from snapping to the closest zoom level to simply maintaining the correct aspect ratio, while keeping the user defined bounds contained within the axis ranges.
The old behavior may be restored by setting enabling the snap_to_zoom property.
This was previously done through MyView.prototype.className, which didn’t respect class structure, so it was often necessary to duplicate CSS rules in sub-views. The new approach is to override css_classes() method, e.g.:
class MyView extends MyOtherView { css_classes() { return super.css_classes().concat("my-view") } }
This change affects only creators of custom extensions.
HasProps.initialize()
Previously HasProps.initialize() took attrs and options as its arguments. This was nearly never used and so it was removed. The preferred way to configure values of attributes is to use bokehjs’ properties system. This change affects only creators of custom extensions.
The SRI Hashes for version 0.12.14 are given in the table below:
bokeh-0.12.14.js
AdyVAARU6V8NHqeE07dAta6mnteTdD2z6jS9jZHLHsFM1ittJzgpBvmS6QblI21K
bokeh-0.12.14.min.js
mg41Bnny+gFV5+1veejJ4HMw/ySqdL5RuMA92GbeXjIUPX7s4twC5iObeVMqwwub
bokeh-api-0.12.14.js
fEFoAv/9+ERt1KRIfsMFst21yLlhdSIlGqL6Ou5q8NV7yQXkZyYd60xRIiEpoyMQ
bokeh-api-0.12.14.min.js
ke94TPgbPD4VJZxScmszu1C6BQ6fX0NZ6WtG3ks/tMoqooqKWcaMQdWFx5UpxtLF
bokeh-gl-0.12.14.js
jBnzkuaH+FMUpQjRr0CUhmVfvmY+enILE+cUyEsDx2FnCVqNaG6mzvZTUOZGoiBK
bokeh-gl-0.12.14.min.js
kevbn0vAxbaOnSxLaqREN9ti1gFA7qkFckq3fQkfOxpfrNkl/lduadyMz2W4AGGn
bokeh-tables-0.12.14.js
xqIYzAUVqRMGI4NxYES6A0XvBBYeBupSC07EywmaIEZ+fFg/cwHZpsNEnv0daDhD
bokeh-tables-0.12.14.min.js
efZSbA9ELN7x3dlbwa2KqGs6i6Sx0evaPWGmYxa16zaWvUVevjulhlm7eJsgYrzq
bokeh-widgets-0.12.14.js
OBrYBXTgPlm2FtyKyR1sTgT3FdDwitnzgJigWt3cFdhovT2011F/OPl+6kg311xI
bokeh-widgets-0.12.14.min.js
PkcQt2vvCHJbuyOCfJxBoEQcdPk/+MyMyUsCzWXFWE20BNyUANOZERRo+wH1UiNf
Bokeh Version 0.12.13 (Dec 2017) is a targeted bugfix release that addresses two issues:
0.12.13
push_notebook regression in 0.12.11
push_notebook
0.12.11
Windows package install failures due to reserved “aux” filename
BokehJS doesn’t require custom styles to make “responsive” layout modes work anymore. This means that there are no additional styles added a page, like margins. This results in margins working differently and now default to browser defaults. If you want to restore the previous behavior, then add the following to your HTML:
<style> html { width: 100%; height: 100%; } body { width: 90%; height: 100%; margin: auto; } </style>
The SRI Hashes for version 0.12.13 are given in the table below:
bokeh-0.12.13.js
WiiDNdFObp+2mosxfMxtLlAKb4mPRILKkme1FsxTEGp/3dNYLiR9PCjm64c306FF
bokeh-0.12.13.min.js
sRHzMiYSxnSVtIDNmGrWigYi+CSIZ8sZX8zf79whDzHF0zUvtiACSjdggeh2N7jD
bokeh-api-0.12.13.js
uLz7eJguKT/X1Dn2caguvQaL/Moloh3RiGOhPaOAFUr8cFc4Ulv/12UcOknurxAQ
bokeh-api-0.12.13.min.js
RPODqsF9evKgTcL8svvXXnt7wgOSGc/6PAhwwJomZPzNSoJo9fnFI9hZ9UK4Nw2U
bokeh-gl-0.12.13.js
V/Fvnsm8hR7l4aQb/Jqw1HOV++fYSNyg5S6LRQpYVBetBcKrIQ181LhbI3nJeG27
bokeh-gl-0.12.13.min.js
LlPhjRYBT7z3ihubfj4RfyB8qwjZGKuUxKcxxfH6kGm6Lcy1uIni3tLxDX9L8ulB
bokeh-tables-0.12.13.js
ZpGmJZBNCazirAsE0bgMKctxCO/61Msd+eGd/4Up7LKZmq1hvubMdJ5W/EgRy4wd
bokeh-tables-0.12.13.min.js
q1ovPpOfXy4WQuA3X/Qrr/BOiol1HhdChYGUwHdcFStNaU/8UiX/9Q0HSdyVBzJW
bokeh-widgets-0.12.13.js
LyaGfb/ckePVYZsm+U8Q1IVYRlXVgQ3ySiT0eNPqGWj3veUByo9Mr8xWmnIYHZrx
bokeh-widgets-0.12.13.min.js
tNHkmh8tKOxLIS37l43VBxjTJaELDb7P7olitqFdEYB27ghsIxi5dIS6S29tXMvy
Bokeh Version 0.12.11 (Nov 2017) is an incremental update that adds a few important features and fixes several bugs. Some of the highlights include:
Step glyph for step lines added (#3644)
Step
Level-of-Detail works with linked plots (#5937)
Bokeh applications in notebooks made simpler to create (#6565)
To help with the eventual migration to TypeScript, we have switched to the new CoffeeScript compiler. This should be completely transparent to standard users but custom extensions may need small changes in some specific cases, for example, the “Ion Range Slider” required the following change:
- onChange: @slide, - onFinish: @slidestop + onChange: (data) => @slide(data), + onFinish: (data) => @slidestop(data),
Shorthand initialization syntax for Range1d(start, end) in bokehjs was removed due to technical difficulties. Use full new Range1d({start, end}) syntax instead. The short syntax may be restored at some point as a part of bokeh-api package.
The coordinate system of canvas layout and related infrastructure (positioning, hit testing, etc.) is new “screen”, where the origin is left-top corner of the canvas. This change shouldn’t affect users, however it affects custom model developers. Follow updated examples for new development patterns.
The SRI Hashes for version 0.12.11 are given in the table below:
bokeh-0.12.11.js
g+//0Yv3lMEbkwayzw3Z44zhbq3SBKEgeTwJxXAwN5rTsjEglILDhTcFM6FBp+As
bokeh-0.12.11.min.js
QNG9B1tLDDmAtBzO9wxnUvluDn94GvQSxq28PipAQkA3S7yPE9mmXNX/Abgv6qmV
bokeh-api-0.12.11.js
CrzA8KP1hsLa/P+aRghVEUyiCB9cAeYTM82Gg91cD+QuHuSobCrqD1nxS64/N25o
bokeh-api-0.12.11.min.js
3R4xfaAzCpSJe+OyLtWgsJN8gjJMI1iQUYCao6WWWrq62R/Yf1r1RTXNAO/LlAdX
bokeh-gl-0.12.11.js
UwkrQ3NHCv94BKLQ6yOIvvxaEyN+mJQY7DpoQrdnT5fwzMbs4tQB0+Fbr9MUShYA
bokeh-gl-0.12.11.min.js
E1QPTpn28v7Kl7vRZHnjzQ3MsUhXNRAb1E6/g5mfYfBZAJc2Yn34rbz7pXetByfN
bokeh-tables-0.12.11.js
ypzPP4AZrbGcJQZAlgfeBiSQxpWhDEDc2uRPdHWXhlwDETLswykpfH0sBHBgOaAb
bokeh-tables-0.12.11.min.js
qEdoiWJ9j8yGx5xQEBrGZgKfw2ea/YFM5ccpCogIUgF/pukfFPa7ym31jd3tDEx9
bokeh-widgets-0.12.11.js
S9DSeytH1Sq4eFs8qpSU7bPStYuNs+AJVqBFeTXzavGktOQ0EH38+Fc/2r1CDN3/
bokeh-widgets-0.12.11.min.js
cV/lFoAZmOyZVKCLM4UpkUkNpF9WBv6hr+zH5JR/kV6WzIEUKhSvpXotyUgJdGES
Bokeh Version 0.12.10 (Oct 2017) is an incremental update that adds a few important features and fixes several bugs. For full details see the CHANGELOG.
0.12.10
The following previous deprecations have been removed:
app_path from functions in bokeh.client.session and bokeh.embed
app_path
bokeh.client.session
bokeh.embed
standalone_html_page_for_models from bokeh.embed
standalone_html_page_for_models
'patch' and 'stream' event names (use 'patching' and 'streaming')
'patch'
'stream'
'patching'
'streaming'
webgl, x_mapper_type, y_mapper_type, and tool_events from Plot
webgl
x_mapper_type
y_mapper_type
tool_events
Plot
Glyphs methods now only accept either all sequence literals, OR all column names
ResizeTool (previously made a no-op) has been removed
ResizeTool
The boolean responsive parameter to Figure and bokeh.layouts has been deprecated. The sizing_mode enum should be used instead. Use sizing_mode='fixed' for responsive=False and sizing_mode='scale_width' for responsive=True instead.
Figure
bokeh.layouts
sizing_mode
sizing_mode='fixed'
responsive=False
sizing_mode='scale_width'
responsive=True
The function bokeh.sampledata.population.load_population has been deprecated. Use the attribute bokeh.sampledata.population.data instead.
bokeh.sampledata.population.data
The module bokeh.util.notebook has been deprecated. The functions it contains have been moved to bokeh.io.notebook.
bokeh.io.notebook
The function bokeh.io.set_curdoc is now bokeh.io.doc.set_curdoc.
bokeh.io.set_curdoc
bokeh.io.doc.set_curdoc
Named color objects now live in bokeh.colors.named instead of directly in bokeh.colors. Additionally color utilities such as NamedColor have been moved inside the package, and marked as internal API. Using string names for colors works exactly as before.
bokeh.colors.named
bokeh.colors
NamedColor
The following unused code was removed immediately:
Aggregation from bokeh.core.enums
Aggregation
bokeh.core.enums
PyPy detection functions from bokeh.util
bokeh.util
Zeppelin related code (support should come from external notebook hook)
Additionally the attribute bokeh.__base_version__ was removed. Computing it at all times made importing Bokeh take substantial fractions of a second longer than necessary. It is not expected this change should affect any users, but if you need this value, the bokeh.util.version.base_version function can be used.
bokeh.__base_version__
bokeh.util.version.base_version
The SRI Hashes for version 0.12.10 are given in the table below:
bokeh-0.12.10.js
24wuUvIkgTRYjPpWrlbL2KkpW52OlZt+lX7WmkT0BRnPwVNYEvnnHBXAk2F5dh+7
bokeh-0.12.10.min.js
sYWviIk219FMUK8WxRnX+yEc8Wh0RBgHHVgCvARgVcf++ozUcOBgr55ffjlAPTZ+
bokeh-api-0.12.10.js
ujNI1r/KZ0el9vh1i9UzIgMnMOH996wNEhPbWySADVHW/AXQSQCp8374VsQfF6Vi
bokeh-api-0.12.10.min.js
LYP0vjORYFss0F7QlSV8BYwoJBF0h51bv60HCrx2WnScyabAQuf5RACDAOV89StY
bokeh-gl-0.12.10.js
PoU5iMsELEPXVdJXuhg02JIUF4xWx+O4oMF6EJYhAQq5fkUt4eEcr7RWBZi0ymuE
bokeh-gl-0.12.10.min.js
AX9eB59qOq2p1GUEEnnk4WR1Ythz8OrJ1ffSoJ7qqhmzasfbXq4apd37oN1NpLik
bokeh-tables-0.12.10.js
UvYMTvlSHvcMX+WVeE+DSE74YRbsGh8yjG4gTCK2tKp/mS6kwAgnbNZwW1761vhd
bokeh-tables-0.12.10.min.js
Y5luBmCdqiDH/voB/OpykrY2YkFClZ8C/9+1K7HC8jzKIq2gByw3hX8a5UP3cr0v
bokeh-widgets-0.12.10.js
J7whk4Paq3Rzbn1JzyrNRd/QoV05IeGE6xcd6/Fb9oCnFySfkt6/HGo5G1RX1nUm
bokeh-widgets-0.12.10.min.js
s1mZ52KNDpeyMK7UwHgraqkCwUfcNTSyCKmL3ac3A9tvXTsUiPVqSc68lu8xi8SX
Bokeh Version 0.12.9 (Sep 2017) is an incremental update that adds a few important features and fixes several bugs. Some of the highlights include:
0.12.9
JupyterLab integration with the jupyterlab_bokeh extension
Efficient binary transport for sending arrays to clients
Improvements to new Graph/Network capability
bokeh.charts
The bokeh.charts module, which was simply a compatibility shim to load the separate bkcharts package, has been removed. Additionally, Bokeh itself no longer lists bkcharts as a dependency. In order to continue using bkcharts code, the bkcharts package must be installed separately.
bkcharts
The bokeh.mpl module and all supporting code in bokeh.core.compat has been removed. Bokeh no longer offers or attempts any automatic MPL conversion.
bokeh.mpl
bokeh.core.compat
A regression in 0.12.7 caused the DateFormatter to stop functioning. The problem has been fixed, however instead of the previously accepted JQuery style formats, the``format`` property now only accepts
0.12.7
DateFormatter
standard strftime format strings (making it consistent with DatetimeTickFormatter)
DatetimeTickFormatter
any of the following additional predefined formats names:
Format name(s)
Format string
Example Output
ATOM / W3C / RFC-3339 / ISO-8601
ATOM
W3C
RFC-3339
ISO-8601
"%Y-%m-%d"
2014-03-01
COOKIE
"%a, %d %b %Y"
Sat, 01 Mar 2014
RFC-850
"%A, %d-%b-%y"
Saturday, 01-Mar-14
RFC-1123 / RFC-2822
RFC-1123
RFC-2822
"%a, %e %b %Y"
Sat, 1 Mar 2014
RSS / RFC-822 / RFC-1036
RSS
RFC-822
RFC-1036
"%a, %e %b %y"
Sat, 1 Mar 14
TIMESTAMP
(ms since epoch)
1393632000000
Note that the previously available format name TICKS is no longer supported.
TICKS
The functions bokeh.test and bokeh.util.testing.runtests have been removed immediately. Tests should be run as described in the testing section of the Developer’s Guide.
bokeh.test
bokeh.util.testing.runtests
The function bokeh.util.testing.print_versions has been removed immediately. The bokeh info command (or python -m bokeh info) should be used instead.
bokeh.util.testing.print_versions
bokeh info
python -m bokeh info
bokeh.document
The bokeh.client and bokeh.document packages were refactored, to make maintenance and testing simpler, and to improve overall code quality. No commonly used or demonstrated public APIs were affected, (no example code required any changes). The other files that were moved or changed are not expected to impact user code.
Starting with this release, Bokeh is no longer continuously tested against Python 3.4. Use of Bokeh with Python 3.4 will very likely still work, but there are no longer any guarantees backed by CI testing.
The SRI Hashes for version 0.12.9 are given in the table below:
bokeh-0.12.9.js
2n1fTKfEG8NK5eOl/uzz5WRMeBY0IcbbAPRSQl4TAmJSm+oozLKy5mytGXt/LqIg
bokeh-0.12.9.min.js
I518tTmFoEsiziyEXx6KlEya05UciIqD/pI4x9QMsTtRJFP4/qKRTgIEaqfxdB8u
bokeh-api-0.12.9.js
bokeh-api-0.12.9.min.js
bokeh-gl-0.12.9.js
bokeh-gl-0.12.9.min.js
bokeh-tables-0.12.9.js
4at7SGvhXY2VhFe4ZARxFWhIbzSzXfAV68lCat/l7rl0jsqX7VFUAWVCXFxVMMAb
bokeh-tables-0.12.9.min.js
pEnsftOgAy6mKfcHRYQzkJGOD2vJUA4FA98bHr3OJB8Kv44I2xBg4Zp2zCGJTFFL
bokeh-widgets-0.12.9.js
LqD/CiBCC2xzX8apdwyTu8Ruq5Fdssk/yFBqAwZFEZ9ntLruKbaTpqvMEZZE8pBW
bokeh-widgets-0.12.9.min.js
wLFPxWauAhKbpqxsaO0BWG+zw7IVcUDHMQ0NDNOx8rQ6W/3bk1Gztl49IlFsS8GB
Bokeh Version 0.12.7 (Aug 2017) is an incremental update that adds a few important features and fixes several bugs. Some of the highlights include:
Support graphs/trees/networks (#187) including configurable and extendable policies for highlighting and selection.
Filterable/Sliceable CDS views (#4070)
Pass HTTP request args to embedded sessions (#5992)
New Expression models for client-side computations, including Stack, for stacking CDS columns.
Expression
Stack
New module bokeh.transform with helper functions for simplifying DataSpec expressions, including jitter(), dodge(), factor_cmap(), etc.
DataSpec
jitter()
dodge()
factor_cmap()
Added hbar_stack() and vbar_stack() to greatly simplify creation of stacked bar charts.
hbar_stack()
vbar_stack()
Improvements for using Bokeh with Categorical data:
Support multi-level categories and hierarchical axes
Arbitrary limits on category names (e.g. no ':') have been lifted
':'
Optional Pandas integration creates CDS from directly from GroupBy objects
GroupBy
Categorical Bar, Heatmap and Scatter plots easier to create with stable bokeh.plotting APIs
New User’s Guide chapter Handling Categorical Data
Bokeh support for Categorical data has needed attention for some time. The release brings improvements that dramatically improve the user experience when using categorical data with Bokeh. For details and examples, see the new User’s Guide chapter Handling Categorical Data.
At this point we endeavor to minimize breakage, and to provide managed deprecation cycles when things must change. However, in this instance, some minor immediate breaking changes were unavoidable:
min_interval and max_interval on FactorRange are now given in synthetic coordinate units.
min_interval
max_interval
bounds on FactorRange are now given in synthetic coordinate units.
bounds
Two new embed functions similar to autoload_server are added, that have simpler APIs and are more focused:
autoload_server
bokeh.embed.server_document() for embedding new sessions for entire Bokeh documents in HTML pages. (More common)
bokeh.embed.server_document()
bokeh.embed.server_session() for embedding existing sessions for specified Bokeh models in HTML pages (Less common)
bokeh.embed.server_session()
Additionally, with these new methods one may choose to not load the JS/CSS resource files by passing resources="none" as a parameter.
resources="none"
The following previously deprecated modules or features have been removed:
bokeh.icons module
bokeh.icons
Legacy anchor and legend locations left_center and right_center
left_center
right_center
ImageRGBA.rows and ImageRGBA.cols properties
ImageRGBA.rows
ImageRGBA.cols
HBox and VBox in bokeh.layouts
HBox
VBox
validate keyword argument for bokeh.io.save
validate
bokeh.io.save
bokeh.embed.autoload_server has been deprecated and replaced with the two simpler functions server_document() and server_session() described above.
bokeh.embed.autoload_server
server_document()
server_session()
bokeh.models.tools.tool_events has been deprecated. Users should instead use the SelectionGeometry event present on Plot or Figure.
bokeh.models.tools.tool_events
SelectionGeometry
DynamicImageRenderer and Plot.add_dyanamic_image have been deprecated. For GIS-related use-cases built on top of Bokeh, consider using GeoViews, or creating a Custom Extension.
DynamicImageRenderer
Plot.add_dyanamic_image
ResizeTool is deprecated and also immediately is a NO-OP on the Python side. ResizeTool has been removed from BokehJS entirely.
The bokeh-widgets bundle was split into bokeh-widgets and bokeh-tables. This is to reduce the weight of the main widgets’ bundle. Bokeh includes bokeh-tables automatically when necessary, so this change should be transparent for most users. However, users of custom templates or other advanced embedding scenarios (including the use of components) may be affected. In short, if your application is responsible for loading Bokeh resources, then it should take care of loading the bokeh-tables as well.
bokeh-widgets
bokeh-tables
components
The TapTool strayed from usual callback calling convention by passing a glyph data source as cb_obj. This has been rectified, and now the tool follows the usual convetion: the tool itself is passed as cb_obj and the data source is passed as part of the optional cb_data. Existing usage of OpenURL is unaffected by this change, but any CustomJS callbacks used with the tap tool will need to be updated to reflect this change.
cb_obj
cb_data
The DataTable now responds to the signal source.change.emit(), instead of source.properties.selected.change.emit(), to visually highlight the rows in the DataTable that are part of the selection. If you have used source.properties.selected.change.emit() in CustomJS code, you will need to change it to source.change.emit().
source.change.emit()
source.properties.selected.change.emit()
The DataTable responds automatically to changes in its data source’s selected property. However, because of Bokeh’s change detection machinery, only a replacement of the selected property causes a change signal to be emitted, and not a partial update (e.g. source.selected['1d']['indices'] = [1, 2]). If you use a partial update in CustomJS code, you will need to emit the change signal yourself:
selected
source.selected['1d']['indices'] = [1, 2]
customjs = CustomJS(args=dict(source=source), code=""" source['selected']['1d'].indices = [1, 2] source.change.emit(); """)
bokeh.server
The bokeh.server module was refactored in order to be easier to document and maintain, as well as simpler for user’s to use in more sophisticated use cases. These changes are not expected to impact standard usage of Bokeh in any way:
All protocol-related code was moved to a new module bokeh.protocol
The Server class was split into Server (no API changes) and a new BaseServer that can be used when explicit coordination of low level Tornado components is required.
Server
BaseServer
Missing sections added to reference guide, and docsctring coverage greatly expanded.
Old cruft code to handle Tornado < 4.3 (which is no longer supported) was removed.
The SRI Hashes for version 0.12.7 are given in the table below:
bokeh-0.12.7.js
/ld0KP07pf7lZc55FlwoLl9lk7CNTc1mPZJvU3PwQw7CWthXWVxbrgAVuAY70X8/
bokeh-0.12.7.min.js
+RfX0YY5wv1KfGMO5x6HaRfsQ9+ZAATz8fDywqb4aDRQ8FOTAG5a091arhLV8p8M
bokeh-api-0.12.7.js
X9t3I5FPdAgoDLwqikoE+y4dTlAu7n33OCZNgEnC9A7DCJu8ujRwLjB0jDl2mG06
bokeh-api-0.12.7.min.js
Q+EoDtrOzWkjDIpBmAzOFpHLWHjRW37tEh+UfkYAKA8vmOAjbclEnHlBlqHEMLha
bokeh-gl-0.12.7.js
DYAGA4wxOEqV0K7C3dnw4lyV0oJ1vS2JWEysxtgm/kau2nwTagMTbrkVkOOUqH3J
bokeh-gl-0.12.7.min.js
et5wq1hRP0ykcvc/kTLKsmlnpNUDXwG+b8LwOU12m07Nhy/1TwC9yaextPY547gt
bokeh-tables-0.12.7.js
qpalFNg054WcmQsAPAj0sxH366MxIS8BUgAblVbJpVvc6n0OzLDeJ4qRXJP3VgCJ
bokeh-tables-0.12.7.min.js
G2DyioXSr8CoVHnmywGwI6iv+k2ROJXzkTsopt1gPdsOVcn3UefdtN5Q7Bcll651
bokeh-widgets-0.12.7.js
OWyvNsHW2p7dw4Me3EV2atyuOhN+hykUg6f6Q9axGNLDMaGYRpcslxIJsaUohGn8
bokeh-widgets-0.12.7.min.js
m4K1Q2SPhuMlk1ntlcCvYIowdzUQ9depV0g2eG37C+xqrnPpl7gRhOxNIIHdZrjR
Bokeh Version 0.12.6 (Jun 2017) is an incremental update that adds a few important features and fixes several bugs. Some of the highlights include:
0.12.6
Headless, programmatic export of SVG and PNG images (#538)
New annotations Band and Whisker for displaying error estimates (#2352)
Band
Whisker
Fine-grained sub-element patching for images and other “multi” glyphs (#6285)
Hover hit-testing extended to segments and all markers (#5907, #5907)
Fixes for sorting and selecting from DataTables (#3564, #6115)
Large cleanup and refactor of the layout system (#4764, #4810, #5131, #5518, #6213, #6287)
Improved formatting options for hover tool fields and axis tick labels (#1239, #1671, #2595, #6079)
Many other bugfixes and docs additions are also included. For full details see the CHANGELOG.
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.
The Plot.webgl property has been deprecated in place of a new property Plot.output_backend in order to avoid conflicts between WebGL and a new SVG backend. If you are using plot.webgl = True, you should switch to setting plot.output_backend = "webgl" for the future.
Plot.webgl
Plot.output_backend
plot.webgl = True
plot.output_backend = "webgl"
All previous deprecations up to 0.12.3 have be removed. Below is the complete list of removals.
0.12.3
Deprecated Button.type property has been removed.
Button.type
Deprecated Legend properties: legends, legend_margin, legend_padding, legend_spacing have been removed.
Legend
legends
legend_margin
legend_padding
legend_spacing
Deprecated DatetimeTickFormatter.formats property has been removed.
DatetimeTickFormatter.formats
Tool dimensions may not only be specified with enum values.
Tool
The following BokehJS classes have been moved and renamed:
Old
New
mappers/LinearMapper
scales/LinearScale
mappers/LogMapper
scales/LogScale
mappers/CategoricalMapper
scales/CategoricalScale
Previously, these Mapper classes were internal implementation details. The new Scale classes are first-class Bokeh models and are accessible from Python. This was done to facilitate future work supporting custom, user-defined scales.
There is a new Plot validation check to ensure that Scales and Ranges on a dimension are compatible. By default, Plot models are configured with LinearScale models which (along with LogScale models) are compatible with Range1d and DataRange1d range models.
LinearScale
LogScale
Range1d
DataRange1d
One inevitable breaking change is that users employing a FactorRange in the bokeh.model API will have to specify a CategoricalScale on the same dimension. For example:
bokeh.model
CategoricalScale
plot = Plot() plot.x_range = DataRange1d() plot.y_range = FactorRange(["Mon", "Tues", "Wed", "Thurs", "Fri"]) plot.y_scale = CategoricalScale()
The bokeh.plotting.figure function should this range and scale compatibility handling automagically in most cases.
bokeh.plotting.figure
As part of this work, some BokehJS attributes were renamed to be consistent with the new terminology:
CartesianFrame.x_mappers
CartesianFrame.xscales
CartesianFrame.y_mappers
CartesianFrame.yscales
GlyphRenderer.xmapper
GlyphRenderer.xscale
GlyphRenderer.ymapper
GlyphRenderer.yscale
Since these attributes may be present in user code (e.g CustomJS callbacks or extensions), the old names will continue to work for some time, with a deprecation warning in the JS console.
Previously BokehJS used Backbone events for communication between models. As part of an ongoing migration to TypeScript, the Backbone dependency was removed, and the relevant portion replaces with a minimal, type-safe API for signaling.
This change primarily affects contributors working on BokehJS and writers of extensions.
@listenTo(obj, 'change', fn)
@connect(obj.change, fn)
@listenTo(obj, 'change:attr', fn)
@connect(obj.properties.attr.change, fn)
obj.trigger('change', arg)
obj.change.emit(arg)
obj.trigger('change:attr', arg)
obj.properties.attr.change.emit(arg)
Bokeh has not handled Python datetime values consistently with NumPy datetime64. Bokeh aims to treat all datetime values “as-is”, but in some cases a local timezone conversion could affect Python datetime values. This has been corrected. In case there is code that depends on the erroneous behavior, please note that the new behavior is effective immediately and is now maintained under test to be consistent with NumPy values. See the issue #5499 for more details.
datetime64
Layout was previously handled on document level and there was one solver per document. This was changed to one solver per root, so document isn’t anymore responsible for any layout related stuff. All logic and APIs were moved to views, specifically to LayoutDOM. For example, if your code relied on document.resize(width, height), then you should use view.resize(width, height), where view is an associated view of any of document’s root models. Views can be obtained through Bokeh.index. To resize all roots use
LayoutDOM
document.resize(width, height)
view.resize(width, height)
view
document
Bokeh.index
for (var key in Bokeh.index) { Bokeh.index[key].resize(width, height); }
The SRI Hashes for version 0.12.6 are given in the table below:
bokeh-0.12.6.js
yuTJIeFzKLvXJATEKzHEZJMp6170bM1lhGys3XlRXLDAhi35AVSh3fSYj5zi3Vv/
bokeh-0.12.6.min.js
4tDF9sScHf9MXa2fjqscXvya4toDp1qkMjKV5IAHCsKjjNYjwzb4E8nMXnv4FH1h
bokeh-api-0.12.6.js
LuyjO3NBTzD1trIgR0YHiJXb6B2tI2LxlshHzyT90uh0LSuXLvhpzifWEqiosUqh
bokeh-api-0.12.6.min.js
Y2+wn2SuS6G+zMrQkaxNBE1N681JOlqXDAk3CMdizqH38Fn0pErqUtuj+AnOiUwM
bokeh-gl-0.12.6.js
iV2qx/b9hTfsoQPEqVi+VOcGFPD/OmEOneiKV9eo/gvYkosLmpId3rei6QuurgiN
bokeh-gl-0.12.6.min.js
HeABFVmmmh1192H07OBKFeiRtSlzgcuABlx/F16Lt7IyLHV6cgDQMr2oQddLBWTv
bokeh-widgets-0.12.6.js
GYYzrxfoC3HMVHGhK+0ffUYqzWEAkMX/oAx+TM70McqE8VmY1XmJ2yuyufPmC2QO
bokeh-widgets-0.12.6.min.js
4Y6fHl915BdC7Qzb9Jd8giud/Ix+Z1ySGpF8TO977kYCfsCXP89cZt9WpgRfKCr4
Bokeh Version 0.12.5 (Mar 2017) is an incremental update that adds a few important features and fixes several bugs. Some of the highlights include:
0.12.5
New general capability for Python/JS events (#3210, #3748, #5278)
Bokeh apps easily viewable inline in Jupyter Notebooks (#3461)
Confusing --host parameter no longer necessary (#5692)
Interactive legends can now control glyph visibility (#2274, #3715)
Many fixes and improvements to GMapPlot including a new gmap function for creating Google Maps plots easily (#2822, #2940, #3737, #4835, #5592, #5826, #5845)
GMapPlot
gmap
CustomJSTransform now available for CDS columns (#5015)
CustomJSTransform
Sophisticated “pivot” example app contributed (#5894)
Themes now work with components and in Jupyter notebooks (#4722, #4952, )
The ClientSession APIs defined in bokeh.client.session, such as push_session, don’t currently support the new on_event interface for UI event callbacks in Bokeh Server application. You may track the issue on GitHub (#6092).
MPL COMPATIBILITY IS DEPRECATED
Bokeh’s MPL compatibility was implemented using a third-party library that only exposes a small fraction of all Matplotlib functionality, and is now no longer being actively maintained. The Bokeh team unfortunately does not have the resources to continue supporting this functionality, which was never more than extremely limited in capability, and often produced substandard results. Accordingly, in order to support the long term health of the project, it has been decided to remove all MPL compatibility support on the occasion of a 1.0 release. Any code that currently uses to_bokeh will continue to work with a deprecation warning until that time.
to_bokeh
The bokeh.embed.standalone_html_page_for_models method has been deprecated in place of bokeh.embed.file_html. For details see pull request 5978.
bokeh.embed.standalone_html_page_for_models
bokeh.embed.file_html
The validate keyword argument to bokeh.io.save has been deprecated. Future usage of bokeh.io.save will always validate the document before outputting a file.
All previous deprecations up to 0.12.0 have be removed. Below is the complete list of removals.
0.12.0
Modules and functions and classes that have been removed:
Functions Removed
Modules Removed
Classes Removed
bokeh.embed.components
bokeh.browserlib
bokeh.core.properties.TitleProp
bokeh.charts.hplot
bokeh.mixins
bokeh.models.layouts.GridPlot
bokeh.charts.vplot
bokeh.plotting_helpers
bokeh.models.layouts.VBoxForm
bokeh.io.hplot
bokeh.properties
bokeh.io.vplot
bokeh.templates
bokeh.io.vform
bokeh.plotting.hplot
bokeh.plotting.vplot
The methods bokeh.document.add and push_notebook of ColumnDataSource have been removed.
bokeh.document.add
The bokeh.io.output_server function has been also been removed. Additionally, bokeh.io.push and other supporting functions or properties that are useless without output_server have been removed. This includes any transitive imports of these functions from other modules.
bokeh.io.output_server
bokeh.io.push
output_server
Additionally, the property bokeh.charts.builder.Builder.sort_legend was removed, as well as the following properties of Plot
bokeh.charts.builder.Builder.sort_legend
border_fill
background_fill
logo
title_text_align
title_text_alpha
title_text_baseline
title_text_color
title_text_font
title_text_font_size
The --host parameter is now unnecessary. For compatibility, supplying it will currently cause a warning to be displayed, but it will otherwise be ignored, and apps will run as normal. In a future release, supplying it will result in an error.
The --host parameter for the Bokeh server was confusing and difficult to explain. As long as the Bokeh server relied on the HTTP “host” header to provide URLs to resources, the --host parameter was a necessary precaution against certain kinds of HTTP spoofing attacks. However, the Bokeh server has been updated to no longer require the use of the “host” header (and this is maintained under test). Accordingly, there is no need to have any check on the value of the “host” header, and so --host is no longer needed.
In order that document.py and models.py only contain things that might be of usual interest to users, some changes and rearrangements were made.
document.py
models.py
The abstract class decorator was moved from models.py to has_props.py. The class decorator now also adds an admonition to the docstring of any class marked abstract that it is not useful to instantiate directly.
abstract
has_props.py
The metaclass Viewable has been renamed to MetaModel.
Viewable
MetaModel
The document.py module has been split up, and parts that would not be of normal interest to most users have been moved to better locations.
These changes are not expected to impact user code in any way. For complete details see pull request 5786.
JQuery has been removed as a build dependency of BokehJS. The variable Bokeh.$ is no longer available. If you require JQuery (i.e. for a custom extension or when using the JavaScript API) you will need to provide it explicitly.
underscore.js has been removed as a build dependency of BokehJS. The variable Bokeh._ is no longer available. If you require underscore.js (i.e. for a custom extension or when using the JavaScript API) you will need to provide it explicitly.
Both of these removals together result in a ~10% reduction in the size of the minified BokehJS library.
When showing tooltips for lines, the new default is to label the nearest point, instead of the previous point, which used to be the default.
The request previously attribute was added to session contexts as a way to expose HTTP query parameters. It was discovered that providing the entire request is not compatible with the usage of --num-procs. A method was found to satisfy the original feature request for query arguments, together with --num-procs (but only for query arguments). Accordingly the only attribute that can now be accessed on request is .arguments, e.g.:
request
--num-procs
.arguments
curdoc().session_context.request.arguments
Attempting to access any other attribute on request will result in an error.
If user-specified or default destination cannot be written to, a temporary file is generated instead. This mostly affects using output_file in an interactive session which formerly could result in a PermissionError. For details see pull request 5942.
output_file
PermissionError
The bokeh.io.save method will now only accept a LayoutDOM object and no longer a Document object for its obj argument. This aligns the bokeh.io.save argument types with bokeh.io.show.
Document
obj
bokeh.io.show
Low-level examples, located under examples/models, were split into file and server examples and are available under examples/models/file and examples/models/server respectively (similarly to plotting examples).
examples/models
file
server
examples/models/file
examples/models/server
Previously it was possible to enable WebGL with ?webgl=1 URL parameter. With addition of a separate bokeh-gl bundle, this usage is no longer supportable. WebGL rendering is still configurable using the Plot.webgl property.
?webgl=1
bokeh-gl
The SRI Hashes for version 0.12.5 are given in the table below:
bokeh-0.12.5.js
4DNzidCdN8aYp81JeCInwqaBLKyQR/JP1kdELZcOh4UYlsx8cre8OP0QyK1C8EA8
bokeh-0.12.5.min.js
iiPwCVeZU7az2esGQM/Wo34Wz+YXekOSMmAonk2E57M7v2oSY69PwQKbZjK2OkVN
bokeh-api-0.12.5.js
91d8HQiwFYWXm+YPR3KqLLd27+dRfL7kPGkD8Lx8BIAFLBMssvq+zVecLR1Wb6Gz
bokeh-api-0.12.5.min.js
fS6mK2OeA4UbjFziCGknV6rsU/PNYisHJUCGagFxWm99naMFFI3AMNRipudPRxSN
bokeh-gl-0.12.5.js
bdjSpVgYc2XM0oXsdutNv5rh+OKfctqNs9prb2ivjqMfhP3NqQ6e3oCdUDaW7AGC
bokeh-gl-0.12.5.min.js
MknEg23HbnmbWsXPaMWpkBpnpYFyMQWIPlHQ5fNxfGgJEAGuIsAVHoiALGr6N5hJ
bokeh-widgets-0.12.5.js
J8ZQo9Ffxqfe40yjv301YypsNM4hjTsq/asV6trp+Pwf/hbVyqya9cKJfYHld+v0
bokeh-widgets-0.12.5.min.js
yoMll6tqpQN7Gf5Pkv1n2Ufnd+z1n+376UxE0dQvAjTZSn5dsCg2SCQOHnRpBb5g
Bokeh Version 0.12.4 (Jan 2017) is an incremental update that adds a few important features and fixes several bugs. Some of the highlights include:
0.12.4
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)
bokeh.core
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.
Dialog
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:
requires
module.exports
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
To improve consistency, the following locations names have changed:
old location name
new location name
center_left
center_right
The old location names will continue to work for some time with a deprecation warning.
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.
chdir
__file__
main.py
open
Bokeh apps embedded with autoload_server will no longer set the browser window title.
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:
left
right
p.hbar(y, height, right, left=0, **kwargs)
bokeh-server
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.
auto
The following functions in bokeh.io were long unused and have been removed: autoadd, autopush, and autosave.
autoadd
autopush
autosave
BokehJS has migrated to using .tsx templates. Provisional support for including .eco templates has been removed from both BokehJS and the Bokeh Python library.
.tsx
.eco
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.
$
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.
BackboneView
@$el.find
Additionally, use of Bokeh.$ and Bokeh._
Bokeh.$
Bokeh._
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:
bokeh.core.properties
bokeh.core.has_props
bokeh.core.property.bases
bokeh.core.property.containers
bokeh.core.property.descriptors
bokeh.core.property.descriptor_factory
bokeh.core.property.override
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.
Align
Event
Function
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.
owner
__get__
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).
HasProps.set
HasProps.update
The SRI Hashes for version 0.12.4 are given in the table below:
bokeh-0.12.4.js
Ee/v4s+NP3AElV8g4OUNydSXDwixBe4XLQSDY5s1yhbHYyTMtgJAp+aJ+squhT+k
bokeh-0.12.4.min.js
JVZO+DlFPt6cXd5Ern7+yTbwzg5F0Le9BbQxGqJrAwuAa88BwOdta+VvgjLhEaWl
bokeh-api-0.12.4.js
odYsMqE2SBcDW57DIV/4dN8vMgKu3rhIZwBOW+1x3/2mnJnIYBIlIEa1Y17iUKVn
bokeh-api-0.12.4.min.js
XIXah+HxdIydPqniJK0FJ+tdJ9GCMLNyHEMY0RMPkDGPUaFdh3vUmesAwtTEIouP
bokeh-widgets-0.12.4.js
6bfCW3us3jswr6a6YpAx7uqV91hNpbwuLWoJTmWoCrQTd6/SCXKSwN0Yn8MoNRc8
bokeh-widgets-0.12.4.min.js
btewSwV/3jQKg4UjwnG/MaohlRGcDbhVsVzpdTeqVa8oXbfhpt9p6SpndTsPZ9FG
Bokeh Version 0.12.3 (Oct 2016) is a minor, incremental update that adds a few new small features and fixes several bugs. Some of the highlights include:
BokehJS reduced in size by nearly twenty percent
New Categorical color mapper
Tap tool and tooltips working for VBar and HBar
Better hover tool support for some Charts
Auto-generate legends from data in a column
Many small bugfixes
Setting text font size properties directly as strings (e.g. font_size="10pt") has been UN-DEPRECATED. This usage will continue to work, without any further deprecation warning. (https://github.com/bokeh/bokeh/pull/5274)
font_size="10pt"
The output_server function is deprecated and will be removed in the near future. Use bokeh.client functions such as push_session instead. (https://github.com/bokeh/bokeh/pull/5225)
push_session
It is now deprecated to supply both sequence literals and an explicit source to glyph methods. For example:
p.circle([1,2,3], y='foo', source=source) # BAD
Either provide only sequence literals, e.g:
p.circle([1,2,3], y=[4,5,6])
or put all data into the explicitly provided source, e.g:
p.circle(x='foo, y='foo', source=source)
The older usage will continue to function for some time with a deprecation warning, and will result in an error in a future release. (https://github.com/bokeh/bokeh/pull/5187)
FuncTickFormatter instances using JavaScript or CoffeeScript now require code snippets (i.e., function bodies) instead of full function definitions. Additionally, these formatters now accept Bokeh models as arguments so that the models can be readily available to the formatter function code. (https://github.com/bokeh/bokeh/pull/4659/files)
Several legend properties had duplicative legend_ prefixes. The following property names have been changed:
legend_
old property name
new property name
margin
padding
spacing
The old property names will continue to work for some time with a deprecation warning.
Additionally, the legends property of Legend has been renamed to items, and given a new type. The new type now accepts a list of LegendItem models, instead of a list of tuples. The previous format is still accepted for convenience and compatibility and values are converted automatically. The legends property will also continue to work for some time with a deprecation warning.(https://github.com/bokeh/bokeh/pull/5229)
items
LegendItem models
Specifying dimensions for tools has changed. The 'x' and 'y' aliases for 'width' and 'height' have been immediately removed. Additionally, instead of List(Enum(Dimension), dimensions are now specified more simply as Enum(Dimension) with valid values "width", "height", and "both". The previous format will continue to work for some time and be converted automatically with a deprecation warning. (https://github.com/bokeh/bokeh/pull/5225)
'x'
'y'
'width'
'height'
List(Enum(Dimension)
Enum(Dimension)
"width"
"height"
"both"
The BokehJS codebase organization has been cleaned up. The file common/hittest.coffee has been moved to core/hittest.coffee. Other files that are unlikely to be used directly by users have also been moved. (https://github.com/bokeh/bokeh/pull/5266)
common/hittest.coffee
core/hittest.coffee
The BokehJS class GlyphView no longer inherits from Renderer.View, it now subclasses BokehView. (https://github.com/bokeh/bokeh/pull/5189)
GlyphView
Renderer.View
BokehView
The BokehJS palettes are now only available in the bokeh-api.js bundle, and not in bokeh.[min].js (https://github.com/bokeh/bokeh/pull/5183)
bokeh-api.js
bokeh.[min].js
The BokehJS bundle bokeh-compiler.js has been removed completely. All Coffeescript code (for extension modules, etc.) is now pre-compiled by the Bokeh Python library. (https://github.com/bokeh/bokeh/pull/4946)
bokeh-compiler.js
The SRI Hashes for version 0.12.3 are given in the table below:
bokeh-0.12.3.js
xAbgocDwINfLhCjiBBEtLVFGSwjS5k+UVrD3IoXwtNAetz8Bn7J9O8IwXnYMlcJq
bokeh-0.12.3.min.js
F8M7vgiiYbSwPDIT/9wmP1cQ7EbEMAXzvRBM4isFC5MenMujuQCAKap8vXmFio2Z
bokeh-api-0.12.3.js
qGUGEJePF4+ja/45zdDm47dgSFlcG2MiJBMdjQyhYSEAsDzbuzOnxxLSe5lI6OnG
bokeh-api-0.12.3.min.js
vIuherhIybbgv8avTaDzhjlYgLHptGFbX4PC7qLvY3dvfC4DxifeMYlvTJcHky7r
bokeh-widgets-0.12.3.js
nlRl8vNyTKHG5lg70Us1gwfihonkG+2lxvH+cd1jg1mZNQg6V9bOvSLqxVOLuAYD
bokeh-widgets-0.12.3.min.js
rgdXBhlvbLChj3kMcss1BMzIDZ8MxUjSNmqey0r3t7QMpDF8wezf4OZJGB9WDc7w
Bokeh version 0.12.2 (Sept 2016) is aminor update that adds a few “small in footprint, but big in impact” features and several bug fixes including:
Client-side color mapping support for all glyphs
New color bar annotation
Support for loading external resources in custom models - Check out the new LaTeX example at: LaTeX
Hit-testing support for MultiLine glyphs
Improved hover tooltip default styling
Addition of the Brewer qualitative color palettes
Fix intermittent issues with BokehJS loading in Jupyter Notebooks
Split of the Bokeh JS API into a stand-alone bundle
Many small bug fixes
As part of the changes to ensure that the BokehJS client library has loaded before attempting to render plots in the notebook, a new notebook_handle argument was added to the bokeh.io.show method. When set to True (with output_notebook enabled), the show method will return a handle that can be used with push_notebook.
notebook_handle
True
output_notebook
show
For users who rely on the notebook handles to update plots out of their render order, you’ll have to add notebook_handle=True to your show invocations like below:
notebook_handle=True
from bokeh.plotting import figure from bokeh.io import output_notebook, push_notebook, show output_notebook() plot = figure() plot.circle([1,2,3], [4,6,5]) handle = show(plot, notebook_handle=True) # Update the plot title in the earlier cell plot.title = "New Title" push_notebook(handle=handle)
In order to shrink the size of the main BokehJS library and reduce pageload times, the Bokeh JS API has been separated into it’s own bokeh-api(.min).js bundle. For users requiring the JS API, it will be necessary to add the new resource to their HTML templates.
The SRI Hashes for version 0.12.2 are given in the table below:
0.12.2
bokeh-0.12.2.js
bjRS9ikTgnbObZUH7BkbriTJ/74U8xH8QQssOorHxLvC3NwMZ0oG+Kv6T4lL9UzW
bokeh-0.12.2.min.js
XKxpX87dVNusxC2TgkLdEGO+MF0jvy42fJHqAUi+C/OvBkYQqOzixClIlc5cTW2I
bokeh-api-0.12.2.js
NSZ1y/Uqwy4XnnrjNupcZXiMQgR0yroKbAtk1Sbl0wQHhDIWFfJi7vnoIGD3BnMQ
bokeh-api-0.12.2.min.js
OyMtO71UD6gNx/GjmhaI3EzAxPgM4clEC7r7gdNSIOyK8FUjFGFyS8+tKfQBMdEe
bokeh-compiler-0.12.2.js
L7wwaXTUucLZgIwqFqAOLxGt02wsqJtzyXWU0Ki9+Go0TsfWc52v3mDl9CF2Qbya
bokeh-compiler-0.12.2.min.js
W4yJkHi0OV2t0M3YvksLtBWBBvg7pReyV6joBSkA8DJYaDMaHkxy9x5pg1UBrb99
bokeh-widgets-0.12.2.js
CyHwcYQDFGamGNpTga4UaDTXWGzuB7lgqnbMcQe6lorNw8w1wj0Bx6yhvtjShQ4p
bokeh-widgets-0.12.2.min.js
AivheJ7QesXl1NERyn9EyrsRxk+uflY/pisdOudop6qusL/kLfkSVjMwckg/MLET
Bokeh Version 0.12.1 (Jul 2016) is a minor, incremental update that adds a few new small features and fixes several bugs. Some of the highlights include:
0.12.1
Add .patch method to ColumnDataSource for efficient partial updates.
.patch
Add .visible property to all glyphs for easy on/off capability.
.visible
Add qualitative Brewer colormapps to bokeh.palettes.
bokeh.palettes
Add new VBar and HBar glyph types.
VBar
HBar
Update BokehJS to use use RBush 2.0.1 for more efficient spatial indexing.
Restore ResizeTool functionality for simple layouts.
Fix Windows support for conda build, docs build, and running unit tests.
Fix a bug in the HTML template for autoload_server causing incorrect layouts.
Fix a bug in the toolbar CSS, causing it to interfere with hit testing and selection.
Fix WebGL support for Safari, and WebGL bug affecting line thickness.
Fix intermittent issues with BokehJS loading in Jupyter notebooks.
The SRI Hashes for version 0.12.1 are given in the table below:
bokeh-0.12.1.js
TF38vhvAkQQ6pli7t8PSc/JSC5Tk8QP3G1wR7UwAykhDEEnCw5yC8UdZtpnRIcLn
bokeh-0.12.1.min.js
YwgXDPAsNadFWcDjteDXrLJS3nE5K/HSIJuwIyyildk4jlVEKAUhoWnWee+l6BXc
bokeh-compiler-0.12.1.js
TvYJmdxO2ECVmLPgGB0GhaqRj+UeKOhm2rm+r3/QGtLR5NqdSik7g63IOlbLTVkL
bokeh-compiler-0.12.1.min.js
rlEqeQLvenpWokAiTFbMgy6zgp9GbVvWadPocZYiAw8o6Q2UvvwJfK5TeknV+rqa
bokeh-widgets-0.12.1.js
Xdd0OqYYMKwQD5wVIYyhg0zfS/rdU2qAQnQ1PdD7hZ1fI+THorsp2DGzM2eHxzsn
bokeh-widgets-0.12.1.min.js
4xF0n6KT2Cv0QClwGCeK4rWLI0z+LOlTPV5+sbpUTWjoNOIoyjDzorV+GNxb8eKV
Bokeh Version 0.12.0 (Jun 2016) is a large release with many new improvements:
Responsive layout and styling improvements throughout
BokehJS plotting and charts APIs for pure JS dev
Legends can be placed outside / next to the central plot area
Expanded WebGL support to all markers, fixed webgl bugs
New color palettes: Viridis, Magma, Inferno, and Plasma
New model types:
Arrow, Title, and Label annotations
LogColorMapper for scaled color mapping
FuncTickFormatter for simpler custom ticking
Support for computed transforms (e.g. Jitter) on data columns
Documentation improvements:
re-done user gude sections for layout
new user guide sections for JS APIs
new user guide sections for custom extensions
Server features:
unlocked callbacks for use with threads
“–num-threads” option for simpler deployment
new index landing page listing installed aps
UX improvements
toolbar moved to the right, and made sticky, by default
left aligned title, closer in, by default
smaller, italic axes labels
New hosted demos at https://demo.bokeh.org
Currently the most reliable sizing modes for layouts are “fixed” and “scale_width”. Other modes may work, or may produce undesired effects. Work on layout is still ongoing. Support for “mixes” sizing modes will come in a future release. Additionally, the ResizeTool does not function reliably with responsive layout, and will most likely be deprecated in a future release.
Google has made a change to their terms of use for google maps, and “effective immediately”, ALL google maps API calls MUST have an API key, or they will not function:
http://googlegeodevelopers.blogspot.mx/2016/06/building-for-scale-updates-to-google.html
All Bokeh GMapPlot models must have their api_key property set, or they will not function properly. PLEASE NOTE: all previously created GMap plots from any previous version of Bokeh are affect by this TOS change.
api_key
All WebGL examples have been moved under examples/webgl. The timeout.py and random_tiles app examples have been removed in favor of new, better examples. Several examples of new layout capability are under examples/howto/layout.
examples/webgl
timeout.py
random_tiles
examples/howto/layout
The mechanism for declaring properties on BokehJS has changed, with the addition of the @define, @override and @internal methods. This may affect existing custom extesnions. Until now, BokehJS details were considered an internal implementation detail. In the future, more attention will be given to BokehJS stability.
@define
@override
@internal
The new layout work was a large undertaking. As a result, there are many deprecations, including hplot, vplot, etc. Almost all old functions will continue to function, while issuing deprecation warnings. However, there are newer functions that should be preferred. The most up-to-date guidance for layout going forward is at:
https://docs.bokeh.org/en/latest/docs/user_guide/layout.html
In most cases it was possible to move forward with a deprecation, for the time being, but there are two small hard compatibility breaks that could not be avoided:
Plot.title
This attribute is now a Title object. It is no longer possible to set, e.g. p.title = "some text" as a string value. Instead, you must do:
Title
p.title = "some text"
p.title.text = “some_text”
It is still possible to pass the title` keyword argument a string value to figure and Charts, as a convenience. Additionally all other title related properties on Plot, e.g title_text_color continue to work for now, while issuing deprecation warnings.
figure
session.show
The ClientSession.show method must now be explicitly passed the thing to be shown. It is no longer possible to call, e.g. session.show() without a parameter. Instead, you must do:
ClientSession.show
session.show()
session.show(plot)
The SRI Hashes for version 0.12.0 are given in the table below:
bokeh-0.12.0.js
Vu5E9yfoVB1jJvsvuYJ6uKcQp7LrAOdyBNHVfLhwRz8guQzh1R9nvV/cRQY06PB+
bokeh-0.12.0.min.js
TUlxCkX84enRdt9oDgI6t+4oBMmDTPjZzHIbm5DWotRPPUr+nf0juX0EBMVjm9Ue
bokeh-compiler-0.12.0.js
cyFoYkKckC5micd9t2k3R1Sok81kNKq6+VacrpE5ywcOHpBUr47tFv+Tm1/TIiPb
bokeh-compiler-0.12.0.min.js
wIznusC6qrH52eurUBzSErPX0Pm9451ZZV+O343SQsXhrQWtun+pvp0DTWX2vjoC
bokeh-widgets-0.12.0.js
CFNTDWSpwqY9kf+0VYDqNZoF1zRd8A6ojTcTomZfkjJawkXTU/qu4Lupmfr5vMOB
bokeh-widgets-0.12.0.min.js
KMfPQEmVHXTaKvVaoZK7RjgBYe5iOG97ayj4RDpWImz441XV2SvU/3uh7q26N11x
Bokeh version 0.11.1 (Feb 2016) focuses on providing bug fixes, small features, and documentation improvements. Highlights include:
0.11.1
settings and documentation for Bokeh server behind an SSL terminated proxy
bugfixes:
MultiSelect works
Oval legend renders correctly
Plot title orientation setting works
Annulus glyph works on IE/Edge
features:
preview of new streaming API in OHLC demo
undo/redo tool add, reset tool now resets plot size
“bokeh static” and “bokeh sampledata” commands
can now create Bokeh apps directly from Jupyter Notebooks
headers and content type now configurable on AjaxDataSource
Additionally some internal work has started to refactor and clean up BokehJS to bring the class and file structure into closer alignment with the Bokeh python library.
Range update callbacks now return the range object as cb_obj (not the plot)
Layouts (HBox, VBox, VBoxForm) have been moved from bokeh.models.widgets to bokeh.models.layouts, but continue to be importable from bokeh.models
BlazeDataSource has been removed; it will be maintained by the Blaze team in the future.
The broken BokehJS API has been removed. We are actively seeking a champion/maintainer for a new BokehJS API.
The SRI Hashes for version 0.11.1 are given in the table below:
bokeh-0.11.1.js
Tkufirnq15nJ2AzP9z/K0YRgbgpEHTqW4tWItEGhCAq1VqYqTyK1sS92WsWASJOK
bokeh-0.11.1.min.js
Pu3P9+MeUXl4BPyw+/mhQ1ZliMYr96w6+sZ8rr/JmaEdjYrK6y5zEnnBVDD7F2uT
bokeh-compiler-0.11.1.js
h/zuZsBTml9IKapUtC2xpBI8nWH6BwhhKdUbS3Esgk3T7OKCiRThTPUl7cvFdkB4
bokeh-compiler-0.11.1.min.js
Ee0VICkBk1Kb1UsJEyTiN0v+iTE4Inb+bhbQsc5bxv7w7b+w0BVgpA1EerFAh/ck
bokeh-widgets-0.11.1.js
pqJibUOwxvkiQbKV0uFuQ12O8KbZ13DJeSL+zAKA+Mp8L+zxASxfv4P42xm54sUH
bokeh-widgets-0.11.1.min.js
JErZpHQP3WM8/wZVkQaCIBuuz+6z0pZNjDCqBj5nTx69k6m6MAgswad+ptzKQ/Bv
Bokeh Version 0.11.0 (Jan 2016) is a large release with many new improvements
0.11.0
New Tornado and websocket-based Bokeh Server
bokeh command line tool for creating applications
bokeh
expanded docs including deployment guidance
video demonstrations and tutorials
supports async, periodic, timeout and model event callbacks
python client API
User-Defined Models allowing anyone to extend Bokeh
GeoJSON data source and map tiles renderer
WebGL support for rendering lines
Python -> JS compilation for CustomJS callbacks (Py3 only for now)
New general push_notebook() based on Jupyter comms
Updates to charts
all legacy charts converted
more examples and expanded docs
configurable and “auto” range bounds
wheel zoom scroll capture turned off by default
hover policy for glyphs
responsive improvements
Known issues
annulus glyph does not render correctly on IE and Edge
many small bug fixes
Server output in the Jupyter notebook with output_server is currently not functioning correctly, and will be fixed in a follow on 0.11.1 release shortly. However, new notebook comms can enable many of the same kinds of interactions and notebook-based apps without a Bokeh server.
The Image glyph does not currently work with the Bokeh server, and will be fixed in a follow on 0.11.1 release shortly.
The previous Flask-based bokeh-server has been completely removed and replaced with the new bokeh serve based on Tornado and a websocket protocol. If you require to use bokeh-server you will have to remain on Bokeh version 0.10.0 or lower.
0.10.0
All “old-style” charts in bokeh._legacy_charts have been updated to use the more consistent and powerful bokeh.charts interface, and bokeh._legacy_charts has been removed.
bokeh._legacy_charts
Bokeh deprecation warnings, which are not enabled by default python, have now been unconditionally enabled and are always displayed.
ColumnDataSource.push_notebook() has been deprecated (but still works) in favor of the more general bokeh.io.push_notebook() base on Jupyter notebook websocket comms.
ColumnDataSource.push_notebook()
bokeh.io.push_notebook()
The following modules have been deprecated (but still work), with new counterparts as described in this table:
Old location
New location
bokeh.util.browser
bokeh.core.property_mixins
bokeh.core.templates
Additionally, the following modules that should not be of interest to general users have been moved immediately, without deprecation:
bokeh._json_encoder
bokeh.core.json_encoder
bokeh.compat
bokeh.enums
bokeh.query
bokeh.core.query
bokeh.state
bokeh.core.state
bokeh.validation
bokeh.core.validation
If you have been using file_html and manually passing in js_resources or css_resources, your call will no longer work. You can still do this, but you pass a tuple to the resources argument.
file_html
js_resources
css_resources
resources
Before:
html = file_html(layout, None, title=title, template=template, js_resources=js_resources, css_resources=css_resources)
v0.11:
html = file_html(layout, resources=(js_resources, css_resources), title=title, template=template)
Note you can pass None in place of either js_resources or css_resources.
The SRI Hashes for version 0.11.0 are given in the table below:
bokeh-0.11.0.js
BCLKhG2LJGzZrHI5d9wNeSUY3BhBNW3u3Bchu2CYqmqHiNP0SDCbVmko+7fBtqz5
bokeh-0.11.0.min.js
7cHWaPO0YU3YviGjB5dqoSXT0jjWVhNESOJUiPmcqNfUxB8f9AWRn/jI8jxv9b9B
bokeh-compiler-0.11.0.js
bokeh-compiler-0.11.0.min.js
wQxa+naxo/5x721n/V9bRhPGRFibSJUpgcA9h4dlxiI1TcwP7E4gkktceM4KBQvY
bokeh-widgets-0.11.0.js
HFO2FtQqhuufUVPSzrYUMEvePjR1hxqS2lM7+ADERmtOkvcVUkTW0qaPo6XAZ+HM
bokeh-widgets-0.11.0.min.js
OrtF7vAHRNc+bOQtZJTGDFO/L/nbZOqe1VeelDBF+BBVO/0lDK0ZDFwLQdXNOElf
Bokeh 0.10.0 (Sep 2015) provides several new features such as WebGL support, a new refactored and more powerful chart interface and responsive plots. Also bugfixes and enhancements in our documentation, testing and build machinery, and examples.
Initial webgl support (check our new examples: maps city, iris blend, scatter 10K, clustering.py)
New charts interface supporting aggregation (see our new Bars, BoxPlot, Histogram and Scatter examples)
Responsive plots
Lower-level jsresources & cssresources (allow more subtle uses of resources)
Several test machinery fixes
Several build machinery enhancements
More pytest-related fixes and enhancements
More docs fixes and enhancements
Now the glyph methods return the glyph renderer (not the plot)
Gmap points moves consistently
Added alpha control for imageurl objects
Removed python33 testing and packaging
Removed multiuserblazeserver
This release introduced a new, often requested style of chart interface that is centered around Pandas DataFrames. All of “old style” charts in the bokeh.charts interface have been moved to bokeh._legacy_charts, which will eventually be removed, when all charts have been updated. To continue to use the old charts, replace``bokeh.charts`` with bokeh._legacy_charts, e.g.:
from bokeh.charts import Area
becomes
from bokeh._legacy_charts import Area
The SRI Hashes for version 0.10.0 are given in the table below:
bokeh-0.10.0.js
roqWuzxIb+9icxQDCZC9kqQ+UpNXcVUuygQqTqfoWoGd585muxXNqIYPVYQ1YGaj
bokeh-0.10.0.min.js
bZmM9B4HEi1+YxYgaV/+kkACMwPYJp6O4j69SbqO5xytxFRyRnBzsrwZ4LURsnyh
Bokeh 0.9.3 (Aug 2015) provides several usability enhancements, better docs, new examples, a lot of bug fixes and an improved testing machinery (using pytest and selenium-based test).
0.9.3
Support horizontal or vertical spans
Provide raw_components version of bokeh.embed.components
Prevent Bokeh from eating scroll events if wheel tool is not active
bokeh.models.actions are now called bokeh.models.callbacks and Callback is now CustomJS
Additional validation warnings
Cleaned up gulp source mapping
Fixes in our build machinery
Cleaned up models section of the reference guide
Use pytest instead of nose
Beginning to add selenium tests
The SRI Hashes for version 0.9.3 are given in the table below:
bokeh-0.9.3.js
XnmmxRn1r5D8I0Jma6Zsv+LFhTgGkN3bvg2qCyTbz/9VFAFYQmLV1w+d+nBKb+Fo
bokeh-0.9.3.min.js
MWZj9IcmF3kjXMB3c625YyGg1zi4AstdG1YbBMPcmOCvOAfzCLhiF9wzK97XvHKE
Bokeh 0.9.2 (Jul 2015) provides several bugfixes. Additionally, the MPL compatibility layer was updated.
0.9.2
Several nan-related fixes including the slow rendering of plots
Removed some unused dependencies
Fixes in our automated release process
Fixed the patchs vanishing on selection
More control over ticks and gridlines
MPL compatibility updated
Several examples updated
The SRI Hashes for version 0.9.2 are given in the table below:
bokeh-0.9.2.js
OexLuYVuOvGkuzoCz7W33ojy7pdvttmoMVf0p5qy8gCIZfsYNQKw76DFH3FdR8XF
bokeh-0.9.2.min.js
ek9Fq+5oN4hQ3hDiprqdFVJQ6aE/8QEHZ3TzCM5qWRCpv8nEqXUb/kuogFWmDT/U
Bokeh 0.9.1 (Jul 2015) focused on extending Bokeh’s new callback system by adding more places where callbacks can be used, expanding and improving the new User’s Guide, exposing better ways to embed Bokeh plots and widgets into your own layouts, and providing validation error and warning feedback to diagnose problems.
0.9.1
New callbacks options for hover, selection, and range updates
Documentation for widgets and new callbacks in the User’s Guide
Much more flexible embed.components that can embed multiple objects
Implemented a validation framework to provide errors and warnings
More than 30 smaller bugfixes
The SRI Hashes for version 0.9.1 are given in the table below:
bokeh-0.9.1.js
he0Wjre3gUAW9isOJSLQJ3Tegh7T03wktOnlM9+hbsY4U9RtKMSKTIy/u7OPgOXe
bokeh-0.9.1.min.js
KI76vrite4JyequGokgYmKf8VYfmZKQ2X4etUngx1kctDHC3DQjfFDHC8N4xwoUN
Bokeh 0.9.9 (May 2015) provides sophisticated interactions in static plots using a new Callback Action, a complete rewrite of the User guide and big BokehJS refactoring switching to use browserify.
0.9.9
Callback Action, serverless interactivity in static plots
Hover inspection along lines
Client side LOD downsampling for interactive tools
Full User guide rewrite
Reduce BokehJS boilerplate and switch to use browserify
Several example bugfixes
The SRI Hashes for version 0.9.0 are given in the table below:
0.9.0
bokeh-0.9.0.js
lQ3pi4yDh59XrNdnZ39u0rF7F/m9pOX8G6V8pq/s/dxm3DDZMXeewNHUOpMZWK2T
bokeh-0.9.0.min.js
Xs5IpvkTupznAMbyk+r7S0UBRGxznpBEP8f6dbauA8GInH6Epfchmwj9HTFWO1Lw
Bokeh 0.8.2 (Mar 2015) is a quick release focused on some refactoring, bug fixes and improved documentation.
0.8.2
Collect implicit interfaces into a single bokeh.io module
Fixed notebook css issues
Update notebooks to be compatible with IPython 3.0
Easy bokeh applet generation using the simpleapp module
Develop installation enhancements
A new User guide intro and some other docs styling enhancements
Some other minor examples bugfixes
The SRI Hashes for version 0.8.2 are given in the table below:
bokeh-0.8.2.js
MgfXSfLE3qlEldO9lhHDch1n1t1FR0Gl/Xnzjt4GYpAWXJphE9jwGHJkkGZwbAPU
bokeh-0.8.2.min.js
hx0bQYsgEXSQIr/4Bm1VoqrVWv6NUPcXNvCtZClxdrijVYpSA5ejSY9vpSqwoNIv
Bokeh 0.8.1 (Feb 2015) is focused on stability, bug fixes and improved documentation.
0.8.1
Fixed HoverTool
Fixed Abstract rendering implementation and docs
Fixed chart gallery and docs
Removed leftovers from the old plotting API implementation
Some other minor docs fixes
The SRI Hashes for version 0.8.1 are given in the table below:
bokeh-0.8.1.js
PoysNTe21L9RYuf9VTcSUu7mUq/PfF+OVNm+dDWyBTZGjAujKy3hA9YzCax5suXg
bokeh-0.8.1.min.js
RjPbDoAJBnvxqECnoXk+wTHMrah2wPmq6WIiu1nsaiskZxQTaNXUzM1ii6GuYgSv
Bokeh 0.8.0 (Feb 2015) includes many major new features:
0.8.0
New and updated language bindings: R, JavaScript, Julia, Scala, and Lua now available
Better bokeh-server experience:
live gallery for server apps and examples!
new “publish” mode Bokeh plots and apps
docs and advice for real-world deployments
Simpler and more easily extensible charts architecture, with new Horizon chart
Dramatic build and documentation improvements:
100% complete reference guide
full docs and BokehJS version deployed for every “dev” build and RC
sphinx extensions for easy inline plots
Shaded grid bands, configurable hover tool, and pan/zoom for categorical plots
Improved and more robust crossfilter
AjaxDataSource for clients to stream data without a Bokeh server
In addition, many bugfixes and small features, both old and new — over 100 issues — were closed for this release! Additionally several new contributors helped out in a big way. Special thanks to Sarah Bird, Mathieu Drapeau, Samantha Hughes, and Nick Roth.
The SRI Hashes for version 0.8.0 are given in the table below:
bokeh-0.8.0.js
sbVBtMnlyuSkyNDLKWwhp2ElmY6IZPsHlWq34GllwteWbzTCBx5PmbLuPByFgEAn
bokeh-0.8.0.min.js
ZIjfRVQrX3bqAK3Ye8yjicjVMh16aS+NfmeGNoRUUkXuD1PQZItEuDpEWpAwf4GG