Skip to content

Latest commit

 

History

History
1465 lines (1094 loc) · 107 KB

CHANGELOG.md

File metadata and controls

1465 lines (1094 loc) · 107 KB

Change Log for Dash

All notable changes to dash will be documented in this file. This project adheres to Semantic Versioning.

[2.10.0] - 2023-05-25

Changed

  • #2538 Add an upper bound to Flask and Werkzeug versions at <2.2.3 because we expect the Dash ecosystem to be incompatible with the next minor release of Flask (this excludes the current latest Flask release 2.3.x). We will raise the upper bound to <2.4 after we fix incompatibilities elsewhere in the Dash ecosystem.

Added

  • #2540 Add include_pages_meta=True to Dash constructor, and fix a security issue in pages meta tags #2536.

Fixed

  • #2508 Fix error message, when callback output has different length than spec
  • #2207 Fix object of components support.
  • #2500 Passing customdata by click for scattermapbox, fix #2493
  • #2513 Raise error when iterating over patch objects, fix #2512

Updated

  • #2533 and #2538 Update Plotly.js to v2.23.2 from v2.20.0.

    • Feature release 2.23.0 adds legend/colorbar xref/yref.
    • Feature release 2.22.0 adds legend references to traces.
    • Feature release 2.21.0 adds label.texttemplate to parametric shapes.
    • Patch releases 2.23.1 and 2.23.2 fix heatmap rendering on iOS and Safari when zsmooth is set to false and shape text when drawing a new shape.
  • #2538 Update JS dependencies in dcc, html, dash-table, dash-renderer, and dash

[2.9.3] - 2023-04-13

Fixed

  • #2489 Fix location change event handling when Location objects are removed from the layout. Event handlers would not be removed and eventually change props of a random DOM element, fix #1346
  • #2498 Fix error when caching callbacks which return Patch objects by making Patch objects picklable
  • #2491 Fix clientside inline function name not found, fix #2488

[2.9.2] - 2023-03-29

Fixed

  • #2479 Fix KeyError "Callback function not found for output [...], , perhaps you forgot to prepend the '@'?" issue when using duplicate callbacks targeting the same output. This issue would occur when the app is restarted or when running with multiple gunicorn workers.
  • #2471 Fix allow_duplicate output with clientside callback, fix #2467
  • #2473 Fix background callbacks with different outputs but same function, fix #2221

[2.9.1] - 2023-03-17

Fixed

  • #2461 Fix pytest plugin make report when testing not installed, fix #2420

[2.9.0] - 2023-03-16

Breaking

  • #2450 Set label style display: block if inline is false in RadioItems & Checklist components. To keep previous behavior, set inline=True. This is already how it was described and worked in our documentation and other places with CSS stylesheets that set the default orientation of RadioItems and Checklist options to vertical (including Dash Design Kit), but for unstyled pages it is a breaking change.

Added

  • #2392 Improved pages feature:
    • Accept an absolute path or a pathlib.path for pages_folder, to match assets_folder
    • Fix inferring use_pages=True when you supply a custom pages_folder
    • Fix for pages_folder that includes special characters
    • New test fixture clear_pages_state
    • Make imported pages act more like regular Python modules
  • #2068 Added refresh="callback-nav" in dcc.Location. This allows for navigation without refreshing the page when url is updated in a callback.
  • #2417 Add wait_timeout property to customize the behavior of the default wait timeout used for by wait_for_page, fix #1595
  • #2417 Add the element target text for wait_for_text* error message, fix #945
  • #2425 Add add_log_handler=True to Dash init, if you don't want a log stream handler at all.
  • #2260 Experimental support for React 18. The default is still React v16.14.0, but to use React 18 you can either set the environment variable REACT_VERSION=18.2.0 before running your app, or inside the app call dash._dash_renderer._set_react_version("18.2.0"). THIS FEATURE IS EXPERIMENTAL. It has not been tested with component suites outside the Dash core, and we may add or remove available React versions in any future release.
  • #2414 Add dash.Patchfor partial update Output props without transferring the previous value in a State.
  • #2414 Add allow_duplicate to Output arguments allowing duplicate callbacks to target the same prop.

Fixed

  • #2429 Fix side effect on updating possible array children triggering callbacks, fix #2411.
  • #2417 Disable the pytest plugin if dash[testing] not installed, fix #946.
  • #2417 Do not swallow the original error to get the webdriver, easier to know what is wrong after updating the browser but the driver.
  • #2425 Fix multiple log handler added unconditionally to the logger, resulting in duplicate log message.
  • #2415 Fix background callbacks progress not deleted after fetch.
  • #2426 Set default interval to 1 second for app.long_callback, restoring the behavior it had before v2.6.0 when we introduced backround=True callbacks.

Changed

  • #2425 Moved the logger namespace to dash.dash, as library logger it should be on that namespace instead of the user app.

Updated

  • #2241 Update Plotly.js to v2.20.0 from v2.18.0.
    • Feature release 2.20.0 adds automargin to the main plot title.
    • Feature release 2.19.0 adds text labels to layout.shapes, and adds a labelalias property to replace specific axis tick labels.
    • Patch releases 2.18.1, 2.18.2, 2.19.1 fix various bugs.

[2.8.1] - 2023-01-30

Fixed

  • #2400 Added disable_n_clicks=True to the html.Div components in page_container.

[2.8.0] - 2023-01-24

Added

  • #2389 Added disable_n_clicks prop to all html components to make it possible to remove onclick event listeners

Fixed

  • #2388 Fix #2368 ordering or Pattern Matching ALL after update to the subtree.

Updated

  • #2367 Updated the default favicon.ico to the current Plotly logo
  • #2394 Update Plotly.js to v2.18.0 from v2.16.4.
    • Feature release 2.18.0 adds sync tickmode, so several axes can share ticks and gridlines
    • Feature release 2.17.0 adds automargin for multiple Y axes, a grouped mode for scatter traces, and rounded corners on treemap traces
    • Patch releases 2.17.1 and 2.16.5 fix various bugs

[2.7.1] - 2022-12-12

Fixed

  • #2344 Fix #1519, a case where dependent callbacks can be called too many times and with inconsistent inputs
  • #2332 Add key to wrapped children props in list.
  • #2336 Fix inserted dynamic ids in component as props.

Updated

  • #2361 Dependencies upgrade.
    • Update Plotly.js to v2.16.4 (from v2.16.1): fix several bugs, particularly related to updating mapbox graphs.
  • #2363 Update html attributes for ol

[2.7.0] - 2022-11-03

Removed

  • #2282 Dropped support for Internet Explorer. Our build process now targets vendor-supported browsers released in the last 7 years. Currently this means ES2015 but over time this will natually advance as older browser versions pass the 7-year threshold.

Added

  • #2349 Added new dcc.Geolocation component
  • #2261 Added new placeholder_text property to filterOptions for DataTable which allows overriding the default filter field placeholder.

Updated

  • #2282 Widespread dependency upgrades
    • Update Plotly.js to v2.16.1 (from v2.13.3)
      • Feature release 2.14.0 adds arrows to sankey links, and editSelection option to config.
      • Feature release 2.15.0 adds directed arrowheads and markers to scatter and scatter-like traces and increased control of automargin and legend sizing
      • Feature release 2.16.0 adds clustering to scattermapbox traces and restricted bounds to mapbox plots.
      • Patch releases 2.15.1 and 2.16.1 fix several bugs.

Fixed

  • #2292 Pages: find the 404 page even if pages_folder is nested, or the 404 page is nested inside pages_folder.
  • #2265 Removed deprecated before_first_request as reported in #2177.
  • #2257 Fix tuple types in the TypeScript component generator.
  • #2293 Fix Dropdown useMemo not detecting equal objects
  • #2277 Use dropdown styles from node_modules, instead of from stored css file
  • #2105 Fix order of dash component libraries imports.

Changed

  • #2291 Move flask-compress dependency to new extras requires dash[compress]

[2.6.2] - 2022-09-23

Fixed

  • #2237 Ensure calls to plotly.js from dcc.Graph are properly sequenced even if React initiates multiple render cycles in quick succession.
  • #2218 Fix bug #1348 Validate children prop (required or not).
  • #2223 Exclude hidden folders when building dash.page_registry.
  • #2182 Fix #2172 Make it so that when using pages, if suppress_callback_exceptions=True the validation_layout is not set.
  • #2152 Fix bug #2128 preventing rendering of multiple components inside a dictionary.
  • #2187 Fix confusing error message when trying to use pytest fixtures but dash[testing] is not installed.
  • #2202 Fix bug #2185 when you copy text with multiple quotes into a table
  • #2226 Fix #2219 pages register & background callbacks.

[2.6.1] - 2022-08-01

Fixed

  • #2175 Fix #2173 callback output of ndarray and no_update check.
  • #2146 Remove leftover debug console.log statement.
  • #2168 Reverts #2126 (supporting redirect from root when using pages) until the new bugs introduced by that PR are fixed.

