Releases

2.3.1

Bokeh Version 2.3.1 (April 2021) is a patch-release that fixes bugs that affects downstream projects:

As well as other very minor docs, build, and bugfix updates.

For full details see the CHANGELOG.

Migration Guide

HSL class deprecated

The class bokeh.colors.HSL is deprecated and will be removed in a future release. Use the RGB class, RGB(a) strings, or named colors instead.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 2.3.1

Filename

Hash

bokeh-2.3.1.esm.js

l+WhVlTqVx8k/BcI/RVr3T4Thtykw9e+fdL68TrjEwMl/nCDEIbmFSArBZ1R3+Gf

bokeh-2.3.1.esm.min.js

RD7nKPAB7eJaIOiGeg0rBt8fjhXGSGdFKH74RaLgh5q0EIo56gOU6k0mOK9lmCnY

bokeh-2.3.1.js

L7PU98m7NYRHTMqvE+cuSA0O2egeB3yG87adBtbIfr5ZEwqagR+H1y+ZlhzuL7ku

bokeh-2.3.1.legacy.js

coHuIDJbURe23HHfBRf0C2Zj/Ro37MqszQBDO0LewJK8thuNGCEnQrSgWINHC+fg

bokeh-2.3.1.legacy.min.js

XYsJNKJw8PJIyl1V4/cb4U3JV1PEuTX2HSw0D1OwiFYyuY9PdKlaK8oNpw3yUylT

bokeh-2.3.1.min.js

YF85VygJKMVnHE+lLv2AM93Vbstr0yo2TbIu5v8se5Rq3UQAUmcuh4aaJwNlpKwa

bokeh-api-2.3.1.esm.js

+3nOn3UG9A6pautTGE83Yo/5WQT2Fasol30Gtv5Kphlq/ak67K/paxo8OY2PXyEY

bokeh-api-2.3.1.esm.min.js

/ZWJabTfJp9uxYUxzx33lX9C5PG96q+Tlhe+70pvCa8E+T1XAXvb2mYNx7LFFa0q

bokeh-api-2.3.1.js

CYD3nY5YmE2NCzJ9LDM9U3UJlXzHvLrjQBDexPMyATgjQfqA4KDynq/Ztw3pKMz1

bokeh-api-2.3.1.legacy.js

P25kiQwdDzHX/NMl6Zt7L1Bt8ik5jyjJq8BE8Ewx6JzwvSlil1OMKNEl4jAxh9Z6

bokeh-api-2.3.1.legacy.min.js

E1v1q6fL8v91VUKtStjMy4i8qiL7rvcEmurcr71OdV0rTwLWyaEF+43ULzaEAQ3p

bokeh-api-2.3.1.min.js

jyWqZCuIw/BBpEFBT9+3kwaojU6Y/8TCPz7ZYtUbHVlUCwELcgX3qxx1dP1h12lB

bokeh-tables-2.3.1.esm.js

suDtRY8MFpeqZSln/wcdStc8Xe4vuWDv10Pgqb6zOMPkgFNQfwSabj2VsKs3+Lcl

bokeh-tables-2.3.1.esm.min.js

I5g2+zxlECEUGJbWPvOYZ/KfUFfITRxso96/v/iknj/wconf9fN2piObNsa1mzzr

bokeh-tables-2.3.1.js

HWKJOBb8YJpQLGeGEQalcczbJzrkUxfqxtSug1jeikbiDmRwqtG2yYD7aubcyOIP

bokeh-tables-2.3.1.legacy.js

meDD88JBbJWIRMbR3FIxRMU+mCu+kO5WP0GbWiGKYQ0lzZoNA0aBK7Adae1Y+pKg

bokeh-tables-2.3.1.legacy.min.js

xJhTymKoIPJ+S4jqvrIdwhc7NQGiN52JOTMiP/lOeTBaygm8lV4J9BAZ3o6Z+/5d

bokeh-tables-2.3.1.min.js

MK/uFc3YT18pkvvXRl66tTHjP0/dxoSH2e/eiNMFIguKlun2+WVqaPTWmUy/zvh4

bokeh-widgets-2.3.1.esm.js

VXoozNUs5O0zeSIvonq3hEHqRIcPLkx6zNXvOOqissU4YTK3lcXik7QmVshLJpPd

bokeh-widgets-2.3.1.esm.min.js

+fmV3pP1XF4/c0ljx3kA9KQJp0rEBqp3xu23bLmHnrpxqAiO+BsdnngVijZk9NQ/

bokeh-widgets-2.3.1.js

e4IaHngRlOI2oaNDNst9KA765mINwAj0TFIGJuimOAXHTFycfCXQs4CBpaDqQFx+

bokeh-widgets-2.3.1.legacy.js

R6nyi0XF7IXH1y1e09d5JQK6Ox6xhsq0C3v6nwjTZz6Ffm9oKDpAETKQuYeehfnK

bokeh-widgets-2.3.1.legacy.min.js

4XXCxtEZasVfU9MFaGqV0tv3dJfLQXJQBiwmrz9MW+uB7QNkrK2YjxI16fp0vhmy

bokeh-widgets-2.3.1.min.js

KKuas3gevv3PvrlkyCMzffFeaMq5we/a2QsP5AUoS3mJ0jmaCL7jirFJN3GoE/lM

2.3.0

Bokeh Version 2.3.0 (February 2021) is a new minor-release level that brings many updates. Some of the new feature work includes:

  • Multi-line axis and tick labels are now possible (#8169)

  • Log axes display using superscripts (#8954)

  • DataModel base class to define custom “properties-only” Bokeh subclasses added (#3674)

  • Colorbar supports “eqhist” and categorical color mappings (#5618, #10493)

  • “Edges Only” inspection policy added for graphs (#10637)

  • Hatch patterns can be used with all fill-able glyphs and annotations (#10824)

  • New “star” markers added (#10836)

  • Arrowheads and line-dash patterns can be vectorized (#6835, #10203)

  • Tornado websocket compression options added (#10798)

Important bug-fixes include:

  • A major bug with datetime precision causing several regressions was fixed (#10738)

  • SVG export no longer flips images (#10725)

  • LabelSet and Whisker now work for categorical ranges (#10454, #10575)

  • MultiLine hover fixed (#10458)

  • MultiChoice and MulitSelect disabling now works (#10452, #10507)

  • Date sliders can use a TickFormatter (#10458)

The documentation has also received renewed attention:

As well as many other small issues were closed. For full details, see the CHANGELOG.

Please note that the next release level (2.4) will drop support for Python 3.6, and also be the final release level to support IE and other legacy browsers.

Migration Guide

Properties are non-nullable by default

Previously, all properties accepted None (null in BokehJS) as a value. As of this release, None is only accepted by properties explicitly marked as nullable, e.g.``Nullable(Int)`` accepts integers and None. All current models and their properties were adjusted as needed, so there will be no difference from users’ perspective. However, custom extensions may require updates if they relied on the old behavior.

Primitive and derived properties have default values

Some properties did not have sensible intrinsic default values (Int defaulted to None, for example). Now all properties have default values, such as 0 for Int, or "" for String. You can remove a default value by marking a property as non-nullable, e.g. NonNullable(Int). In this case, a user is required to set a property value. An attempt to retrieve the value of a non-nullable property before it is set will raise an UnsetValueException.

Use Readonly() to indicate readonly properties

The old syntax, e.g. Int(readonly=True), is still accepted, but will be removed in the future. Use Readonly(Int) instead.

ArrowHead is not an annotation anymore

ArrowHead no longer inherits from the Annotation base class. This will pave the way for vectorizable arrowheads.

Four of Bokeh’s base models are renamed

Certain base models were renamed to unify naming convention with BokehJS:

Old name

New name

WebSource

WebDataSource

Action

ActionTool

Gesture

GestureTool

Inspect

InspectTool

Old names are retained for compatibility but are deprecated and will be removed in Bokeh 3.0.

names properties were deprecated

DataRange.names, SelectTool.names, and HoverTool.names are deprecated and will be removed in Bokeh 3.0. Use the renderers properties instead, possibly in combination with plot.select(name="renderer name").

BokehJS visuals have different semantics

Previously Line, Fill, Text, and Hatch visuals were used across primitive, scalar, and vector properties. Those are now split into more specific versions, e.g. Line, LineScalar, and LineVector. This should only affect custom extensions that use visuals.

Marker models are deprecated

Marker models like Asterisk, CircleX, X, etc. are deprecated. Use the Scatter glyph with a marker type instead, e.g. replace Asterisk() with Scatter(marker="asterisk"). Marker methods on Figure will default to use Scatter glyph. Marker models were removed from BokehJS.

Tooltip deprecations

EditTool.custom_tooltip, HelpTool.help_tooltip and CustomAction.action_tooltip were deprecated Use Tool.description, which can also be used with all other types tools, instead.

New "auto" defaults for color bar properties

ColorBar properties orientation, ticker, and formatter now default to "auto". Previously, these properties had concrete defaults ("vertical", BasicTicker() and BasicTickFormatter() respectively). In most cases, this will not affect user code. However, if you relied on setting e.g. color_bar.ticker.base = 60, then the code will need to be replaced with color_bar.ticker = BasicTicker(base=60).

CartesianFrame is not a layout anymore

This only affects extension creators. CartesianFrame is now responsible only for maintaining the coordinate system of a plot. Use the layout.center_panel of a plot to access any layout-related capability. Note you can still use CartesianFrame.bbox, so most code doesn’t have to change.

Figure sizing fixed in BokehJS

Previously, setting plot.frame_width while using sizing_mode:'fixed' did not resize the canvas as expected; the figure would only resize after changing plot.width or plot.plot_width. This behavior has been fixed and now setting plot.width to trigger the resize is no longer needed.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 2.3.0

Filename

Hash

bokeh-2.3.0.esm.js

fZZtm7lIXgH68X+han9jB6tLn6OlWJZ4mvjprNGZpAuu4KAihmlgBpzqawLZQedh

bokeh-2.3.0.esm.min.js

g0NxZeBbgyPsL3w9dWP9eLyv+FcAJS06MZgzwv4BW3BinJQ5KGGI8YT0TRQIv478

bokeh-2.3.0.js

mJ8pUlUGiuki4uY+cmKBqT/wCDHzxbtzS+jJwsCq07EVVCPL9sTub6Ij8gLgicXS

bokeh-2.3.0.legacy.js

9Zq2f8DhWE89SFMBZOcTEebUGNtFCLDuWlmAOCTRVgIQE5mQg+eGdC+690c9unaq

bokeh-2.3.0.legacy.min.js

Qbirg8guXtazwny/NB1DkHYmJrQkLMs01SX29NxsJNDswZQx60Iphj6tpa3M19TL

bokeh-2.3.0.min.js

HjagQp6T0/7bxYTAXbLotF1MLAGWmhkY5siA1Gc/pcEgvgRPtMsRn0gQtMwGKiw1

bokeh-api-2.3.0.esm.js

+3nOn3UG9A6pautTGE83Yo/5WQT2Fasol30Gtv5Kphlq/ak67K/paxo8OY2PXyEY

bokeh-api-2.3.0.esm.min.js

/ZWJabTfJp9uxYUxzx33lX9C5PG96q+Tlhe+70pvCa8E+T1XAXvb2mYNx7LFFa0q

bokeh-api-2.3.0.js

R/OKMsdioWNwcwVLHhySqzFqp6Te32XyLEQb+HO5JTdzbxJbDvMWZcRg+1O+zQrP

bokeh-api-2.3.0.legacy.js

DLgLZyj4d7CcGKUvhUEnboHUjNs+5+IAfTaMxqvSW0c+obL72yOZrExPSXV/1+Q7

bokeh-api-2.3.0.legacy.min.js

knmcr9Wrxf1EqWg99DvLT81zlBvri9O6Tdn5KCo/xaxeyEdli9qo8l/pHhQIinG1

bokeh-api-2.3.0.min.js

RMPdnxafNybXTSOEnNc5DcUZuWp5AI7/X1sevmORhTwgIBG9mS7D1mQ0Fbo2CvCs

bokeh-tables-2.3.0.esm.js

suDtRY8MFpeqZSln/wcdStc8Xe4vuWDv10Pgqb6zOMPkgFNQfwSabj2VsKs3+Lcl

bokeh-tables-2.3.0.esm.min.js

I5g2+zxlECEUGJbWPvOYZ/KfUFfITRxso96/v/iknj/wconf9fN2piObNsa1mzzr

bokeh-tables-2.3.0.js

pfE3fQPIP9o9LVN+ZOTondCHby4twt3z1gs5ZkzuiQoLyfhJ/zL1uZU1vsZBXIpp

bokeh-tables-2.3.0.legacy.js

2UCM9aC/Y1F/xace14It+ZEGM3yVWWZ23jU6/8/7ArsEoMXEkye6bG1lemtist0n

bokeh-tables-2.3.0.legacy.min.js

dqNcN595ffUxPzPzikVL6id6/mx6LrcOZO4Xdbm1qH+iiggGun6PduR/0c6uDvu/

bokeh-tables-2.3.0.min.js

exLqv2ACDRIaV7ZK1iL8aGzGYQvKVuT3U2CT7FsQREBxRah6JrkVCoFy0koY1YqV

bokeh-widgets-2.3.0.esm.js

YpIrRoVloS9ZiR2CcEsZjgsR9bAmZAuvUZdMR5xujFd08QUfD7rAPUBaHv5NfU2g

bokeh-widgets-2.3.0.esm.min.js

HTT00VfA3B93PI7NYLSJQvXKc9pr5rHqH7lDAVdpO8tMgxIlKpn6y9Nzi0NVkE61

bokeh-widgets-2.3.0.js

sq8v5+0NUuYi1d8bpR4PVT2NUeSyvBzchuAj6zpj8stoBC8CfISO8MUsbLggULXr

bokeh-widgets-2.3.0.legacy.js

U4vzj6l/6P+9UP3lvd5TzpesRjlnNooVwO73u6alvYWO3QXi6JXK3qt0El77D1+7

bokeh-widgets-2.3.0.legacy.min.js

sZoloYA8BDIFv8Pc+GBbCiNfjTv6rJQsbO1pyxNGIFeWdR29W6/3PEvdXifIIJgp

bokeh-widgets-2.3.0.min.js

ZEPPTjL+mdyqgIq+/pl9KTwzji8Kow2NnI3zWY8+sFinWP/SYJ80BnfeJsa45iYj

2.2.2

Bokeh Version 2.2.2 (Oct 2020) is a patch-release that fixes a bug that affects downstream projects:

  • Selectively update data when CDSView changes (#10521)

For full details see the CHANGELOG.

2.2.0

Bokeh Version 2.2.0 (Aug 2020) is a minor-release that focused with substantial improvements to performance, SVG export, and DataTable.

And several other bug fixes and docs additions. For full details see the CHANGELOG.

Migration Guide

Oval glyph deprecated

The Ovall glyph is largely duplicative of the ellipse glyph, and will be removed in version 3.0. Use Ellipse instead.

Tooltip.inner_only deprecated

This property was non-functional an unnecessary and has been removed. No replacement is provided.

scenterx and scentery deprecated

Previosuly, glyphs could implement separate scenterx and scentery to report a “center” location that could anchor hovers. These have been combined in to a single Glyph.scenterxy() method that should be implemented instead. (This change is only relevant if you are implementing a new glyph in Bokeh or in a custom extension.)

Implement Renderer._render instead of Renderer.render

Renderers must implement abstract method _render instead render, which is now “final”. This breaking change affects only extension developers.

2.1.1

Bokeh Version 2.1.1 (June 2020) is a patch-release that fixes some bugs:

  • Can’t resolve styles when importing BokehJS (#10172)

  • Bokeh server fails to start correctly with random port (#10175)

  • Some scalar properties seralizing incorrectly (#10181, #10197)

  • Typed arrays not returned to Bokeh server as lists (#10204)

For full details see the CHANGELOG.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 2.1.1

Filename

Hash

bokeh-2.1.1.js

NVLoIvhAPsmuha054OhJyqTTwn2SOLrWhjxN2SzDl9jOMA4BEiQxdVuj5/I1Mmlk

bokeh-2.1.1.legacy.js

RBI4nsh+bEi+7zpVleMsOZUmqEQzDFu8Ar5XC5/P/84vbxgFK1NIM92rINmQzjwU

bokeh-2.1.1.legacy.min.js

xgqxtE4DfXlrEtlnBUkVqMbnOURwprjA1SsHl6y8UWE+cRIqdjVX1qgKihR+HOQe

bokeh-2.1.1.min.js

kLr4fYcqcSpbuI95brIH3vnnYCquzzSxHPU6XGQCIkQRGJwhg0StNbj1eegrHs12

bokeh-api-2.1.1.js

fHPdzgGhF9+z6/uHjkV4/p1xRkfDoh4qQiFH8d1PKfFbovAcfcDK5UEkFW1yrKh1

bokeh-api-2.1.1.legacy.js

q1u6/ob8Oh5rFQimYfu8a/er74etdvFTWg7693iQOqJKRnsF5+WV1ZrxPfITNvfb

bokeh-api-2.1.1.legacy.min.js

95gwE5C8plfAAMn73j6cdrhxzF9yR9x2TZfynVtJ13uq7PRi9I1d3TkTh7hvRXix

bokeh-api-2.1.1.min.js

i2RsfqLVG6PTrWCD55m8pYN9N2XZRkYVASzqjzp79o0OpPmcp+APyuwCfItW7Kn2

bokeh-gl-2.1.1.js

8erITZznxK6uKioMEcOq2npDGs7AEFHFtVWrc2AKCi8ECfHm7vnoxuEmpRvyQqSk

bokeh-gl-2.1.1.legacy.js

MEBWyCmkuaX5C8CCds3GaWzuGCHzlBEV8BNYKB0gWuljHcZRbs6oA0D5pxkrpeGl

bokeh-gl-2.1.1.legacy.min.js

98NnStat48VxzQfNiwcrkE9sIbY4fLA0TbMFwox0W6STcJTYASH0X7+8FWNs+kJK

bokeh-gl-2.1.1.min.js

cT9JaBz7GiRXdENrJLZNSC6eMNF3nh3fa5fTF51Svp+ukxPdwcU5kGXGPBgDCa2j

bokeh-tables-2.1.1.js

6DK1i1bdhwE/TTptO3hbgsxj/iutwm7PdE10v4slZGDlYZx3GMcbLtpg1xrUm6Bn

bokeh-tables-2.1.1.legacy.js

ykvWokuORGkpcepCRxTWRemCEwq/x8R6CiGGLZNApLRuvLjNdX8QV6SqDMjdI/YC

bokeh-tables-2.1.1.legacy.min.js

lOOVHppS3DRG2uB+vzOhAS+Xq24s+wdjupxCRrFfesE8zTomHjsMQVbHoMkuZcXj

bokeh-tables-2.1.1.min.js

Dc9u1wF/0zApGIWoBbH77iWEHtdmkuYWG839Uzmv8y8yBLXebjO9ZnERsde5Ln/P

bokeh-widgets-2.1.1.js

L7h7EJKAj2o3SNeMZLc6KlaEs4s8tbRi758Z1a4R9NIZcljBHO44P1BIq2BRx8zm

bokeh-widgets-2.1.1.legacy.js

sKMXawb05LDb63tXK6kPkvyUnfr5sCfO3RLzuASpE/K1g/jauZsnVVY5m1e9SK5h

bokeh-widgets-2.1.1.legacy.min.js

9YB+c7X2EFtj53AwqLBPhrtyIyhdjjiBfWKjKg19kHgpns/+i6q/qDc/qLvevc61

bokeh-widgets-2.1.1.min.js

xIGPmVtaOm+z0BqfSOMn4lOR6ciex448GIKG4eE61LsAvmGj48XcMQZtKcE/UXZe

2.1.0

Bokeh Version 2.1.0 (June 2020) is a minor-release.

And several other bug fixes and docs additions. For full details see the CHANGELOG.

Migration Guide

Minimum Tornado Version

The minimum torndado version is now 5.1.

render_mode deprecated

Tool overlays are now implemented efficiently on the HTML5 canvas without any separate CSS rendering codepath. This makes the render_mode property obsolete. Accordingly, render_mode is deprecated (and ignored) everywhere it currently appears, and will be removed entirely for Bokeh 3.0 in the future.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 2.1.0

Filename

Hash

bokeh-2.1.0.js

smlIzEf/gQO6ExfNl5a8XBidlyD19zbzMpXXJY7ubwKwSfTMrKlwTYgiWto3rZzU

bokeh-2.1.0.legacy.js

RpGF0bcRBNXaWVctH5KT/NjQeNFRGMPL9oUgOG2F+9VIXxYjfger3IP+ytOOmSgL

bokeh-2.1.0.legacy.min.js

bUAsC0BTUcTfnjUJFtIVEh++eVDwc6LFREim9lOJbWw7mvhjWyi+yLszwgWfeTqb

bokeh-2.1.0.min.js

YobFyzPeVUsFQydHkJGsJL1kyfHnWxOlPc3EwaV22TmBaeGoXHLWx5aRRVPS9xlE

bokeh-api-2.1.0.js

rJKJBWIJD2CGyndJoGyYw7CFIPXc+Jt1i2YvubXgagPPJmVhHX1CbFIfg8IUo9xe

bokeh-api-2.1.0.legacy.js

q1u6/ob8Oh5rFQimYfu8a/er74etdvFTWg7693iQOqJKRnsF5+WV1ZrxPfITNvfb

bokeh-api-2.1.0.legacy.min.js

95gwE5C8plfAAMn73j6cdrhxzF9yR9x2TZfynVtJ13uq7PRi9I1d3TkTh7hvRXix

bokeh-api-2.1.0.min.js

xIZ6DggyeeSB9o8lHxPnUJ4VvsdRuiKdRbWJwKIyqMvCe2PSJUnosrCjOBeBVjou

bokeh-gl-2.1.0.js

jbmt8y8AdRgk4QjO2K/148FQDLB6nkbStWebxCvbQDiapg3aKQHwHoNcRukDG07F

bokeh-gl-2.1.0.legacy.js

MEBWyCmkuaX5C8CCds3GaWzuGCHzlBEV8BNYKB0gWuljHcZRbs6oA0D5pxkrpeGl

bokeh-gl-2.1.0.legacy.min.js

98NnStat48VxzQfNiwcrkE9sIbY4fLA0TbMFwox0W6STcJTYASH0X7+8FWNs+kJK

bokeh-gl-2.1.0.min.js

u+eGuEXC8aw0VSCm2mH+b/tQEAitUOYiR1H6SuIVEdUmXsf4vN8m/SmXpmjb7U/X

bokeh-tables-2.1.0.js

CaO0W7A9MK3Qvvfc3PA0nh6w2Z/3+zYxs8XW6Z1rqS9dsi7Gxcm6gEAsAdU1uAA4

bokeh-tables-2.1.0.legacy.js

uSsaxVyXxnPQBvMJ+0rD4U99UNbAPC383K3h3aRGpUUuWy2IhtF4BIMscrO6YJez

bokeh-tables-2.1.0.legacy.min.js

lOOVHppS3DRG2uB+vzOhAS+Xq24s+wdjupxCRrFfesE8zTomHjsMQVbHoMkuZcXj

bokeh-tables-2.1.0.min.js

uMVqQc8JqHitD67bXTn9a06Mrk3EiHRaZ18EJENQenAKJ/KL71SakdXYomZQpGRr

bokeh-widgets-2.1.0.js

oRbeM2fQ3VzhFyc6p/C86hNZd2We22frCSb3mED+0QkYd9apnd8eV3QBptQ3gSWk

bokeh-widgets-2.1.0.legacy.js

UcfeYWDL9mxMD4KNi/Zh9g6xXlOIK60JugPIn95doUPDPfpntjczG0sDq7i/VHS/

bokeh-widgets-2.1.0.legacy.min.js

9YB+c7X2EFtj53AwqLBPhrtyIyhdjjiBfWKjKg19kHgpns/+i6q/qDc/qLvevc61

bokeh-widgets-2.1.0.min.js

NuAg9+TcTQQqvQCTtkCneRrpkTiMhhfiq0KHiBzx8ECiKiLWXHN6i6ia3q7b3eHu

2.0.2

Bokeh Version 2.0.2 (April 2020) is a micro-release that fixes some bugs and improves some small features. Highlights include:

  • Allow multiple versions of BokehJS on a page #9812

  • Cross-timezone issue with session token expiry #9938.

  • Fix server resources with Django integration #9724

  • Make add_layout update a figure #8862

  • Precompiled extensions broken on Windows #9900

  • BoxAnnotation ignores fill_color=None #9877

  • A handful of documentation clarifications, corrections, and expansions

And several other bug fixes and docs additions. For full details see the CHANGELOG.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 2.0.2

Filename

Hash

bokeh-2.0.2.js

UkMqtNT0SHaqLs533WBFIFOQlpI0oBLZ95mmE1znOc2DAxVKE4kV2N/fa5pVclbM

bokeh-2.0.2.legacy.js

KR4odrT8FGe/RhbQJhXna9lnYbqSWgJtZDwSKYLtXHMq9jMZIsfhfvtsoGNPnhIo

bokeh-2.0.2.legacy.min.js

AoV/enIYdFQoSGC1L2lLtqfaV+SbCrpoH/4hQUn5dtA51YEdvP6WfmgDQNA2PD8T

bokeh-2.0.2.min.js

ufR9RFnRs6lniiaFvtJziE0YeidtAgBRH6ux2oUItHw5WTvE1zuk9uzhUU/FJXDp

bokeh-api-2.0.2.js

pEcCaul3FFhMhIk5Ib+CSpaNEyYfq0aaE9O8rrhpdxcyLo1m2TnmNV6o08/V4M1S

bokeh-api-2.0.2.legacy.js

KZAnUNKcEmSVBZghd5dptYHphk8xa55V7nAI2/h1HG8PR5CMuNPFlGRbIBrBF1SY

bokeh-api-2.0.2.legacy.min.js

03FcICQ8bpmcrt5mY8FzsP7Kro1Kw0YZZE5eVQbYE4Wqk+NVgI+SM1v+a9PdWE0z

bokeh-api-2.0.2.min.js

Zat0VmMWmxj1LsoPt4eZNROXIBlbHawNk70+fMuyPdrkf4bxPfol5eSjkM+2+Aql

bokeh-gl-2.0.2.js

6yzpricF16lQHn3ROOALnfyJptl3EecpUjgsPl4dUrb9zuW6iW/nmtQi0QVl3m1X

bokeh-gl-2.0.2.legacy.js

WLfvPAAPOQKpctNISXTgn2kE1nyyeTUXj4A/NiG0YbqPK/Xj5oqPbt//i81ihYeU

bokeh-gl-2.0.2.legacy.min.js

CE+tCfPoRABVp191bkCRXM1NRLpqfinJwg/OFcpsEHjQXXFgw9V9nF87uPtrOYOf

bokeh-gl-2.0.2.min.js

Ozhzj+SI7ywm74aOI/UajcWz+C0NjsPunEVyVIrxzYkB+jA+2tUw8x5xJCbVtK5I

bokeh-tables-2.0.2.js

QG2THvrid1TaGMrCMRHlxyFM+C3mICkJUkg7FOzJ2gz4eF75RYIVUnZno7pIIwsA

bokeh-tables-2.0.2.legacy.js

S6FHFqy5i3uM+3gj4ugPMu87Da52GRfmKt6KF/Hnl2IjHHHK2V3iBfuwnx8SAK6i

bokeh-tables-2.0.2.legacy.min.js

rhuxmfZAceRijfxNigMNjFg90KJSGBUo50km7JE3jsafe5owfpDUqpvbFOP9fOYX

bokeh-tables-2.0.2.min.js

Jm8cH3Rg0P6UeZhVY5cLy1WzKajUT9KImCY+76hEqrcJt59/d8GPvFHjCkYgnSIn

bokeh-widgets-2.0.2.js

MDkkPkuvFEG9VnB0db27S9LUbNBTJeHrbyRkF5HhRkbvFea5sWHFRtOe6lX1WTqS

bokeh-widgets-2.0.2.legacy.js

vVYnVy2HoB37gEZG9Tq78szpR4DYLmiTeqw0pxSiY9VsF14z805OmjWBuDbM7c9D

bokeh-widgets-2.0.2.legacy.min.js

lmZ8KDe0/DcnTQAy/2LTZwfu07YHb9G1PomUfcq1armS4FOfmtUpcldq97T/GRPO

bokeh-widgets-2.0.2.min.js

8QM/PGWBT+IssZuRcDcjzwIh1mkOmJSoNMmyYDZbCfXJg3Ap1lEvdVgFuSAwhb/J

2.0.1

Bokeh Version 2.0.1 (April 2020) is a micro-release that fixes some bugs and improves some small features. Highlights include:

  • Addressing a Cross-Origin Resource Sharing (CORS) issue seen in Chrome and Chromium-based browsers #9773.

  • Adding multi-file support for FileInput widgets #9727

  • Bokeh server can now serve custom extension code #9799

  • A handful of documentation clarifications, corrections, and expansions

And several other bug fixes and docs additions. For full details see the CHANGELOG.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 2.0.1

Filename

Hash

bokeh-2.0.1.js

tVKczto01upF7/7P6LiOXpSGTl8bvd0ihJsAjj5ATZ1HtHOjzehsk1QG11v8RPzh

bokeh-2.0.1.legacy.js

j1UHF3UJfhCev0f69mDNT2k/857WQoTqDak+5TcRPnKQNoLRi2GhE+0l/SUesc5u

bokeh-2.0.1.legacy.min.js

BZqRV/bgjl9qbvOa7Ehju5MU9l4MCem5np926ozIQbWznvbWHmAgO6DQ8MACVcyI

bokeh-2.0.1.min.js

JpP8FXbgAZLkfur7LiK3j9AGBhHNIvF742meBJrjO2ShJDhCG2I1uVvW+0DUtrmc

bokeh-api-2.0.1.js

3UyeqdzNZeuZetwUuVRgFoO1uwKKkuGfgEPqo6oPW9WCz4O9iJwsb2q1DqtKrC29

bokeh-api-2.0.1.legacy.js

+pCbh0AGqgu9Dq5DjAa7Lpa7wFIRmZACdLG+EliwqoiNnx7U/VxKZVAcbk3TsRCu

bokeh-api-2.0.1.legacy.min.js

/4Td+BHIeJldFeenXtt4biFbj1MrXgGChNRC/GuCYY2iPuv5T3IaVY/xq9VC4miP

bokeh-api-2.0.1.min.js

a8BoFqd1NmyhsrJQ01yAbRnWLr/qZLIOGtN4PqPfrTFR0EqaYMjBgPhxgQJFt7Sb

bokeh-gl-2.0.1.js

s/T6PHEnt4YmPtPwtJwGznZymwfatfb5XZ8LGx1uwIJIr2A73dhmvVOd9kW+0zLG

bokeh-gl-2.0.1.legacy.js

5+O/mt/EE8swol5CsQWvE+VLZ9e8dz15wR8LnrSPgoOfuiPgwUYVu4CFfNfqwl0L

bokeh-gl-2.0.1.legacy.min.js

MFd9nuhowSs0HAiZcqgit5uea6CarAvl/ZXojy5Qp/wTesO/PWxFeuif9wvZ0pUx

bokeh-gl-2.0.1.min.js

Dv1SQ87hmDqK6S5OhBf0bCuwAEvL5QYL0PuR/F1SPVhCS/r/abjkbpKDYL2zeM19

bokeh-tables-2.0.1.js

aMdLZF7sDh0tgv80fzEJvmpQiLHNl9fRDXpsKyiD2rKXp3lNLWhaU70rmUsQA7u0

bokeh-tables-2.0.1.legacy.js

cctkJX0kinVmnjh6/LyxFUQZ1KAEOVtIW/UQwKqzuMLwYJH/KFUJDKQ2EOzVDDXz

bokeh-tables-2.0.1.legacy.min.js

c6eUimtOrK9ilrJyPMFjX6/jYd58uwpDOPEaujHuA/ghGKdUV1e2ZFWdhJbBDi4B

bokeh-tables-2.0.1.min.js

4BuPRZkdMKSnj3zoxiNrQ86XgNw0rYmBOxe7nshquXwwcauupgBF2DHLVG1WuZlV

bokeh-widgets-2.0.1.js

fZEku/EEZLhynXy4M48PDLbmqjThltP7mY8SrASiZnrKdAAJc9nWWnXzbXPm4e0s

bokeh-widgets-2.0.1.legacy.js

Kbpjb/ErdNXlZIKq8+r2164aftEHpBo1jajKLblc3fL4iUEBJ3wQe+Istw6KTaUO

bokeh-widgets-2.0.1.legacy.min.js

5TVvhxaRp1icVmcX80/0K87aP6Go9jt6VJy9fWCujZ26AcgKOIG2SGkbz0+iJnMu

bokeh-widgets-2.0.1.min.js

xZlADit0Q04ISQEdKg2k3L4W9AwQBAuDs9nJL9fM/WwzL1tEU9VPNezOFX0nLEAz

2.0.0

Bokeh Version 2.0.0 (March 2020) is a major milestone of the Bokeh project. This release cycle closed more than 180 issues. Highlights include:

  • New, modern MultiChoice widget added #9532

  • BokehJS CDN resources are loaded with SRI hashes enabled #8937

  • New DatePicker implementation with more features #9509, #9494, #6728, #8917

  • 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.

Migration Guide

Minimum Package Versions

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

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.

HoverTool Formatters Specification

Previously, the formatters property accepted a CDS column name. For example a formatter for a tooltip for "@foo could be specified with just "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".

Bokeh Sphinx Extension

The obsolete Sphinx configuration parameters bokeh_plot_use_relative_paths and bokeh_plot_pyfile_include_dirs have been removed. The unused PLOT_PAGE template has also been removed.

PhantomJS usage retired

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.

“Use Strict” for CustomJS

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.

require() in CustomJS

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 Protocol Versioning

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).

Selection Dicts

The obsolete old-style selection dictionaries, i.e. selected['1d'] have been removed. Use selected.indices, etc. only.

Immutable Palettes

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))

Tile Providers

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.

ColumnDataSource Properties

The ColumnDataSource.selected property is now read-only.

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.

Date and Datetime Properties

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.

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.

Missing Renderers Warning

The W-1000 (MISSING_RENDERERS) validation warning will no longer trigger for plots that have added annotations, even if no other glyphs are present.

UnitsSpec hierarchy

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.

Broken Bokeh Commands

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_VERSION

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.

API Removals

The following modules and functions were previously deprecated or were internal and no longer needed:

bokeh.client

Method ClientSession.loop_until_closed removed

bokeh.io

Function create_webdriver removed, use webdriver_control instead.

bokeh.models.callbacks

Methods CustomJS.from_py_func and CustomJS.from_coffeescript removed

bokeh.models.filters

Methods CustomJSFilter.from_py_func and CustomJSFilter.from_coffeescript removed

bokeh.models.formatters

Methods FuncTickFormatter.from_py_func and FuncTickFormatter.from_coffeescript removed

bokeh.models.plots

Properties Plot.h_symmetry and Plot.v_symmetry removed

bokeh.models.tools

Methods CustomJSHover.from_py_func and CustomJSHover.from_coffeescript removed

bokeh.models.transforms

Methods CustomJSTransform.from_py_func and CustomJSTransform.from_coffeescript removed

bokeh.models.widgets.buttons

Properties Dropdown.default_value, Dropdown.value and AbstractButton.clicks removed.

bokeh.models.widgets.sliders

callback, callback_throttle, and callback_policy removed from all sliders. Use value for continuous updates and value_throttled for updates only on mouseup

bokeh.plotting.helpers

Entire module removed

bokeh.protocol

Entire versions module removed, messages.register function removed

bokeh.util.compiler

Class CoffeeScript and related code removed

bokeh.util.future

Entire module removed

bokeh.util.string

Functions encode_utf8, decode_utf8, and escape removed

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.

API Deprecations

The following new deprecations are effective:

  • bokeh.layouts.WidgetBox is deprecated use bokeh.layouts.Column instead.

  • Importing from_networkx from bokeh.models.graphs is deprecated. Import from bokeh.plotting instead.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 2.0.0

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

1.4.0

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.

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

Migration Guide

Deprecations

The overburdened legend keyword argument to glyph methods is deprecated. It is replaced with three purpose-specific keyword arguments:

  • 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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.4.0

Filename

Hash

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

1.3.4

Bokeh Version 1.3.4 (Aug 2019) is a micro-release to test changes to build and release automation.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.3.4

Filename

Hash

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

1.3.2

Bokeh Version 1.3.2 (Aug 2019) is a micro-release to test changes to build and release automation.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.3.2

Filename

Hash

bokeh-1.3.2.js

EohK5rErHRcmdCJbvCpee7KR9k6kXGye6xtuLBvddGY4uPjxQe/L9/vNnvuAiO3C

bokeh-1.3.2.min.js

HvAJhQCPIyzZvnEIfRCKWH7Wpnn4WHCkds1x2ZmltiXsv9zSHgpsul+Gn/6HS8H6

bokeh-api-1.3.2.js

nJUu+sx8zSb41hqOdx43gieIbvKctxvE1p9t+pk/LPfEa/NkdXLzabs0l9Ei6IWt

bokeh-api-1.3.2.min.js

uiQK8rYxuWmtxis0SRCPutN+wBC3I2mpeiEcpNBGu0r2I5cZFvxBRp81KQQMd68i

bokeh-gl-1.3.2.js

uMcdujhqERVMJTJ61CtRysRPxg/IHxUyG2Lg1Cz0ZADlyb04LKuVo9JOH8n9fAHD

bokeh-gl-1.3.2.min.js

ADA0PW/OwoRXwpwdip39O2fv8bODqyQrfG7+93px9tBd95sodfrG08hvl4BmlFZ7

bokeh-tables-1.3.2.js

NwpciY1ja7iqnMnmr44ZDhWGkqdEvboTbndFsw+5NxKCZxIMZUYGFvgc4TrPmAW3

bokeh-tables-1.3.2.min.js

zWoUJmvc67QcNkwy37hrt8j8hkx+AnkDxddpM2llEzXmq/rEDQCC65Wlwu2rvdqF

bokeh-widgets-1.3.2.js

lwaiwsl6zHSRB67alfn0bVx0GlBwUovKXqcXZYTuyf0FQz4izhwFF5+YbU4CJmpO

bokeh-widgets-1.3.2.min.js

NuVOeEsS+hhEJQGsO94fKMfY74rRsFLaYpw1VPzGLN2+pwD9m2PkYQ+W56WAYVTi

1.3.1

Bokeh Version 1.3.1 (Jul 2019) is a hotfix micro-release to fix #9123.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.3.1

Filename

Hash

bokeh-1.3.1.js

gvzEY0xhVHzwW+7ML6zOrcY7QJ5setdu3GtOKu0bLehUNjVND4fZ43wOD4ijVWuZ

bokeh-1.3.1.min.js

F53X81jIKZEulkAZ03WqtV0aOIuVMsP4Fc93kfCNwNUU0VXluJDpH+FCGORdH8WK

bokeh-api-1.3.1.js

nJUu+sx8zSb41hqOdx43gieIbvKctxvE1p9t+pk/LPfEa/NkdXLzabs0l9Ei6IWt

bokeh-api-1.3.1.min.js

uiQK8rYxuWmtxis0SRCPutN+wBC3I2mpeiEcpNBGu0r2I5cZFvxBRp81KQQMd68i

bokeh-gl-1.3.1.js

uMcdujhqERVMJTJ61CtRysRPxg/IHxUyG2Lg1Cz0ZADlyb04LKuVo9JOH8n9fAHD

bokeh-gl-1.3.1.min.js

ADA0PW/OwoRXwpwdip39O2fv8bODqyQrfG7+93px9tBd95sodfrG08hvl4BmlFZ7

bokeh-tables-1.3.1.js

NwpciY1ja7iqnMnmr44ZDhWGkqdEvboTbndFsw+5NxKCZxIMZUYGFvgc4TrPmAW3

bokeh-tables-1.3.1.min.js

zWoUJmvc67QcNkwy37hrt8j8hkx+AnkDxddpM2llEzXmq/rEDQCC65Wlwu2rvdqF

bokeh-widgets-1.3.1.js

lwaiwsl6zHSRB67alfn0bVx0GlBwUovKXqcXZYTuyf0FQz4izhwFF5+YbU4CJmpO

bokeh-widgets-1.3.1.min.js

NuVOeEsS+hhEJQGsO94fKMfY74rRsFLaYpw1VPzGLN2+pwD9m2PkYQ+W56WAYVTi

1.3.0

Bokeh Version 1.3.0 (Jul 2019) is a point release that adds some interesting new features:

  • FileInput widget added #6096

  • New DataCube widget affords groups and aggregations of tabular data #8100

  • TextInput widget now has a new per-keystroke capability. #8676

  • Can now set source.data directly from DataFrames #9052

And several other bug fixes and docs additions. For more details see the CHANGELOG or the blog announcement.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.3.0

Filename

Hash

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

1.2.0

Bokeh Version 1.2.0 (May 2019) is a point release that adds some interesting new features:

  • 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

And several other bug fixes and docs additions. For full details see the CHANGELOG.

Migration Guide

New in 1.2

Discourse Site

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 Discourse, and is searchable.

Callback Policy

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.

Stacked Areas and Lines

New varea and harea methods add support for single directed areas (filled regions between two series that share a common index). Also added:

  • 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)
Legend Titles

Legends now support displaying a title:

p.legend.title = "Things"

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.2.0

Filename

Hash

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

1.1.0

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:

And several other bug fixes and docs additions. For full details see the CHANGELOG.

Migration Guide

New in 1.1

The js_link function was added to make it simpler to link two Bokeh model properties together:

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.

Deprecations

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.

Changes to bokeh.sphinxext

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:

  • 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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.1.0

Filename

Hash

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

1.0.4

Bokeh Version 1.0.4 (January 2019) primarily addresses a security issue regarding yaml.load (#8541).

For full details see the CHANGELOG.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.0.4

Filename

Hash

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

1.0.3

Bokeh Version 1.0.3 (December 2018) is a micro bugfix and feature release.

Some of the highlights include:

  • Enable Copy-and-Paste from DataTable (#7762)

  • Add a Multi-line TextAreaInput widget (#2828)

For full details see the CHANGELOG.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.0.3

Filename

Hash

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

XlktvJYrwyhD+8uwGi4DhDtxFq/xbEpVYNZGC+MNfcV/6CBISW79vIRm8saU9Isl

bokeh-api-1.0.3.min.js

NSKzY3Xo3QtIQoJyDdrS4WX32aIHy8AKe9EnylHEixnHAK6tiVv5S3b3m5MDmuYm

bokeh-gl-1.0.3.js

EYZpUMzNI2udt3oD7YSGPHthzQ6gt39iMldN1efrrdSrMZqzqxJjoLBHPifzVrxD

bokeh-gl-1.0.3.min.js

pvGNV4tMr8cTWJ6zCy6GgMnOb4vHXXCpnowJw8IQM0aa/XKVUlRVgjQu/BlOCH4L

bokeh-tables-1.0.3.js

2c8KG1SSTwpJvWGZpe7P7Hd6kXBHltLw8IcdaNvNn8Ec4wsMtSpT/6PtJKI/z+uz

bokeh-tables-1.0.3.min.js

1Cp+3MdtkZ0V/9bUsoqxHnvLrb2OoG76DPJNiPzN8Q+fYr1WpVs8IkmtNhJ5HijX

bokeh-widgets-1.0.3.js

Y1ITbV66rAm4sLToJ+ae4QbbfWwn/o/sj0V/Zuly8ZeQuEl9sp1Orl6hsSTzUkIH

bokeh-widgets-1.0.3.min.js

r5YLyp1NS4FDmCEPUgE3UPsalffFN99+rwnCi7PCw66rqZvPnCET3hOXcRVsvPL2

1.0.2

Bokeh Version 1.0.2 (November 2018) is a micro bugfix and feature release.

Some of the highlights include:

  • Expose configurable DataTable row height (#8411)

  • Fix issue with legends and empty scatter glyphs (#8395)

For full details see the CHANGELOG.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.0.2

Filename

Hash

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

XlktvJYrwyhD+8uwGi4DhDtxFq/xbEpVYNZGC+MNfcV/6CBISW79vIRm8saU9Isl

bokeh-api-1.0.2.min.js

NSKzY3Xo3QtIQoJyDdrS4WX32aIHy8AKe9EnylHEixnHAK6tiVv5S3b3m5MDmuYm

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+

1.0.1

Bokeh Version 1.0.1 (October 2018) is a micro bugfix release.

Some of the highlights include:

  • Small fixes for export_png (#8362, #8374)

  • Better cleanup for DocumentLifeCycleHandler (#8367)

  • Fix issue with oval, ellipse legends (#8375)

  • Recognized CSS rgb(a) strings for colors (#4096)

For full details see the CHANGELOG.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.0.1

Filename

Hash

bokeh-1.0.1.js

+vfqyEk0+rr8HTfpyCMlOUA9GQrIk+uNRkUDrUk3xGyNqteh8Q7TW1VTdILKFhGL

bokeh-1.0.1.min.js

T4kjnvDzji3k2L8iECnfQhBXZGS6jEosAbkFeXhAQw/NozpEjSOKlKuzXXxRptJZ

bokeh-api-1.0.1.js

XlktvJYrwyhD+8uwGi4DhDtxFq/xbEpVYNZGC+MNfcV/6CBISW79vIRm8saU9Isl

bokeh-api-1.0.1.min.js

NSKzY3Xo3QtIQoJyDdrS4WX32aIHy8AKe9EnylHEixnHAK6tiVv5S3b3m5MDmuYm

bokeh-gl-1.0.1.js

bPAPq2rhiN1b+3/Te8GXQjKw06sQzN8p5k7UUhlwFSeK2+jCpGA9vEprXCOY3Cil

bokeh-gl-1.0.1.min.js

O7NaHDfUGE9DqNi2Q1of3g0esDzKChOiHMij3G/BMPp7oy81sV/FTdyZwgmdA/+e

bokeh-tables-1.0.1.js

wvhUEr7vbUKClQADIxcMySGeg+Xqxtc20dS5vL0VrpA4/Ij7w2APwIQg5Yu86DrS

bokeh-tables-1.0.1.min.js

ZtUO0KDmCDVXB2bNokYGTdirKQOlGd38Und4LaIN3rFQjAEU70RGnw8lvlorRwn3

bokeh-widgets-1.0.1.js

4ZkUEpDR4V6T9fgF19LB4Az2Ih3HW6zz25j0f+5VWeF4LsAJSnB+Dt83O0CNLgYe

bokeh-widgets-1.0.1.min.js

1eKqmHJT75Elwy7zfQ4iP2wDDQoZWAnV7aISycekMKnC+qeLsub6ZzMJVQEi25W+

1.0.0

Bokeh Version 1.0.0 (October 2018) is a major milestone of the Bokeh project.

Some of the highlights include:

  • Support for MultiPolygons with holes (#2321)

  • 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)

  • Callback to allow AjaxDataSource to adapt JSON responses (#8321)

  • Scatter glyph for parameterizable marker type (#5884)

  • Reuse webdrivers for faster PNG/SVG export by default (#8329)

  • Improved testing capabilities (#2596, #8078, #8139, #8146, #8217, #8225)

  • Faster import times (#8309)

And several other bug fixes and docs additions. For full details see the CHANGELOG.

Migration Guide

Handling of Selections

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.

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:

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 regrettable, there are now much more extensive integration tests in place to maintain that the second version will always function as expected from now on.

New Dependencies

“Pillow>=4.0” has been added to the list of Bokeh runtime dependencies.

Examples

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

Pretty printing functions

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.

Bokeh Object IDs

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.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.

arguments parameter for 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.

Codebase Tests

The Pytest “quality” mark has been changed to “codebase”. Now to run the codebase tests, execute pytest -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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 1.0.0

Filename

Hash

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

XlktvJYrwyhD+8uwGi4DhDtxFq/xbEpVYNZGC+MNfcV/6CBISW79vIRm8saU9Isl

bokeh-api-1.0.0.min.js

NSKzY3Xo3QtIQoJyDdrS4WX32aIHy8AKe9EnylHEixnHAK6tiVv5S3b3m5MDmuYm

bokeh-gl-1.0.0.js

bPAPq2rhiN1b+3/Te8GXQjKw06sQzN8p5k7UUhlwFSeK2+jCpGA9vEprXCOY3Cil

bokeh-gl-1.0.0.min.js

O7NaHDfUGE9DqNi2Q1of3g0esDzKChOiHMij3G/BMPp7oy81sV/FTdyZwgmdA/+e

bokeh-tables-1.0.0.js

wvhUEr7vbUKClQADIxcMySGeg+Xqxtc20dS5vL0VrpA4/Ij7w2APwIQg5Yu86DrS

bokeh-tables-1.0.0.min.js

ZtUO0KDmCDVXB2bNokYGTdirKQOlGd38Und4LaIN3rFQjAEU70RGnw8lvlorRwn3

bokeh-widgets-1.0.0.js

xFmJzLc/1pRxm0E8+HIT0nF4IZPi7H0Z74/qlhIcoKgkJ20JX6dz13LLHc24E0fq

bokeh-widgets-1.0.0.min.js

1eKqmHJT75Elwy7zfQ4iP2wDDQoZWAnV7aISycekMKnC+qeLsub6ZzMJVQEi25W+

0.13.0

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:

  • 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.

And several other bug fixes and docs additions. For full details see the CHANGELOG.

Migration Guide

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.

Max Websocket Message Size

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.

New Hover fields

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 will look up values from a column like a normal @ field, but will use $name as the name of the column.

Both of these are especially useful in conjunction with stacked bar plots.

BokehJS Build

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.

To build now, run the command 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'.

Line Join Default

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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.13.0

Filename

Hash

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

0.12.16

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:

  • Hover tools now work with image glyphs (#3886)

  • BokehJS exposes a public reset method for Plots (#5071)

  • Categorical tick labels at all levels may be rotates (:bokeh-issue`7643`)

  • New CustomJSHover for highly customized tooltip fields (#7647)

  • 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)

And several other bug fixes and docs additions. For full details see the CHANGELOG.

Migration Guide

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

Deprecations Removed

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

  • responsive argument to plots and layout functions

  • Plot.toolbar_sticky property

  • Tool.plot property

  • bokeh.sampledata.population.load_population function

  • bokeh.util.notebook module

Release History

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.

CDS column_names property

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.

Tools renderers property

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.

bokehjs’ source directory renamed

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).

BOKEH_DOCS_MISSING_API_KEY_OK environment variable

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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.16

Filename

Hash

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

0.12.15

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:

  • Addressed several WebGL bugs (#6867, #7087, #7211, #7681)

  • Switched to Chrome headless for CI image tests, will support better WebGL testing (#6594)

  • Updated data source selections to be proper Bokeh models (#6845)

  • Fixed memory leaks with certain kinds of Bokeh server usage (#7468)

  • Added new glyphs for hexagon markers and hex tiles, and a new hexbin method #7638, (#4786)

  • Completed BokehJS port to TypeScript (#6481)

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

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

Migration Guide

DataTable

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

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

Selections

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

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

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

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

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

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

All code should update to use these new properties. For now read only access to things like selected['1d'].indices 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.

Grid Bounds

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

Minor Ticks

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

NO_DATA_RENDERERS

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

Document and ServerContext callbacks

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

# Was
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)

Sphinx Version

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

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.15

Filename

Hash

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

0.12.14

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:

  • Addition of several tools to draw and edit point, rect, multi-line and patches glyphs (#6370) by modifying the underlying ColumnDataSource.

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

Migration Guide

Deprecations Removed

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)

New Runtime Dependency

The package packaging, available via both conda and pip, was added as a new runtime dependency.

Mapping of Unknown Categorical Factors

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.

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.

Change To Text Glyph Legend

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 discussion, see #7337.

MercatorTileSource change

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.

Defining views’ CSS classes

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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.14

Filename

Hash

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

0.12.13

Bokeh Version 0.12.13 (Dec 2017) is a targeted bugfix release that addresses two issues:

  • push_notebook regression in 0.12.11

  • Windows package install failures due to reserved “aux” filename

For full details see the CHANGELOG.

Migration Guide

BokehJS Changes

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>

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.13

Filename

Hash

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

0.12.11

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)

  • Level-of-Detail works with linked plots (#5937)

  • Bokeh applications in notebooks made simpler to create (#6565)

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

Migration Guide

BokehJS Changes

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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.11

Filename

Hash

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

0.12.10

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.

Migration Guide

Deprecations Removed

The following previous deprecations have been removed:

  • app_path from functions in bokeh.client.session and bokeh.embed

  • standalone_html_page_for_models from bokeh.embed

  • 'patch' and 'stream' event names (use 'patching' and 'streaming')

  • webgl, x_mapper_type, y_mapper_type, and tool_events from Plot

  • Glyphs methods now only accept either all sequence literals, OR all column names

  • ResizeTool (previously made a no-op) has been removed

New Deprecations

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.

The function bokeh.sampledata.population.load_population has been deprecated. Use the attribute bokeh.sampledata.population.data instead.

Code Moves

The module bokeh.util.notebook has been deprecated. The functions it contains have been moved to bokeh.io.notebook.

The function bokeh.io.set_curdoc is now 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.

Dead Code Removal

The following unused code was removed immediately:

  • Aggregation from bokeh.core.enums

  • PyPy detection functions from 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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.10

Filename

Hash

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

0.12.9

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:

  • JupyterLab integration with the jupyterlab_bokeh extension

  • Efficient binary transport for sending arrays to clients

  • Improvements to new Graph/Network capability

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

Migration Guide

Deprecated bokeh.charts support removed

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.

Deprecated MPL compatibility removed

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.

Table Date Formatter Changes

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

  • standard strftime format strings (making it consistent with DatetimeTickFormatter)

  • any of the following additional predefined formats names:

    Format name(s)

    Format string

    Example Output

    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

    "%a, %e %b %Y"

    Sat, 1 Mar 2014

    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.

Old Testing Functions Removed

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.

The function bokeh.util.testing.print_versions has been removed immediately. The bokeh info command (or python -m bokeh info) should be used instead.

Refactor of bokeh.client and 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.

End of Official Support for Python 3.4

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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.9

Filename

Hash

bokeh-0.12.9.js

2n1fTKfEG8NK5eOl/uzz5WRMeBY0IcbbAPRSQl4TAmJSm+oozLKy5mytGXt/LqIg

bokeh-0.12.9.min.js

I518tTmFoEsiziyEXx6KlEya05UciIqD/pI4x9QMsTtRJFP4/qKRTgIEaqfxdB8u

bokeh-api-0.12.9.js

ujNI1r/KZ0el9vh1i9UzIgMnMOH996wNEhPbWySADVHW/AXQSQCp8374VsQfF6Vi

bokeh-api-0.12.9.min.js

LYP0vjORYFss0F7QlSV8BYwoJBF0h51bv60HCrx2WnScyabAQuf5RACDAOV89StY

bokeh-gl-0.12.9.js

PoU5iMsELEPXVdJXuhg02JIUF4xWx+O4oMF6EJYhAQq5fkUt4eEcr7RWBZi0ymuE

bokeh-gl-0.12.9.min.js

AX9eB59qOq2p1GUEEnnk4WR1Ythz8OrJ1ffSoJ7qqhmzasfbXq4apd37oN1NpLik

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

0.12.7

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.

  • New module bokeh.transform with helper functions for simplifying DataSpec expressions, including jitter(), dodge(), factor_cmap(), etc.

  • Added hbar_stack() and vbar_stack() to greatly simplify creation of stacked bar charts.

  • 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

    • Categorical Bar, Heatmap and Scatter plots easier to create with stable bokeh.plotting APIs

    • New User’s Guide chapter Handling categorical data

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

Migration Guide

New Embed Functions for Bokeh Applications

Two new embed functions similar to autoload_server are added, that have simpler APIs and are more focused:

Additionally, with these new methods one may choose to not load the JS/CSS resource files by passing resources="none" as a parameter.

Deprecations Removed

The following previously deprecated modules or features have been removed:

  • bokeh.icons module

  • Legacy anchor and legend locations left_center and right_center

  • ImageRGBA.rows and ImageRGBA.cols properties

  • HBox and VBox in bokeh.layouts

  • validate keyword argument for bokeh.io.save

New Deprecations

bokeh.embed.autoload_server has been deprecated and replaced with the two simpler functions server_document() and server_session() described above.

bokeh.models.tools.tool_events has been deprecated. Users should instead use the SelectionGeometry event present on Plot or Figure.

DynamicImageRenderer and Plot.add_dynamic_image have been deprecated. For GIS-related use-cases built on top of Bokeh, consider using GeoViews, or creating a Custom Extension.

ResizeTool is deprecated and also immediately is a NO-OP on the Python side. ResizeTool has been removed from BokehJS entirely.

BokehJS Widgets Bundle Split

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.

TapTool Callback Calling Convention

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 convention: 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.

DataTable Selection Highlighting Signal

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().

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:

customjs = CustomJS(args=dict(source=source), code="""
    source['selected']['1d'].indices = [1, 2]
    source.change.emit();
""")

Refactoring of bokeh.server contents

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.

  • 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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.7

Filename

Hash

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

0.12.6

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:

  • Headless, programmatic export of SVG and PNG images (#538)

  • New annotations Band and Whisker for displaying error estimates (#2352)

  • 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.

Migration Guide

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

New deprecations

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.

Old deprecations removed

All previous deprecations up to 0.12.3 have be removed. Below is the complete list of removals.

  • Deprecated Button.type property has been removed.

  • Deprecated Legend properties: legends, legend_margin, legend_padding, legend_spacing have been removed.

  • Deprecated DatetimeTickFormatter.formats property has been removed.

  • Tool dimensions may not only be specified with enum values.

New models for Scales

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.

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:

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.

As part of this work, some BokehJS attributes were renamed to be consistent with the new terminology:

Old

New

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.

New signaling API

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.

Old

New

@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)

Python Datetime handling

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.

Layout API and behaviour changes

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

for (var key in Bokeh.index) {
    Bokeh.index[key].resize(width, height);
}

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.6

Filename

Hash

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

0.12.5

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:

  • 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)

  • CustomJSTransform now available for CDS columns (#5015)

  • Sophisticated “pivot” example app contributed (#5894)

  • Themes now work with components and in Jupyter notebooks (#4722, #4952, )

Many other bugfixes and docs additions are also included. For full details see the CHANGELOG.

Migration Guide

Known Issues

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).

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.

New Deprecations

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.

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.

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.

Deprecations removed

All previous deprecations up to 0.12.0 have be removed. Below is the complete list of removals.

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.

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.

Additionally, the property bokeh.charts.builder.Builder.sort_legend was removed, as well as the following properties of Plot

  • border_fill

  • background_fill

  • logo

  • responsive

  • title_text_align

  • title_text_alpha

  • title_text_baseline

  • title_text_color

  • title_text_font

  • title_text_font_size

Host Parameter Obsoleted

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.

Document and Model Refactoring

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.

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.

The metaclass Viewable has been renamed to 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 and underscore.js removed from BokehJS

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.

Default tooltip position for lines changed to nearest point

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.

HTTP Request information for apps limited to query arguments

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.:

curdoc().session_context.request.arguments

Attempting to access any other attribute on request will result in an error.

Default save file

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.

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.

Reorganization of bokeh’s examples

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).

Enabling WebGL via URL parameters disallowed

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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.5

Filename

Hash

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

0.12.4

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:

  • Efficient binary array protocol. (#2204)

  • A general mechanism to add CustomJS callbacks to any property. (#5498)

  • Several fixes to log plots. (#2789, #3834, #5389, #5549, #5576)

  • Fixes related to custom extensions. (#5315, #5590)

  • Guidance and examples for embedding a Bokeh server directly in standalone scripts, Jupyter notebooks, and Tornado and Flask applications.

  • Support for read-only (client-side) properties, e.g. plot inner dimensions (#5199)

  • Improved documentation for the bokeh.palettes module. (#5619)

  • Major refactor of bokeh.core including expanded documentation and tests (#5626, #5627)

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

Migration Guide

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

Broken Dialog Removed

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

Custom Extension Import/Export

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

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

Model = require "model"

class DateGapTickFormatter extends TickFormatter
    # implementation here

module.exports =
    Model: DateGapTickFormatter

should be re-written as:

import {Model} from "model"

export class DateGapTickFormatter extends TickFormatter
    # implementation here

Legend Locations

To improve consistency, the following locations names have changed:

old location name

new location name

left_center

center_left

right_center

center_right

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

App Current Directory

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

Window Titles

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

Positional Argument Order For hbar

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

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

Old bokeh-server Command Removed

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

Cruft auto Functions removed

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

Eco Templates No Longer Supported

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

Base64 serialisation and Python 3.3

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

BokehJS BackboneView $ Removed

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

Additionally, use of Bokeh.$ and Bokeh._

Refactor of bokeh.core

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

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

  • bokeh.core.has_props

  • bokeh.core.properties

  • 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.

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

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

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.4

Filename

Hash

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

0.12.3

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

Migration Guide

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

Specifying Font Sizes

Setting text font size properties directly as strings (e.g. font_size="13px") has been UN-DEPRECATED. This usage will continue to work, without any further deprecation warning. (https://github.com/bokeh/bokeh/pull/5274)

output_server

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)

Glyph Methods and Data Sources

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

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)

Legend

Several legend properties had duplicative legend_ prefixes. The following property names have been changed:

old property name

new property name

legend_margin

margin

legend_padding

padding

legend_spacing

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)

Dimensions

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)

BokehJS Notes

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.3

Filename

Hash

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

0.12.2

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

Migration Guide

Jupyter Notebook output changes

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.

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:

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)

BokehJS API Changes

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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.2

Filename

Hash

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

0.12.1

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:

  • Add .patch method to ColumnDataSource for efficient partial updates.

  • Add .visible property to all glyphs for easy on/off capability.

  • Add qualitative Brewer colormapps to bokeh.palettes.

  • Add new VBar and HBar glyph types.

  • 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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.1

Filename

Hash

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

0.12.0

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

  • Many small bug fixes

Migration Guide

Known Issues

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 Maps

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:

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.

Examples

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.

BokehJS

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.

Deprecations and Compatibility

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:

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:

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.

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:

session.show(plot)

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.12.0

Filename

Hash

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

0.11.1

Bokeh version 0.11.1 (Feb 2016) focuses on providing bug fixes, small features, and documentation improvements. Highlights include:

  • 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.

Migration Guide

  • 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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.11.1

Filename

Hash

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

0.11.0

Bokeh Version 0.11.0 (Jan 2016) is a large release with many new improvements

  • New Tornado and websocket-based Bokeh Server

    • bokeh command line tool for creating applications

    • 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

  • UX improvements

    • 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

Migration Guide

Known Issues

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.

Deprecations

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.

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 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.

The following modules have been deprecated (but still work), with new counterparts as described in this table:

Old location

New location

bokeh.browserlib

bokeh.util.browser

bokeh.properties

bokeh.core.properties

bokeh.mixins

bokeh.core.property_mixins

bokeh.plotting_helpers

bokeh.plotting.helpers

bokeh.templates

bokeh.core.templates

Additionally, the following modules that should not be of interest to general users have been moved immediately, without deprecation:

Old location

New location

bokeh._json_encoder

bokeh.core.json_encoder

bokeh.compat

bokeh.core.compat

bokeh.enums

bokeh.core.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.

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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.11.0

Filename

Hash

bokeh-0.11.0.js

BCLKhG2LJGzZrHI5d9wNeSUY3BhBNW3u3Bchu2CYqmqHiNP0SDCbVmko+7fBtqz5

bokeh-0.11.0.min.js

7cHWaPO0YU3YviGjB5dqoSXT0jjWVhNESOJUiPmcqNfUxB8f9AWRn/jI8jxv9b9B

bokeh-compiler-0.11.0.js

h/zuZsBTml9IKapUtC2xpBI8nWH6BwhhKdUbS3Esgk3T7OKCiRThTPUl7cvFdkB4

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

0.10.0

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

Migration Guide

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

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.10.0

Filename

Hash

bokeh-0.10.0.js

roqWuzxIb+9icxQDCZC9kqQ+UpNXcVUuygQqTqfoWoGd585muxXNqIYPVYQ1YGaj

bokeh-0.10.0.min.js

bZmM9B4HEi1+YxYgaV/+kkACMwPYJp6O4j69SbqO5xytxFRyRnBzsrwZ4LURsnyh

0.9.3

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).

  • 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

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.9.3

Filename

Hash

bokeh-0.9.3.js

XnmmxRn1r5D8I0Jma6Zsv+LFhTgGkN3bvg2qCyTbz/9VFAFYQmLV1w+d+nBKb+Fo

bokeh-0.9.3.min.js

MWZj9IcmF3kjXMB3c625YyGg1zi4AstdG1YbBMPcmOCvOAfzCLhiF9wzK97XvHKE

0.9.2

Bokeh 0.9.2 (Jul 2015) provides several bugfixes. Additionally, the MPL compatibility layer was updated.

  • 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

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.9.2

Filename

Hash

bokeh-0.9.2.js

OexLuYVuOvGkuzoCz7W33ojy7pdvttmoMVf0p5qy8gCIZfsYNQKw76DFH3FdR8XF

bokeh-0.9.2.min.js

ek9Fq+5oN4hQ3hDiprqdFVJQ6aE/8QEHZ3TzCM5qWRCpv8nEqXUb/kuogFWmDT/U

0.9.1

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.

  • 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

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.9.1

Filename

Hash

bokeh-0.9.1.js

he0Wjre3gUAW9isOJSLQJ3Tegh7T03wktOnlM9+hbsY4U9RtKMSKTIy/u7OPgOXe

bokeh-0.9.1.min.js

KI76vrite4JyequGokgYmKf8VYfmZKQ2X4etUngx1kctDHC3DQjfFDHC8N4xwoUN

0.9.0

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.

  • 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

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.9.0

Filename

Hash

bokeh-0.9.0.js

lQ3pi4yDh59XrNdnZ39u0rF7F/m9pOX8G6V8pq/s/dxm3DDZMXeewNHUOpMZWK2T

bokeh-0.9.0.min.js

Xs5IpvkTupznAMbyk+r7S0UBRGxznpBEP8f6dbauA8GInH6Epfchmwj9HTFWO1Lw

0.8.2

Bokeh 0.8.2 (Mar 2015) is a quick release focused on some refactoring, bug fixes and improved documentation.

  • 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

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.8.2

Filename

Hash

bokeh-0.8.2.js

MgfXSfLE3qlEldO9lhHDch1n1t1FR0Gl/Xnzjt4GYpAWXJphE9jwGHJkkGZwbAPU

bokeh-0.8.2.min.js

hx0bQYsgEXSQIr/4Bm1VoqrVWv6NUPcXNvCtZClxdrijVYpSA5ejSY9vpSqwoNIv

0.8.1

Bokeh 0.8.1 (Feb 2015) is focused on stability, bug fixes and improved documentation.

  • 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

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.8.1

Filename

Hash

bokeh-0.8.1.js

PoysNTe21L9RYuf9VTcSUu7mUq/PfF+OVNm+dDWyBTZGjAujKy3hA9YzCax5suXg

bokeh-0.8.1.min.js

RjPbDoAJBnvxqECnoXk+wTHMrah2wPmq6WIiu1nsaiskZxQTaNXUzM1ii6GuYgSv

0.8.0

Bokeh 0.8.0 (Feb 2015) includes many major new features:

  • 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.

Sub-Resource Integrity Hashes

Table of SRI Hashes for version 0.8.0

Filename

Hash

bokeh-0.8.0.js

sbVBtMnlyuSkyNDLKWwhp2ElmY6IZPsHlWq34GllwteWbzTCBx5PmbLuPByFgEAn

bokeh-0.8.0.min.js

ZIjfRVQrX3bqAK3Ye8yjicjVMh16aS+NfmeGNoRUUkXuD1PQZItEuDpEWpAwf4GG

0.7.1

Bokeh 0.7.1 (Jan 2015) focused on stability, bug fixes, improved documentation and better examples.

  • Several bokeh.charts bug fixes and enhancements, such as configurable tools

  • Docs improvements, in particular, documenting json for bokeh.models

  • Mpl compatibility improved, now returning the plot object

  • A lot of encoding fixes, including fixes in some of our sample data

  • Faster runs in TravisCI using the new docker-based containerized infrastructure

  • New and improved examples, such as the Interactive Image Processing with Numba and Bokeh notebook

0.7.0

Bokeh 0.7.0 (Dec 2014) focused on new features and capability, particularly arounduser interface and experience:

  • IPython widgets and animations without a Bokeh server

  • Touch UI working for tools on mobile devices

  • Vastly improved linked data table

  • More new (and improving) bokeh.charts (high level charting interface)

  • Color mappers on the python side

  • Improved toolbar

  • Many new tools: lasso, poly, and point selection, crosshair inspector

Migration Guide

Additionally, note that the “implicit” plotting interface of plotting.py has been deprecated, and will be removed in Bokeh 0.8. In a nutshell, code such as:

figure()
hold()
line()
circle()
show()

Should be replaced with the more explicit code:

p = figure()
p.line()
p.circle()
show(p)

0.6.1

Bokeh 0.6.1 (Sep 2014) is a minor release.

  • Toolbar enhancements

  • bokeh-server fixes

  • Improved documentation

  • Button widgets

  • Google map support in the Python side

  • Code cleanup in the JS side and examples

  • New examples

0.6.0

Bokeh 0.6.0 (Sep 2014) is an incremental update:

  • Abstract Rendering recipes for large data sets: isocontour, heatmap, hdalpha

  • Improved, configurable tool bar for plots

  • Full Python 3 support for bokeh-server

  • Much expanded User Guide

  • Support for multiple axes

  • Plot object graph query interface

  • New charts in bokeh.charts: TimeSeries and Categorical HeatMap

  • Hit-testing for patch glyphs

0.5.2

Bokeh 0.5.2 (Aug 2014) is an incremental update:

  • New Layout system

  • Improved automate testing infrastructure

  • AR testing, server-side downsample fixes and ISO Contours

  • New “dashboard-like” example: examples/app/applet/stock_example.py

0.5.1

Bokeh 0.5.1 (Jul 2014) is an incremental update:

  • Hover activated by default

  • Boxplot in bokeh.charts

  • Better messages when you forgot to start the bokeh-server

  • Fixed some packaging bugs

  • Fixed NBviewer rendering

  • Fixed some Unicodeencodeerror

0.5.0

Bokeh 0.5.0 (Jul 2014) adds the following features:

  • Widgets

  • Initial AR integration

  • bokeh.charts (scatter, bar, histogram)

  • improved embedding API

  • minor ticks, plot frame, and log axes

0.4.4

Bokeh 0.4.4 (Apr 2014) is a minor release:

  • Improved MPL interface, subplots, styling plus more examples

  • TravisCI testing integration

  • Tool enhancements, constrained pan/zoom, more hover glyphs

  • Server remote data and downsampling examples

  • Initial work for Bokeh “app” concept

0.4.2

Bokeh 0.4.2 (Mar 2014) is a minor release:

  • Improved MPL interface, PolyCollection plus examples

  • Extensive tutorial with exercises and solutions

  • %bokeh magic for IPython notebook

  • InMemory storage backend for bokeh-server (usable without Redis)

0.4.1

Bokeh 0.4.1 (Feb 2014) is a minor release:

  • Improved MPL interface, LineCollection plus examples

  • Scala interface

  • Categorical axes and ranges

  • Hover tool

  • Improved pan/zoom tool interactions

0.4.0

Bokeh 0.4.4 (Feb 2014) is an incremental release with several important new pieces of work:

  • Preliminary work on Matplotlib support: convert MPL figures to Bokeh plots

  • Tool improvements:

    • “always on” pan tool and wheel zoom tool

    • box zoom tool

    • viewport reset tool

  • Enhanced datetime axis, with better performance and nicer ticking

  • Expanded testing, including TravisCI integrations and static image output using PhantomJS

  • RGBA and color mapped image plots now available from Python

  • Python 3 support!

  • Vastly improved documentation for glyphs, with inline examples and JSFiddle integration

0.3.0

Bokeh 0.3.0 (Nov 2013) is a minor release:

  • refactor bokehjs to use grunt for coffee build

  • merge bokeh and bokehjs repositories

  • various bug fixes

  • additional and improved examples and docs

0.2.0

Bokeh 0.2.0 (Oct 2013) is a minor release:

  • bokeh.plotting interface for schematized plotting, that wraps the low-level interface

  • Performance improvements in BokehJS

  • Fixed rendering glitches for HiDPI/Retina displays

  • Greatly improved Python interface architecture

  • Many more examples, much improved docs

0.1.0

Bokeh 0.1.0 (Apr 2013) is the initial public release of the Bokeh project:

  • Basic low-level interface, consisting of wrapper objects for BokehJS rendering primitives, glyphs, tools

  • Beginnings of the ggplot-style interface that wraps the low-level interface

  • Simple line/scatter/bar/image plots with a Matplotlib-like interface

  • Static HTML output

  • Live server output

  • IPython notebook embedding capability

  • Table widget

  • Pan, Zoom, Select, Resize tools

  • initial Python implementation of Abstract Rendering