Updated

  • #2167 Update Plotly.js to v2.13.3 (from v2.13.1) including patch release v2.13.2 and patch release v2.13.3.
    • Emit plotly_selected event on plot API calls and GUI edits.
    • Fix sankey select error (regression introduced in 2.13.0).
    • Handle missing drag layer of invisible sankey traces to fix select error.
    • Emit selection event in shape drawing dragmodes when an existing selection is modified.

[2.6.0] - 2022-07-14

Added

  • #2109 Add maxHeight to Dropdown options menu.
  • #2039 Long callback changes:
    • Add background=False to dash.callback to use instead of app.long_callback.
    • Add previous app.long_callback arguments to dash.callback (interval, running, cancel, progress, progress_default, cache_args_to_ignore, manager)
  • #2110 Add search prop to dcc.Dropdown options, allowing to search the dropdown options with something other than the label or value.

Fixed

  • #2126 Fix bug where it was not possible to redirect from root when using pages.
  • #2114 Fix bug #1978 where text could not be copied from cells in tables with cell_selectable=False.
  • #2102 Fix bug as reported in dash-labs #113 where files starting with . were not excluded when building dash.page_registry.
  • #2100 Fixes bug where module name in for a custom not_found_404 page is incorrect in the dash.page_registry when not using the pages folder.
  • #2098 Accept HTTP code 400 as well as 401 for JWT expiry
  • #2097 Fix bug #2095 with TypeScript compiler and React.FC empty valueDeclaration error & support empty props components.
  • #2104 Fix bug #2099 with Dropdown clearing search value when a value is selected.
  • #2039 Fix bugs in long callbacks:
    • Fix #1769 and #1852 short interval makes job run in loop.
    • Fix #1974 returning no_update or raising PreventUpdate not supported with celery.
    • Fix use of the callback context in celery long callbacks.
    • Fix support of pattern matching for long callbacks.
  • #2110 Fix dcc.Dropdown search with component as prop for option label.
  • #2131 Add encoding to file open calls. Fix bug #2127.

Changed

  • #2116 Rename long callbacks to background callbacks
    • Deprecated dash.long_callback.managers.CeleryLongCallbackManager, use dash.CeleryManager instead.
    • Deprecated dash.long_callback.managers.DiskcacheLongCallbackManager, use dash.DiskcacheManager instead.
    • Deprecated dash constructor argument long_callback_manager in favor of background_callback_manager.

Updated

  • #2134 Upgrade Plotly.js to v2.13.1 (from v2.12.1) including feature release 2.13.0 and patch release 2.13.1
    • Add persistent selections via layout attributes selections, newselection, and activeselection, along with an updated UI allowing you to modify a selection you created.
    • Add unselected line styling to parcoords traces.
    • Add more quartile algorithms to violin traces.
    • More flexible axis automargin behavior.
    • And several other enhancements and bug fixes.

[2.5.1] - 2022-06-13

Fixed

  • #2087 Fix bug #2086 in which using id as a key within a component's id breaks the new callback context's args_grouping function.
  • #2084 In dash 2.5.0, a default viewport meta tag was added as recommended for mobile-optimized sites by mdn This feature can be disabled by providing an empty viewport meta tag. e.g. app = Dash(meta_tags=[{"name": "viewport"}])
  • #2090, #2092. Fixed bug where the path to the pages_folder was incorrect on Windows.

Removed

  • #2087 Removed the undocumented callback context args_grouping_values property which was incompatible with pattern-matching callbacks.

[2.5.0] - 2022-06-07

Added

  • #1947 Added pages - a better way to build multi-page apps. For more information see the forum post.
  • #1965 Add component as props.
  • #2049 Added wait_for_class_to_equal and wait_for_contains_class methods to dash.testing

Changed

  • #2050 Changed find_element and find_elements to accept an attribute argument that aligns with Selenium's By class, allowing you to search elements by other attributes. Default value is CSS_SELECTOR to maintain backwards compatibility with previous find_elements.

Fixed

  • #2043 Fix bug #2003 in which dangerously_allow_html=True + mathjax=True works in some cases, and in some cases not.
  • #2065 Fix bug #2064 rendering of dcc.Dropdown with a value but no options.
  • #2047 Fix bug #1979 in which DASH_DEBUG as environment variable gets ignored.
  • #2070 Fix bug #2066 nested types triggering maximum call stack error when building typescript components.

[2.4.1] - 2022-05-11

Fixed

  • Fix #2045 import error when using pytest but dash[testing] is not installed.

[2.4.0] - 2022-05-11

Added

  • #1952 Improved callback_context

    • Closes #1818 Closes #1054
    • adds dash.ctx, a more concise name for dash.callback_context
    • adds ctx.triggered_prop_ids, a dictionary of the component ids and props that triggered the callback.
    • adds ctx.triggered_id, the id of the component that triggered the callback.
    • adds ctx.args_grouping, a dict of the inputs used with flexible callback signatures.
  • #2009 Add support for Promises within Client-side callbacks as requested in #1364.

  • #1956 Add TypeScript components generation.

  • #2034 Add link_target prop to dcc.Markdown component. Closes #1827

  • #2035 Add type annotations to testing fixtures.

Fixed

  • #2029 Restrict the number of props listed explicitly in generated component constructors - default is 250. This prevents exceeding the Python 3.6 limit of 255 arguments. The omitted props are still in the docstring and can still be provided the same as before, they just won't appear in the signature so autocompletion may be affected.

  • #1968 Fix bug #1877, code which uses merge_duplicate_headers and style_header_conditional to highlight columns, it incorrectly highlights header cells.

  • #2015 Fix bug #1854 in which the combination of row_selectable="single or multi" and filter_action="native" caused the JS error.

  • #1976 Fix #1962 in which DatePickerSingle and DatePickerRange are extremely slow when provided a long list of disabled_days.

  • #2035 Fix #2033 In-App error reporting does not render HTML.

  • #1970 dcc.Dropdown Refactor fixes:

    • Fix bug #1868 value does not update when selected option removed from options.
    • Fix bug #1908 Selected options not showing when the value contains a comma.

Changed

  • #1751 Rename app.run_server to app.run while preserving app.run_server for backwards compatibility.

  • #1839 The callback decorator returns the original function, not the wrapped function, so that you can still call these functions directly, for example in tests. Note that in this case there will be no callback context so not all callbacks can be tested this way.

  • #2016 Drop the 375px width from default percy_snapshot calls, keep only 1280px

  • #2027 Improve the error message when a user doesn't wrap children in a list

Updated

  • #2016, #2032, and #2042 Widespread dependency upgrades
    • Upgrade Plotly.js to v2.12.1 (from v2.11.0).
      • Feature release 2.12.0 adds minor ticks and gridlines, as well as dashed gridlines.
      • Patch release 2.11.1 fixes regl-based traces in strict CSP mode, however you must manually switch to the strict bundle to use this.
      • Patch release 2.12.1 fixes several bugs.
    • Upgrade black to v22.3.0 for Python 3.7+ - if you use dash[ci] and you call black, this may alter your code formatting slightly, including more consistently breaking Python 2 compatibility.
    • Many other mainly JS dependency upgrades to the internals of Dash renderer and components. These may patch bugs or improve performance.

[2.3.1] - 2022-03-29

Fixed

  • #1963 Fix #1780 flask shutdown deprecation warning when running dashduo threaded tests.
  • #1995 Fix #1992 ImportError: cannot import name 'get_current_traceback' from 'werkzeug.debug.tbtools'.

[2.3.0] - 2022-03-13

Added

  • #1949 Add built-in MathJax support to both dcc.Markdown and dcc.Graph. A new boolean prop mathjax was added to these two components, defaulting to False. Set mathjax=True to enable math rendering. This work uses MathJax v3, although dcc.Graph and Plotly.js can also be used with MathJax v2.
    • In dcc.Markdown this has two flavors: inline math is any content between single dollar signs, for example "$E=mc^2$", and "display" math (on its own line, potentially multi-line) is delimited by double dollar signs.
    • In dcc.Graph, most text fields (graph and axis titles, trace names, scatter and bar text) can use math, and it's enabled with single dollar sign delimiters. A limitation here is that currently a given piece of text can only be one or the other: if math is found, everything outside the delimiters is ignored. See https://plotly.com/python/LaTeX/ for details.
    • For an intro to LaTeX math, see https://en.wikibooks.org/wiki/LaTeX/Mathematics.
    • Big thanks to Equinor for sponsoring this development, including the related work in Plotly.js!

Updated

  • #1949 Upgrade Plotly.js to v2.11.0 (from v2.9.0)
    • Feature release 2.10.0:
      • Support for MathJax v3
      • fillpattern for scatter traces with filled area
    • Feature release 2.11.0:
      • Every trace type can now be rendered in a stricter CSP environment, specifically avoiding unsafe-eval. Please note: the regl-based traces (scattergl, scatterpolargl, parcoords, and splom) are only strict in the strict bundle, which is NOT served by default in Dash. To use this bundle with Dash, you must either download it and put it in your assets/ folder, or include it as an external_script from the CDN: https://cdn.plot.ly/plotly-strict-2.11.0.min.js. All other trace types are strict in the normal bundle.
    • Patch release 2.10.1 containing a bugfix for mesh3d traces.

Fixed

  • #1915 Fix bug #1474 when both dcc.Graph and go.Figure have animation, and when the second animation in Figure is executed, the Frames from the first animation are played instead of the second one.

  • #1953 Fix bug #1783 in which a failed hot reloader blocks the UI with alerts.

  • #1942 Fix bug #1663 preventing pie traces from sending customdata with clickData and other events.

[2.2.0] - 2022-02-18

Added

  • #1923:
    • dash.get_relative_path
    • dash.strip_relative_path
    • dash.get_asset_url This is similar to dash.callback where you don't need the app object. It makes it possible to use these functions in the pages folder of a multi-page app without running into the circular app imports issue.

Updated

  • #1911 Upgrade Plotly.js to v2.9.0 (from v2.8.3).

    • Adds ticklabelstep to axes to reduce tick labels while still showing all ticks.
    • Displays the plotly.js version when hovering on the modebar. This helps debugging situations where there might be multiple sources of plotly.js, for example /assets vs the versions built into dcc or ddk.
  • #1930 Upgrade JavaScript dependencies across renderer and all components.

Fixed

  • #1932 Fixes several bugs:
    • Restores compatibility with IE11 #1925
    • Restores style_header text alignment in Dash Table #1914
    • Clears the unneeded webdriver-manager requirement from dash[testing] #1919

[2.1.0] - 2022-01-28

Changed

  • #1876 Delays finalizing Dash.config attributes not used in the constructor until init_app().

  • #1869, #1873 Upgrade Plotly.js to v2.8.3. This includes:

    • Feature release 2.5.0:
      • 3D traces are now compatible with no-unsafe-eval CSP rules.
    • Feature release 2.6.0:
      • Add smith subplots and scattersmith traces, for drawing Smith charts.
    • Feature release 2.7.0:
      • Add text data for histogram traces.
      • Fix an interaction between uirevision and autorange that pops up in some cases of mixed clientside / serverside figure generation.
    • Feature release 2.8.0:
      • Add horizontal colorbars.
      • Add text data on heatmap and related trace types.
      • Control legend group title fonts.
    • Patch releases 2.5.1, 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.8.1, 2.8.2, and 2.8.3 containing bugfixes.
    • This PR also upgrades various other dependencies of dash renderer and component suites.
  • #1745: Improve our extras_require: there are now five options here, each with a well-defined role:

    • dash[dev]: for developing and building dash components.
    • dash[testing]: for using the pytest plugins in the dash.testing module
    • dash[diskcache]: required if you use DiskcacheLongCallbackManager
    • dash[celery]: required if you use CeleryLongCallbackManager
    • dash[ci]: mainly for internal use, these are additional requirements for the Dash CI tests, exposed for other component libraries to use a matching configuration.

Added

  • #1883 in DataTable added page_current to persisted_props as requested in #1860

  • #1763:

    Dash and Dash Renderer

    • Input, State, and Output now accept components instead of ID strings and Dash callback will auto-generate the component's ID under-the-hood if not supplied. This allows usage like:
    my_input = dcc.Input()
    my_output = html.Div()
    app.layout = html.Div([my_input, my_output])
    
    @dash.callback(Output(my_output, 'children'), Input(my_input, 'value'))
    def update(value):
        return f'You have entered {value}'

    Or, if using Python >=3.8 you can use the := walrus operator:

    app.layout = html.Div([
        my_input := dcc.Input(),
        my_output := html.Div()
    ])
    
    @dash.callback(Output(my_output, 'children'), Input(my_input, 'value'))
    def update(value):
        return f'You have entered {value}'

    #1894 restricted this feature so auto-generated IDs are not allowed if the app uses dash_snapshots (a Dash Enterprise package) or if the component uses persistence, as this can create confusing errors. Callback definitions can still reference components in these cases, but those components must have explicit IDs.

    Dash Core Components

    Rearranged Keyword Arguments & Flexible Types

    Dropdown, RadioItem, and Checklist

    • Rearranged Keyword Arguments - options & value are now the first two keywords which means they can be supplied as positional arguments without the keyword. Supplying the keywords (options= and value=) is still supported.
    • Flexible Types - options can be supplied in two new forms:
      1. An array of string|number|bool where label and value are equal to the items in the list.
      2. A dictionary where the keys and values set as value and label respectively.

    Before:

    dcc.Dropdown(
        options=[
            {'label': 'New York', 'value': 'New York'},
            {'label': 'Montreal', 'value': 'Montreal'},
        ],
        value='New York'
    )

    or

    dcc.Dropdown(
        options=[
            {'label': 'New York', 'value': 'NYC'},
            {'label': 'Montreal', 'value': 'MTL'},
        ],
        value='New York'
    )

    After:

    dcc.Dropdown(['New York', 'Montreal'], 'New York')

    Or

    dcc.Dropdown({'NYC': 'New York', 'MTL': 'Montreal'}, 'New York')

    RangeSlider & Slider

    • Rearranged Keyword Arugments - min, max, and step are now the first three keyword arguments which means they can be supplied as positional arguments without the keyword.
    • Flexible Types
      • step will be calculated implicitly if not given.
      • marks will be auto generated if not given. It will use min and max and will respect step if supplied. Auto generated marks labels are SI unit formatted. Around 5 human-readable marks will be created.
      • To remove the Slider's marks, set marks=None.

    Before:

    dcc.Slider(marks={1: 2, 2: 2, 3: 3})

    After:

    dcc.Slider(min=1, max=3, step=1)

    Or equivalently:

    dcc.Slider(1, 3, 1)

    Step can also be omitted and the Slider will attempt to create a nice, human readable step with SI units and around 5 marks:

    dcc.Slider(0, 100)

    The SI units and ranges supported in marks are:

    • µ - micro, 10⁻⁶
    • m - milli, 10⁻³
    • (none) - 10⁰
    • k - kilo, 10³
    • M - mega, 10⁶
    • G - giga, 10⁹
    • T - tera, 10¹²
    • P - peta, 10¹⁵
    • E - exa, 10¹⁸

    Ranges below 10µ are not supported by the Slider. This is a bug: #1766

    DataTable

    • Rearranged Keyword Arguments - data and columns the first twokeyword arguments which means they can be supplied as positional arguments without the keyword.
    • Inferred Properties - If columns isn't supplied then it is extracted from the the first row in data

    Before:

    dash_table.DataTable(data=df.to_dict('records'), columns=[{'name': i, 'id': i} for i in df.columns])

    After:

    dash_table.DataTable(data=df.to_dict('records'))

    New Component Properties

    Checklist & RadioItems

    • A new property inline appends display: inline-block to labelStyle.
    dcc.Checklist(inline=True)

Fixed

  • #1879 Delete redundancy in pattern-matching callback implementation, specifically when ALL and MATCH wildcards are used together. This patch was submitted by an anonymous Dash Enterprise customer. Many thanks!

  • #1858 Support mini-css-extract-plugin Webpack plugin with @plotly/webpack-dash-dynamic-import node package - used by components to support dash async chunks. Updated dependencies of other @plotly node packages.

  • #1836 Fix __all__ in dcc and table for extras: dcc download helpers and table format helpers. This also restores this functionality to the obsolete top-level packages dash_core_components and dash_table.

  • #1822 Remove Radium from renderer dependencies, as part of investigating React 17 support.

  • #1779:

    • Clean up our handling of serialization problems, including fixing orjson for Python 3.6
    • Added the ability for dash.testing percy_snapshot methods to choose widths to generate.
  • #1778 DataTable: Fix React warnings stating that each child in a list should have a unique "key" prop

  • #1895 Support debug=True if native namespace-packages are present

[2.0.0] - 2021-08-03

Dash and Dash Renderer

Added

  • #1702 Added a new @app.long_callback decorator to support callback functions that take a long time to run. See the PR and documentation for more information.
  • #1514 Perform json encoding using the active plotly JSON engine. This will default to the faster orjson encoder if the orjson package is installed.
  • #1736 Add support for request_refresh_jwt hook and retry requests that used expired JWT tokens.

Changed

  • #1679 Restructure dash, dash-core-components, dash-html-components, and dash-table into a singular monorepo and move component packages into dash. This change makes the component modules available for import within the dash namespace, and simplifies the import pattern for a Dash app. From a development standpoint, all future changes to component modules will be made within the components directory, and relevant packages updated with the dash-update-components CLI command.
  • #1707 Change the default value of the compress argument to the dash.Dash constructor to False. This change reduces CPU usage, and was made in recognition of the fact that many deployment platforms (e.g. Dash Enterprise) already apply their own compression. If deploying to an environment that does not already provide compression, the Dash 1 behavior may be restored by adding compress=True to the dash.Dash constructor.
  • #1734 Added npm run build script to simplify build process involving dash-renderer and subcomponent libraries within dash.

Fixed

  • #1857 Fixed a regression with dcc.Slider and dcc.RangeSlider where steps were not being set to marks if None was passed as the prop argument. Added a check to set the min and max based on the range of marks if they are not explicitly defined (for more info, see #1843 and #1851).

Dash Core Components

Added

  • #1729 Include F#, C#, and MATLAB in markdown code highlighting, for the upcoming .NET and MATLAB flavors of dash.

  • #1735 Upgrade Plotly.js to v2.4.2. This includes:

    • Feature release 2.3.0:
      • More number formatting options due to d3-format upgrade.
      • Many new geo projections.
      • Improved rendering and performance of scattergl, splom and parcoords traces.
    • Feature release 2.4.0:
      • legend.groupclick
      • bbox of hover items in event data, to support custom dash-driven hover effects
    • Patch releases 2.3.1, 2.4.1, and 2.4.2 containing various bug fixes.
  • #1735 New dcc.Tooltip component. This is particularly useful for rich hover information on dcc.Graph charts, using the bbox information included in the event data in plotly.js v2.4.0

Dash Table

Added

  • #1729 Include F#, C#, and MATLAB in markdown code highlighting, for the upcoming .NET and MATLAB flavors of dash.

Dash HTML Components

Removed

  • #1734 Removed the following obsolete html elements - <command>, <element>, <isindex>, <listing>, <multicol>, <nextid>. These are obsolete and had been previously removed from the reference table.

[1.21.0] - 2021-07-09

Dash and Dash Renderer

Added

  • #1675 Add new Dash constructor argument extra_hot_reload_paths. This allows you to re-initialize the Python code of the app when non-Python files change, if you know that these files impact the app.

Changed

  • #1675 Remove the constraint that requests_pathname_prefix ends with routes_pathname_prefix. When you are serving your app behind a reverse proxy that rewrites URLs that constraint needs to be violated.
  • #1611 and #1685 Package dash-renderer artifacts and dependencies with Dash, and source renderer resources from within Dash.
  • #1567 Julia component generator puts components into src/jl - fixes an issue on case-insensitive filesystems when the component name and module name match (modulo case) and no prefix is used. Also reduces JS/Julia clutter in the overloaded src directory.

Fixed

  • #1664 Fix #1649, makes the devtools readable with a dark theme.
  • #1640 Fix #1475, missing timing_information after certain modifications to Flask behavior

Dash Core Components

Fixed

  • #963 Fixes #885

    This applies the fix from #878 to the RangeSlider. It not only fixes the bug where the tooltips were visible when slider was not, but it also reduces the lag in the tooltip when the slider handles are moved.

Updated

  • #939 Upgrade Plotly.js to v2.2.1. Note that this is a major version upgrade to Plotly.js, however we are not treating this as a breaking change for DCC as the majority of breaking changes in Plotly.js do not affect the Dash API. The one exception is that several trace types that have long been deprecated are removed entirely.
    • Major release 2.0.0:
      • Stop exporting d3 as Plotly.d3, and remove many other deep pieces of the public API. This does not affect the dcc.Graph component, but if you make use of Plotly from the global scope in some other way you may be affected.
      • Drop the deprecated trace types contourgl and area, as well as legacy pre-scatterpolar polar attributes bar.r, bar.t, scatter.r, scatter.t, layout.radialaxis, layout.angularaxis. Use scatterpolar, barpolar, and polar subplots instead.
      • heatmapgl and pointcloud trace types, and the transform attribute are deprecated, and will be removed in a future release.
      • Increase CSP safety by removing function constructors. 3D plots still use function constructors, but if you place one of the non-3D bundles (including the new strict bundle) in your assets folder you will have no function constructors.
      • Remove "Aa" text in legends.
      • Default hovermode to "closest".
      • Default textposition to "auto" in bar traces. If you previously used the bar.text attribute for hover only, you will need to explicitly set textposition="none".
      • Add bar.marker.pattern, image.zsmooth, and various other features and bugfixes.
    • Feature release 2.1.0:
      • New icicle trace type.
      • New legendrank trace attribute.
      • Several other additions and bug fixes.
    • Feature release 2.2.0:
      • Legend group titles
      • Half-year directive (%h) for date formatting
      • Several other bug fixes and performance improvements
    • Patch release 2.2.1 containing a security fix.

Added

  • #932 Adds a new copy to clipboard component.
  • #948] Adds disabled_days prop to DatePickerRange and DatePickerSingle components. With this prop you can specify days that should be made unselectable in the date picker, in addition to those that fall outside of the range specified by min_date_allowed and max_date_allowed.

Changed

  • #972 Updated R package vignettes and dash-info.yaml to regenerate examples without attaching now-deprecated core component packages (dashHtmlComponents, dashCoreComponents, or dashTable).

Dash HTML Components

Changed

  • #194 Updated dependencies and build process
  • #190 Updated R package vignettes and dash-info.yaml to regenerate examples without attaching now-deprecated core component packages (dashHtmlComponents, dashCoreComponents, or dashTable).

Dash Table

Fixed

  • #907
    • Fix a bug where pagination did not work or was not visible. #834
    • Fix a bug where if you are on a page that no longer exists after the data is updated, no data is displayed. #892

Added

  • #916

    • Added html option to markdown_options prop. This enables the use of html tags in markdown text.
  • #545

    • Case insensitive filtering
    • New props: filter_options - to control case of all filters, columns.filter_options - to control filter case for each column
    • New operators: i=, ieq, i>=, ige, i>, igt, i<=, ile, i<, ilt, i!=, ine, icontains - for case-insensitive filtering, s=, seq, s>=, sge, s>, sgt, s<=, sle, s<, slt, s!=, sne, scontains - to force case-sensitive filtering on case-insensitive columns

Changed

  • #918 Updated all dependencies. In particular the highlight.js upgrade changes code highlighting in markdown: we have long used their "github" style, this has been updated to more closely match current github styles.
  • #901 Updated R package dash-info.yaml to regenerate example without attaching now-deprecated core component packages (dashHtmlComponents, dashCoreComponents, or dashTable).

[1.20.0] - 2021-04-08

Dash and Dash Renderer

Changed

  • #1531 Update the format of the docstrings to make them easier to read in the reference pages of Dash Docs and in the console. This also addresses #1205
  • #1553 Increase the z-index of the Dash error menu from 1001 to 1100 in order to make sure it appears above Bootstrap components.

Fixed

  • #1546 Validate callback request outputs vs output to avoid a perceived security issue.

Dash Core Components

Added

  • #863 Adds a new Download component. Along with this several utility functions are added to help construct the appropriate data format:
    • dcc.send_file - send a file from disk
    • dcc.send_data_frame - send a DataFrame, using one of its writer methods
    • dcc.send_bytes - send a bytestring or the result of a bytestring writer
    • dcc.send_string - send a string or the result of a string writer

Changed

  • #923 Set autoComplete to off in dcc.Dropdown. This fixes #808

Fixed

  • #930 Fixed a bug #867 with DatePickerRange that would sometimes shift the allowed dates by one day.
  • #934 Fixed a bug in EnhancedTab component that ignored disabled_className property

Dash HTML Components

Fixed

  • #179 - Fixes #77 Added allow and referrerPolicy properties to html.Iframe

  • #178 - Fix #161 data property, and fix #129 obsolete, deprecated, and discouraged elements. No elements were removed, but comments were added to the documentation about these elements detailing their limitations.

    Dash Table

    Changed

    • #862 - update docstrings per #1205
    • #878 - update build process to use Webpack 5 and other latest dependencies

    [1.19.0] - 2021-01-19

    Dash and Dash Renderer

    Added

    • #1508 Fix #1403: Adds an x button to close the error messages box.
    • #1525 Adds support for callbacks which have overlapping inputs and outputs. Combined with dash.callback_context this addresses many use cases which require circular callbacks.

    Changed

    • #1503 Fix #1466: loosen dash[testing] requirements for easier integration in external projects. This PR also bumps many dash[dev] requirements.

    Fixed

    • #1530 Dedent error messages more carefully.
    • #1527 🐛 get_asset_url now pulls from an external source if assets_external_path is set.
      • updated _add_assets_resource to build asset urls the same way as get_asset_url.
      • updated doc string for assets_external_path Dash argument to be more clear that it will always be joined with the assets_url_path argument when determining the url to an external asset.
    • #1493 Fix #1143, a bug where having a file with one of several common names (test.py, code.py, org.py, etc) that imports a dash component package would make import dash fail with a cryptic error message asking whether you have a file named "dash.py"

    Dash Core Components

    Fixed

    • #905 Make sure the figure prop of dcc.Graph receives updates from user interactions in the graph, by using the same layout object as provided in the prop rather than cloning it. Fixes #879.
    • #903 Part of fixing dash import bug #1143

    Updated

    Added

    • #888 Adds a drag_value prop to dcc.Sliderto be able to fire callbacks from dragging and releasing the slider.

    Dash HTML Components

    Fixed

    • #169 - part of fixing dash import bug #1143

    Dash Table

    Fixed

    • #854 - part of fixing dash import bug #1143

    [1.18.1] - 2020-12-09

    [1.18.0] - 2020-12-07

    [1.17.0] - 2020-10-29

    Changed

    • #1442 Update from React 16.13.0 to 16.14.0

    Fixed

    • #1434 Fix #1432 for Julia to import non-core component packages without possible errors.

    Changed

    • #1448 Provide a hint in the callback error when the user forgot to make app.callback(...) a decorator.

    [1.16.3] - 2020-10-07

    Fixed

    • #1426 Fix a regression caused by flask-compress==1.6.0 causing performance degradation on server requests

    [1.16.2] - 2020-09-25

    Fixed

    • #1415 Fix a regression with some layouts callbacks involving dcc.Tabs, not yet loaded dash_table.DataTable and dcc.Graph to not be called
    • #1416 Make callback graph more robust for complex apps and some specific props (width in particular) that previously caused errors.

    [1.16.1] - 2020-09-16

    Changed

    • #1376 Extends the getTransform logic in the renderer to handle persistenceTransforms for both nested and non-nested persisted props. This was used to to fix dcc#700 in conjunction with dcc#854 by using persistenceTransforms to strip the time part of the datetime so that datepickers can persist when defined in callbacks.

    Fixed

    • #1408 Fixes a bug where the callback graph layout would reset whenever a callback fired, losing user-initiated layout changes (#1402) or creating a new force layout (#1401)

    [1.16.0] - 2020-09-03

    Added

    • #1371 You can now get CSP script-src hashes of all added inline scripts by calling app.csp_hashes() (both Dash internal inline scripts, and those added with app.clientside_callback) .

    Changed

    • #1385 Closes #1350 and fixes a previously undefined callback behavior when multiple elements are stacked on top of one another and their n_clicks props are used as inputs of the same callback. The callback will now trigger once with all the triggered n_clicks props changes.
    • #1179 New and improved callback graph in the debug menu. Now based on Cytoscape for much more interactivity, plus callback profiling including number of calls, fine-grained time information, bytes sent and received, and more. You can even add custom timing information on the server with callback_context.record_timing(name, seconds)

    Fixed

    • #1384 Fixed a bug introduced by #1180 breaking use of prevent_initial_call as a positional arg in callback definitions

    [1.15.0] - 2020-08-25

    Added

    • #1355 Removed redundant log message and consolidated logger initialization. You can now control the log level - for example suppress informational messages from Dash with app.logger.setLevel(logging.WARNING).
    • #1253, #1377 Added experimental --jl-prefix option to dash-generate-components, optionally generates Julia version of components and corresponding Julia package

    Changed

    • #1180 and #1375 Input, Output, and State in callback definitions don't need to be in lists. You still need to provide Output items first, then Input items, then State, and the list form is still supported. In particular, if you want to return a single output item wrapped in a length-1 list, you should still wrap the Output in a list. This can be useful for procedurally-generated callbacks.
    • #1368 Updated pytest to v6.0.1. To avoid deprecation warnings, this also updated pytest-sugar to 0.9.4 and pytest-mock to 3.2.0. The pytest-mock update only effects python >= 3.0. Pytest-mock remains pinned at 2.0.0 for python == 2.7.

    [1.14.0] - 2020-07-27

    Added

    • #1343 Add title parameter to set the document title. This is the recommended alternative to setting app.title or overriding the index HTML.
    • #1315 Add update_title parameter to set or disable the "Updating...." document title during updates. Closes #856 and #732

    [1.13.4] - 2020-06-25

    Fixed

    • #1310 Fix a regression since 1.13.0 preventing more than one loading state from being shown at a time.

    [1.13.3] - 2020-06-19

    [1.13.2] - 2020-06-18

    Fixed

    • #1305
      • Fix regression that causes crash when FLASK_ENV is modified during app execution
      • Fix regression that caused tests using _wait_for_callbacks to fail

    [1.13.1] - 2020-06-17

    [1.13.0] - 2020-06-17

    Added

    • #1289 Supports DASH_PROXY env var to tell app.run_server to report the correct URL to view your app, when it's being proxied. Throws an error if the proxy is incompatible with the host and port you've given the server.
    • #1240 Adds callback_context to clientside callbacks (e.g. dash_clientside.callback_context.triggered). Supports triggered, inputs, inputs_list, states, and states_list, all of which closely resemble their serverside cousins.

    Changed

    • #1237 Closes #920: Converts hot reload fetch failures into a server status indicator showing whether the latest fetch succeeded or failed. Callback fetch failures still appear as errors but have a clearer message.
    • #1254 Modifies the callback chain implementation and improves performance for apps with a lot of components

    Fixed

    • #1255 Hard hot reload targets only the current window, not the top - so if your app is in an iframe you will only reload the app
    • #1249 Fixes #919 so dash.testing is compatible with more pytest plugins, particularly pytest-flake8 and pytest-black.
    • #1248 Fixes #1245, so you can use prop persistence with components that have dict IDs, ie for pattern-matching callbacks.
    • #1185 Sort asset directories, same as we sort files inside those directories. This way if you need your assets loaded in a certain order, you can add prefixes to subdirectory names and enforce that order.
    • #1288 Closes #1285: Debug=True should work in the main module.

    [1.12.0] - 2020-05-05

    Added

    • #1228 Adds control over firing callbacks on page (or layout chunk) load. Individual callbacks can have their initial calls disabled in their definition @app.callback(..., prevent_initial_call=True) and similar for app.clientside_callback. The app-wide default can also be changed with app=Dash(prevent_initial_callbacks=True), then individual callbacks may disable this behavior.
    • #1201 New attribute app.validation_layout allows you to create a multi-page app without suppress_callback_exceptions=True or layout function tricks. Set this to a component layout containing the superset of all IDs on all pages in your app.
    • #1078 Permit usage of arbitrary file extensions for assets within component libraries

    Fixed

    • #1224 Fixes #1223, a very specific situation in which initial callbacks will not fire.
    • #1220 Fixes #1216, a set of related issues about pattern-matching callbacks with ALL wildcards in their Output which would fail if no components matched the pattern.
    • #1212 Fixes #1200 - prior to Dash 1.11, if none of the inputs to a callback were on the page, it was not an error. This was, and is now again, treated as though the callback raised PreventUpdate. The one exception to this is with pattern-matching callbacks, when every Input uses a multi-value wildcard (ALL or ALLSMALLER), and every Output is on the page. In that case the callback fires as usual.
    • #1201 Fixes #1193 - prior to Dash 1.11, you could use flask.has_request_context() == False inside an app.layout function to provide a special layout containing all IDs for validation purposes in a multi-page app. Dash 1.11 broke this when we moved most of this validation into the renderer. This change makes it work again.

    [1.11.0] - 2020-04-10

    Added

    • #1103 Pattern-matching IDs and callbacks. Component IDs can be dictionaries, and callbacks can reference patterns of components, using three different wildcards: ALL, MATCH, and ALLSMALLER, available from dash.dependencies. This lets you create components on demand, and have callbacks respond to any and all of them. To help with this, dash.callback_context gets three new entries: outputs_list, inputs_list, and states_list, which contain all the ids, properties, and except for the outputs, the property values from all matched components.
    • #1103 dash.testing option --pause: after opening the dash app in a test, will invoke pdb for live debugging of both Javascript and Python. Use with a single test case like pytest -k cbwc001 --pause.

    Changed

    • #1103 Multiple changes to the callback pipeline:
      • dash.callback_context.triggered now does NOT reflect any initial values, and DOES reflect EVERY value which has been changed either by activity in the app or as a result of a previous callback. That means that the initial call of a callback with no prerequisite callbacks will list nothing as triggering. For backward compatibility, we continue to provide a length-1 list for triggered, but its id and property are blank strings, and bool(triggered) is False.
      • A user interaction which returns the same property value as was previously present will not trigger the component to re-render, nor trigger callbacks using that property as an input.
      • Callback validation is now mostly done in the browser, rather than in Python. A few things - mostly type validation, like ensuring IDs are strings or dicts and properties are strings - are still done in Python, but most others, like ensuring outputs are unique, inputs and outputs don't overlap, and (if desired) that IDs are present in the layout, are done in the browser. This means you can define callbacks BEFORE the layout and still validate IDs to the layout; and while developing an app, most errors in callback definitions will not halt the app.

    Fixed

    • #1103 Fixed multiple bugs with chained callbacks either not triggering, inconsistently triggering, or triggering multiple times. This includes: #635, #832, #1053, #1071, and #1084. Also fixed #1105: async components that aren't rendered by the page (for example in a background Tab) would block the app from executing callbacks.

    [1.10.0] - 2020-04-01

    Added

    • #1134 Allow dash.run_server() host and port parameters to be set with environment variables HOST & PORT, respectively

    Changed

    • #1145 Update from React 16.8.6 to 16.13.0

    Fixed

    [1.9.1] - 2020-02-27

    Added

    • #1133 Allow the compress config variable to be set with an environment variable with DASH_COMPRESS=FALSE

    [1.9.0] - 2020-02-04

    Fixed

    • #1080 Handle case where dash fails to load when used inside an iframe with a sandbox attribute that only has allow-scripts

    [1.8.0] - 2020-01-14

    Added

    • #1073 Two new functions to simplify usage handling URLs and pathnames: app.get_relative_path & app.trim_relative_path. These functions are particularly useful for apps deployed on Dash Enterprise where the apps served under a URL prefix (the app name) which is unlike apps served on localhost:8050.
      • app.get_relative_path returns a path with the config setting requests_pathname_prefix prefixed. Use app.get_relative_path anywhere you would provide a relative pathname, like dcc.Link(href=app.relative_path('/page-2')) or even as an alternative to app.get_asset_url with e.g. html.Img(src=app.get_relative_path('/assets/logo.png')).
      • app.trim_relative_path a path with requests_pathname_prefix and leading & trailing slashes stripped from it. Use this function in callbacks that deal with dcc.Location pathname routing. Example usage:
      app.layout = html.Div([
          dcc.Location(id='url'),
          html.Div(id='content')
      ])
      @app.callback(Output('content', 'children'), [Input('url', 'pathname')])
      def display_content(path):
          page_name = app.strip_relative_path(path)
          if not page_name:  # None or ''
              return html.Div([
                  html.Img(src=app.get_relative_path('/assets/logo.png')),
                  dcc.Link(href=app.get_relative_path('/page-1')),
                  dcc.Link(href=app.get_relative_path('/page-2')),
              ])
          elif page_name == 'page-1':
              return chapters.page_1
          if page_name == "page-2":
              return chapters.page_2

    Changed

    • #1035 Simplify our build process.
    • #1074 Error messages when providing an incorrect property to a component have been improved: they now specify the component type, library, version, and ID (if available).

    Fixed

    • #1037 Fix no_update test to allow copies, such as those stored and retrieved from a cache.

    [1.7.0] - 2019-11-27

    Added

    • #967 Add support for defining clientside JavaScript callbacks via inline strings.
    • #1020 Allow visit_and_snapshot API in dash.testing.browser to stay on the page so you can run other checks.

    Changed

    • #1026 Better error message when you forget to wrap multiple children in an array, and they get passed to other props.

    Fixed

    • #1018 Fix the dash.testing stop API with process application runner in Python2. Use kill() instead of communicate() to avoid hanging.
    • #1027 Fix bug with renderer callback lock never resolving with non-rendered async component using the asyncDecorator

    [1.6.1] - 2019-11-14

    Fixed

    • #1006 Fix IE11 / ES5 compatibility and validation issues
    • #1006 Fix bug with renderer wrapper component TreeContainer to prevent useless re-renders
    • #1001
      • Fix and improve the clear_input() API in dash.testing, so it's more robust handling react input.
      • make the percy_snapshot() API more robust, and the timeout of wait_for_callbacks (if set to True) will not fail the snapshot execution, but logged as potential error.

    [1.6.0] - 2019-11-04

    Fixed

    • #999 Fix fingerprint for component suites with metadata in version.
    • #983 Fix the assets loading issues when dashR application runner is handling with an app defined by string chunk.

    [1.5.1] - 2019-10-29

    Fixed

    • #987 Fix cache string handling for component suites with nested folders in their packages.
    • #986 Fix a bug with evaluation of _force_eager_loading when application is loaded with gunicorn

    [1.5.0] - 2019-10-29

    Added

    • #964 Adds support for preventing updates in clientside functions.
      • Reject all updates with throw window.dash_clientside.PreventUpdate;
      • Reject a single output by returning window.dash_clientside.no_update
    • #899 Add support for async dependencies and components
    • #973 Adds support for resource caching and adds a fallback caching mechanism through etag

    Fixed

    • #974 Fix and improve a percy snapshot behavior issue we found in dash-docs testing. It adds a flag wait_for_callbacks to ensure that, in the context of a dash app testing, the percy snapshot action will happen only after all callbacks get fired.

    [1.4.1] - 2019-10-17

    Fixed

    • #969 Fix warnings emitted by react devtools coming from our own devtools components.

    [1.4.0] - 2019-10-08

    Added

    • #948 Support setting working directory for R apps run using the dashr fixture, primarily useful for tests with assets. dashr.start_server supports a cwd argument to set an explicit working directory, and has smarter defaults when it's omitted: if app is a path to an R script, uses the directory of that path; if app is a string, uses the directory the test file itself is in.
    • #944
      • Relevant dash.testing methods can now be called with either an element or a CSS selector: select_dcc_dropdown, multiple_click, clear_input, zoom_in_graph_by_ratio, click_at_coord_fractions.
      • Three new dash.testing methods: clear_local_storage, clear_session_storage, and clear_storage (to clear both together)
    • #937 dash.testing adds two APIs zoom_in_graph_by_ratio and click_at_coord_fractions about advanced interactions using mouse ActionChain
    • #938 Add debugging traces to dash backend about serving component suites, to verify the installed packages whenever in doubt.

    Fixed

    • #944 Fix a bug with persistence being toggled on/off on an existing component.

    [1.3.1] - 2019-09-19

    Changed

    • Bump dash-core-components version from 1.2.0 to 1.2.1

    [1.3.0] - 2019-09-17

    Added

    • #923 Add one configuration --percy-assets in pytest to specify extra application assets path if needed.

    • #918 Add wait_for_element_by_id and visit_and_snapshot APIs in browser, add raw_command option (with higher priority than the default waitress one) and optional start_timeout argument to handle large applications within the process runner.

    • #903 Persistence: enable props edited by the user to persist across recreating the component or reloading the page. Components need to define three new props: persistence, persisted_props, and persistence_type as described in the lead comment of src/persistence.js. App developers then enable this behavior by, in the simplest case, setting persistence: true on the component. First use case is table, see dash-table#566

    Changed

    • Bump dash-table version from 4.2.0 to 4.3.0
    • Bump dash-core-components version from 1.1.2 to 1.2.0
    • Bump dash-renderer version from 1.0.1 to 1.1.0

    Fixed

    • #915 Fix dash-generate-components on Windows.
    • #829 Fix the --remote pytest argument which was not effective in the code, adding a new argument --remote-url to support the selenium grid usage in the cloud.
    • #910 Reduce the dash-renderer packages size on PyPI about 55% by removing the source maps. To do more advanced debugging, the source maps needs to be generated from source code with npm run build:local and pip install in editable mode, i.e. pip install -e .

    [1.2.0] - 2019-08-27

    Added

    • #860 Add a new arg dev_tools_prune_errors to app.run_server and app.enable_dev_tools. Default True, tracebacks only include user code and below. Set it False for the previous behavior showing all the Dash and Flask parts of the stack.

    Changed

    • Bump dash-table version from 4.1.0 to 4.2.0
    • Bump dash-core-components version from 1.1.1 to 1.1.2
    • Bump dash-html-components version from 1.0.0 to 1.0.1
    • Bump dash-renderer version from 1.0.0 to 1.0.1

    Fixed

    • #874 Clean all the binary assets in dash-renderer, add tool to build all the required bundles from fresh source code to avoid confusion of the assets and improve the release process. Fixes #868 and #734

    [1.1.1] - 2019-08-06

    Changed

    • Bump dash-core-components version from 1.1.0 to 1.1.1

    [1.1.0] - 2019-08-05

    Added

    • #827 Add support for dashR testing to the dash.testing pytest framework.

    Changed

    • Bump dash-table version from 4.0.2 to 4.1.0
    • Bump dash-core-components version from 1.0.0 to 1.1.0

    [1.0.2] - 2019-07-15

    Changed

    • Bump dash-table version from 4.0.1 to 4.0.2

    Fixed

    • #821 Fix a bug with callback error reporting, #791.

    [1.0.1] - 2019-07-09

    Changed

    • 💥 #808 Remove strong dash.testing dependencies per community feedback. Testing users should do pip install dash[testing] afterwards.

    • #805 Add headless mode for dash.testing, add pytest_setup_options hook for full configuration of WebDriver Options.

    • Bump dash-table version from 4.0.0 to 4.0.1

    [1.0.0] - 2019-06-20

    Changed

    • 💥 #761 Several breaking changes to the dash.Dash API:

      • Remove two obsolete constructor kwargs: static_folder and components_cache_max_age
      • Remove the misspelled supress_callback_exceptions fallback
      • Remove the unused resources.config.infer_from_layout
      • Revamp app.config: ALL constructor args are now stored in config, with three exceptions: server, index_string, and plugins. None of these are stored in any other instance attributes anymore.
      • Change hot_reload_interval from msec to seconds, for consistency with hot_reload_watch_interval
      • When called from enable_dev_tools, debug=True by default. It's still False by default from run_server.
    • #744 Introducing Dash Testing (dash.testing) - read the full tutorial at https://dash.plotly.com/testing.

    • #753 Component no longer inherits MutableMapping, so values, keys, and more are no longer methods. Fixes an issue reported in dcc#440 where components with certain prop names defined but not provided would cause a failure to render. During component generation we now disallow all props with leading underscores or matching a few remaining reserved words: UNDEFINED, REQUIRED, to_plotly_json, available_properties, and available_wildcard_properties.

    • #739 Allow the Flask app to be provided to Dash after object initialization. This allows users to define Dash layouts etc when using the app factory pattern, or any other pattern that inhibits access to the app object. This broadly complies with the flask extension API, allowing Dash to be considered as a Flask extension where it needs to be.

    • #774 Allow the Flask app to set the Dash app name if the name is not provided by users.

    • #722 Assets are served locally by default. Both JS scripts and CSS files are affected. This improves robustness and flexibility in numerous situations, but in certain cases initial loading could be slowed. To restore the previous CDN serving, set app.scripts.config.serve_locally = False (and similarly with app.css, but this is generally less important).

    • #724, renderer#175 Undo/redo toolbar is removed by default, you can enable it with app=Dash(show_undo_redo=true). The CSS hack ._dash-undo-redo:{display:none;} is no longer needed

    • 💥 #709 Merge the dash-renderer project into the main dash repo to simplify feature dev workflow. We will keep the deprecated one for archive purpose.

    [0.43.0] - 2019-05-15

    Changed

    • Bump dash-core-components version from 0.47.0 to 0.48.0
    • Bump dash-renderer version from 0.23.0 to 0.24.0
    • Bump dash-table version from 3.6.0 to 3.7.0

    Fixed

    • renderer#170 Fix regression on handling PreventUpdate (204 NO CONTENT)

    [0.42.0] - 2019-04-25

    Added

    • #687, renderer#100 Dev Tools support. A new UI in the application that automatically display JavaScript & Python error messages, validates your component's properties, and displays a graph of your callback's dependencies. Only enabled in debug mode. Turn this on and off with two new config flags in app.run_server:
      • dev_tools_props_check - turn on/off property validation.
      • dev_tools_ui - turn on/off the UI.

    Fixed

    [0.41.0] - 2019-04-10

    Added

    • #672, renderer#143 Support for "Clientside Callbacks" - an escape hatch to execute your callbacks in JavaScript instead of Python
    • #676 Add dev_tools_ui config flag in app.run_server (serialized in <script id="_dash-config" type="application/json">) to display or hide the forthcoming Dev Tools UI in Dash's front-end (dash-renderer).
    • #680 Partial updates: leave some multi-output updates unchanged while updating others

    Removed

    • renderer#145 Remove dash_renderer._set_react_version support for 15.4.2 and 16.2.0

    Changed

    • Bump dash-core-components version from 0.45.0 to 0.46.0
    • renderer#145 Update from React 15.4.2 to React 16.8.6

    [0.40.0] - 2019-03-25

    Changed

    • Bump dash-core-components version from 0.44.0 to 0.45.0
    • Bump dash-html-components version from 0.14.0 to 0.15.0
    • renderer#140, renderer#126 Optimize rendering, and always assign setProps to components even with no callbacks to use it.

    [0.39.0] - 2019-03-04

    Added

    • #436 Allow multiple outputs from a single callback.
    • #367 Support custom JavaScript hooks to modify callback payloads and responses.
    • #623 Modify the flask response with custom cookies or headers, using dash.callback_context.response.
    • renderer#93 Loading states API

    Changed

    • Bump dash-core-components version from 0.43.1 to 0.44.0
    • Bump dash-html-components version from 0.13.5 to 0.14.0
    • Bump dash-table version from 3.5.0 to 3.6.0

    [0.38.0] - 2019-02-25

    Added

    • #603 Add components libraries js/css distribution to hot reload watch.
    • #608, renderer#124 Callback context:
      • Know which inputs caused a callback to fire: dash.callback_context.triggered
      • Input/State values by name dash.callback_context.states.get('btn.n_clicks')

    Changed

    • Bump dash-table version from 3.4.0 to 3.5.0
    • Bump dash-renderer version from 0.18.0 to 0.19.0

    Fixed

    • Fix missing indentation for generated metadata.json #600
    • Fix missing component prop docstring error #598
    • #492 Move __repr__ to base component instead of being generated.
    • #605 Raise exception when same input & output are used in a callback

    [0.37.0] - 2019-02-11

    Removed

    Changed

    • #565 Add core libraries as version locked dependencies
    • Bump dash-table version from 3.3.0 to 3.4.0
    • Bump dash-renderer version from 0.17.0 to 0.18.0
    • Bump dash-core-components version from 0.43.0 to 0.43.1

    Fixed

    • #563 Fix collections.abc deprecation warning for Python 3.8

    [0.36.0] - 2019-01-25

    Removed

    • #550, renderer#114 Remove support for Event system. Use event properties instead, for example the n_clicks property instead of the click event, see #531. dash_renderer MUST be upgraded to >=0.17.0 together with this, and it is recommended to update dash_core_components to >=0.43.0 and dash_html_components to >=0.14.0.

    [0.35.3] - 2019-01-23

    Changed

    • #547
      • assets_folder argument now defaults to 'assets'
      • The assets folder is now always relative to the given root path of name argument, the default of __main__ will get the cwd.
      • No longer coerce the name argument from the server if the server argument is provided.

    Fixed

    • #547
      • Asset blueprint takes routes prefix into it's static path.
      • Asset url path no longer strip routes from requests.
    • #548 Remove print statement from PreventUpdate error handler.
    • #524 Removed ComponentRegistry dist cache.

    [0.35.2] - 2019-01-11

    Fixed

    • #522 Fix typo in some exception names
    • renderer#110
      • Keep the config store state on soft reload.
      • AppProvider returns Loading... if no configs as before renderer#108.

    0.35.1 - 2018-12-27

    Fixed

    • #518 Always skip dynamic resources from index resources collection.

    0.35.0 - 2018-12-18

    Added

    • #483 Experimental --r-prefix option to dash-generate-components, optionally generates R version of components and corresponding R package.

    0.34.0 - 2018-12-17

    Added

    • #490 Add --ignore option to dash-generate-components, defaults to ^_.

    Removed

    • renderer#108 Unused login api and Authentication component

    Fixed

    0.33.0 - 2018-12-10

    Added

    • #487 Add specific Dash exception types to replace generic exceptions (InvalidIndexException, DependencyException, ResourceException)

    0.32.2 - 2018-12-09

    Fixed

    • #485 Fix typo in missing events/inputs error message

    0.32.1 - 2018-12-07

    Changed

    • #484 Mute dash related missing props docstring from extract-meta warnings

    0.32.0 - 2018-12-07

    Added

    0.31.1 - 2018-11-29

    Fixed

    • #473 Fix _imports_.py indentation generation.

    0.31.0 - 2018-11-29

    Added

    • #451 Combine extract-meta and Python component files generation in a cli

    Fixed

    • Fix a bug renderer#66 in the ON_PROP_CHANGE callback where history was not correctly set when acting on more than one component. In particular, the 'undo' button should now work as expected.

    0.30.0 - 2018-11-14

    Added

    • #362, renderer#73 Hot reloading from the browser.
    • Silence routes logging with dev_tools_silence_routes_logging.

    0.29.0 - 2018-11-06

    Added

    • #444 Add component namespaces registry, collect the resources needed by component library when they are imported instead of crawling the layout.

    0.28.7 - 2018-11-05

    Fixed

    • #450 Use the same prop name black list for component generation in all supported Python versions. Closes #361.

    0.28.6 - 2018-11-05

    Fixed

    • #443 Dash.registered_paths changed to a collections.defaultdict(set), was appending the same package paths on every index.

    0.28.5 - 2018-10-18

    Fixed

    • #431 Replace windows endline when generating components class docstrings.

    0.28.4 - 2018-10-18

    Fixed

    • #430 Fix Component.traverse() and Component.traverse_with_paths() for components with children of type tuple, not just list.

    0.28.3 - 2018-10-17

    Fixed

    • #418 Fix http-equiv typo
    • Include missing polyfills to restore Internet Explorer support, restore whatwg-fetch renderer#87

    0.28.2 - 2018-10-05

    Changed

    • #377 Move add_url function definition out of Dash.__init__

    0.28.1 - 2018-09-26

    Fixed

    • #407 Missing favicon package_data from setup.py

    0.28.0 - 2018-09-26

    Added

    • #406 Default favicon for dash apps.
    • Bust the cache of the assets favicon.

    Fixed

    • #403 Remove the first and last blank lines from the HTML index string.

    0.27.0 - 2018-09-20

    Added

    • #369, renderer#77 Allow serving dev bundles from the components suite, enable with app.run_server(dev_tools_serve_dev_bundles=True)

    Fixed

    • #350 Use HTML5 syntax for the meta tag

    0.26.6 - 2018-09-19

    Fixed

    • #387 Add Cache-Control headers to files served by Dash.serve_component_suites, and time modified query string to collected components suites resources.
    • #394 Add InvalidResourceError error and a Flask error handler so unregistered paths in serve_component_suites return a 404 instead of 500.

    0.26.5 - 2018-09-10

    Fixed

    • #374 Fix get_asset_url with a different assets_url_path.

    0.26.4 - 2018-08-28

    Fixed

    • Set url_base_pathname to None in Dash.__init__. Fix #364

    0.26.3 - 2018-08-27

    Added

    • Dash.get_asset_url will give the prefixed url for the asset file.

    Fixed

    • #351 Prefix assets files with requests_pathname_prefix.

    0.26.2 - 2018-08-26

    Fixed

    • #343 Only create the assets blueprint once for apps that provide the same flask instance to multiple dash instances.

    0.26.1 - 2018-08-26

    Fixed

    • #336 Fix bug in _validate_layout which would not let a user set app.layout to be a function that returns a layout (fixes #334).

    0.26.0 - 2018-08-20

    Added

    • #318 Add assets_ignore init keyword, regex filter for the assets files.

    0.25.1 - 2018-08-20

    Fixed

    • #335 Ensure CSS/JS external resources are loaded before the assets.

    0.25.0 - 2018-08-14

    Added

    • #322 Take config values from init or environ variables (Prefixed with DASH_).

    Fixed

    • Take requests_pathname_prefix config when creating scripts tags.
    • requests/routes_pathname_prefix must start and end with /.
    • requests_pathname_prefix must end with routes_pathname_prefix. If you supplied both requests and routes pathname before this update, make sure requests_pathname_prefix ends with the same value as routes_pathname_prefix.
    • url_base_pathname sets both requests/routes pathname, cannot supply it with either requests or routes pathname prefixes.

    0.24.2 - 2018-08-13

    Fixed

    • #320 Disallow duplicate component ids in the initial layout.

    0.24.1 - 2018-08-10

    Fixed

    • Fix bug #321 where importing Dash components with no props would result in an error.
    • Fix a bug in 0.23.1 where importing components with arguments that are Python keywords could cause an error. In particular, this fixes dash-html-components with Python 3.7.

    0.24.0 - 2018-08-10

    Added

    • #319 Add a modified time query string to assets included in the index in order to bust the cache.

    0.23.1 - 2018-08-02

    Added

    • #316 Add ie-compat meta tag to the index by default.
    • #305 Add external_script and external_css keywords to dash __init__.
    • Dash components are now generated at build-time and then imported rather than generated when a module is imported. This should reduce the time it takes to import Dash component libraries, and makes Dash compatible with IDEs.

    0.22.1 - 2018-08-01

    Fixed

    • #273 Raise a more informative error if a non-JSON-serializable value is returned from a callback.

    0.22.0 - 2018-07-25

    Added

    • #286 Asset files & index customization.
    • #294 Raise an error if there is no layout present when the server is run.
    • renderer#55 Add _dash-error class to the "Error loading layout" and "Error loading dependencies" messages.

    Fixed

    • Attempting to render a Boolean value to the page no longer crashes the app.
    • renderer#57 If a callback references an id which does not exist in the DOM tree at the time it is executed, throw a more informative front-end exception.
    • renderer#54 Previously, if a component called updateProps with multiple properties, Dash would fire the callback multiple times (once for each property). Now the callback only fires once.

    0.21.1 - 2018-04-10

    Added

    • #237 Support aria-* and data-* attributes in all dash html components. These new keywords can be added using a dictionary expansion, e.g. html.Div(id="my-div", **{"data-toggle": "toggled", "aria-toggled": "true"})
    • renderer#45 Allow user to choose between React versions '15.4.2' and '16.2.0':
    import dash_renderer
    
    # Set the react version before setting up the Dash application
    dash_renderer._set_react_version('16.2.0')
    
    app = dash.Dash(...)

    Fixed

    • renderer#50 Update MANIFEST.in to include react and react-dom bundles for development mode

    0.21.0 - 2018-02-21

    Added

    • #207 Support React components using Flow types. component_loader now has the following behavior to create docstrings as determined in discussion in #187:
      1. If a Dash component has PropTypes-generated typing, the docstring uses the PropTypes, regardless of whether the component also has Flow types (current behavior).
      2. Otherwise if a Dash component has Flow types but not PropTypes, the docstring now uses the objects generated by react-docgen from the Flow types.

    Fixed

    • renderer#42 Fix renderer#41 and renderer#44.
      • In some cases, during initialization, callbacks may fired multiple times instead of just once. This only happens in certain scenarios where outputs have overlapping inputs and those inputs are leaves (they don't have any inputs of their own).
      • If an output component is returned from a callback and its inputs were not returned from the same input (i.e. they were already visible), then the callback to update the output would not fire. This has now been fixed. A common scenario where this app structure exists is within a Tabbed app, where there are global controls that update each tab's contents and the tab's callback just displays new output containers.

    0.20.0 - 2018-01-19

    Added

    Removed

    • Removes logging from redux middleware from production build based on process.env.NODE_ENV.

    Changed

    0.19.0 - 2017-10-16

    Changed

    • 🔒 Remove CSRF protection measures. CSRF-style attacks are not relevant to Dash apps. Dash's API uses POST requests with content type application/json which are not susceptible to unwanted requests from 3rd party sites. See #141.
    • 🔒 app.server.secret_key is no longer required since CSRF protection was removed. Setting app.server.secret_key was difficult to document and a very common source of confusion, so it's great that users won't get bitten by this anymore 🎉
    • 🐞 renderer#22, renderer#28 Previously, old requests could override new requests if their response was longer than the new one. This caused subtle bugs when apps are deployed on multiple processes or threads with component callbacks that update at varying rates like urls. Originally reported in #133. This fix should also improve performance when many updates happen at once as outdated requests will get dropped instead of updating the UI. Performance issue with the first PR reported in renderer#27 and fixed in the second PR.
    • renderer#21 Fix an issue where a callback would be fired excessively. Previously, the callback would be called as many times as it had inputs. Now, it is called less.

    0.18.3 - 2017-09-08

    Added

    • app.config is now a dict instead of a class. You can set config variables with app.config['suppress_callback_exceptions'] = True now. The previous class-based syntax (e.g. app.config.suppress_callback_exceptions) has been maintained for backwards compatibility.
    • 🐌 Experimental behaviour for a customizable "loading state". When a callback is in motion, Dash now appends a <div class="_dash-loading-callback"/> to the DOM. Users can style this element using custom CSS to display loading screen overlays. This feature is in alpha, we may remove it at any time.

    Fixed

    • Fix a bug from 0.18.2 that removed the ability for dash to serve the app on any route besides /.
    • Fix a bug from 0.18.0 with the new config variables when used in a multi-app setting, causing config to be shared across apps. Originally reported in https://community.plotly.com/t/flask-endpoint-error/5691/7
    • Rename config setting supress_callback_exceptions to suppress_callback_exceptions. The original spelling is kept for backward compatibility.
    • 🐞 (renderer) Fix a bug where Dash would fire updates for each parent of a grandchild node that shared the same grandparent. Originally reported in https://community.plotly.com/t/specifying-dependency-tree-traversal/5080/5
    • 🐞 (renderer) Fix a bug where the document title that displays "Updating..." wouldn't change if the callback raised an Exception. Now it will be removed on any response, even a failure.

    0.18.2 - 2017-09-07

    Added

    • #70 🔧 Add an endpoint to each of the URLs to allow for multiple routes.

    0.18.1 - 2017-09-07

    Fixed

    • #128 🐛 If app.layout is a function, then it used to be called excessively. Now it is called just once on startup and just once on page load.

    0.18.0 - 2017-09-07

    Changed

    • 🔒 Remove the /static/ folder and endpoint that is implicitly initialized by flask. This is too implicit for my comfort level: I worry that users will not be aware that their files in their static folder are accessible
    • ⚡️ Remove all API calls to the Plotly API (https://api.plotly.com/), the authentication endpoints and decorators, and the associated filename, sharing and app_url arguments. This was never documented or officially supported. Authentication has been moved to the dash-auth package.
    • #107 ✏️ Sort prop names in exception messages.

    Added

    • 🔧 Add two new config variables: routes_pathname_prefix and requests_pathname_prefix to provide more flexibility for API routing when Dash apps are run behind proxy servers. routes_pathname_prefix is a prefix applied to the backend routes and requests_pathname_prefix prefixed in requests made by Dash's front-end. dash-renderer==0.8.0rc3 uses these endpoints.
    • #112 🔧 Add id to KeyError exceptions in components.

    Fixed

    • ✏️ Fix a typo in an exception.
    • 🔧 Replaced all illegal characters in environment variables.

    🔧 Maintenance

    • 📝 Update README.md
    • ✅ Fix CircleCI tests. Note that the dash-renderer contains the bulk of the integration tests.
    • 💄 Flake8 fixes and tests (fixes #99)
    • ✨ Add this CHANGELOG.md.

    0.17.3 - 2017-06-22

    ✨ This is the initial open-source release of Dash.