NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1556 most downloaded on PyPI
A Python framework for building reactive web-apps. Developed by Plotly.
Last release 1 months ago
21 Jul 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
218 releases · first in 2017
Feature release 2.18.0 adds sync tickmode, so several axes can share ticks and gridlines
One column per quarter.
Update Plotly.js to v2.16.4 (from v2.16.1): fix several bugs, particularly related to updating mapbox graphs.
Update Plotly.js to v2.16.1 (from v2.13.3)
placeholder_text property to filterOptions for DataTable which allows overriding the default filter field placeholder.sankey links, and editSelection option to config.scatter and scatter-like traces and increased control of automargin and legend sizingscattermapbox traces and restricted bounds to mapbox plots.pages_folder is nested, or the 404 page is nested inside pages_folder.before_first_request as reported in #2177.flask-compress dependency to new extras requires dash[compress]### Fixed - #2237 Ensure calls to plotly.js from dcc.Graph are properly sequenced even if React initiates multiple render cycles in quick succession.
plotly.js from dcc.Graph are properly sequenced even if React initiates multiple render cycles in quick succession.dash.page_registry.suppress_callback_exceptions=True the validation_layout is not set.dash[testing] is not installed.Emit plotly_selected event on plot API calls and GUI edits.
plotly_selected event on plot API calls and GUI edits.sankey select error (regression introduced in 2.13.0).sankey traces to fix select error.dragmodes when an existing selection is modified.Deprecated dash.long_callback.managers.CeleryLongCallbackManager, use dash.CeleryManager instead.
maxHeight to Dropdown options menu.background=False to dash.callback to use instead of app.long_callback.app.long_callback arguments to dash.callback (interval, running, cancel, progress, progress_default, cache_args_to_ignore, manager)search prop to dcc.Dropdown options, allowing to search the dropdown options with something other than the label or value.cell_selectable=False.. were not excluded when building dash.page_registry.not_found_404 page is incorrect in the dash.page_registry when not using the pages folder.React.FC empty valueDeclaration error & support empty props components.dcc.Dropdown search with component as prop for option label.dash.long_callback.managers.CeleryLongCallbackManager, use dash.CeleryManager instead.dash.long_callback.managers.DiskcacheLongCallbackManager, use dash.DiskcacheManager instead.long_callback_manager in favor of background_callback_manager.selections, newselection, and activeselection, along with an updated UI allowing you to modify a selection you created.parcoords traces.violin traces.automargin behavior.### 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 I
args_grouping function.app = Dash(meta_tags=[{"name": "viewport"}])path to the pages_folder was incorrect on Windows.args_grouping_values property which was incompatible with pattern-matching callbacks.### Added - #1947 Added pages - a better way to build multi-page apps. For more information see the forum post. - #1965 Add component as props. - #204
pages - a better way to build multi-page apps. For more information see the forum post.wait_for_class_to_equal and wait_for_contains_class methods to dash.testingfind_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.dangerously_allow_html=True + mathjax=True works in some cases, and in some cases not.dcc.Dropdown with a value but no options.DASH_DEBUG as environment variable gets ignored.Fix #2045 import error when using pytest but dash[testing] is not installed.
dash[testing] is not installed.adds dash.ctx, a more concise name for dash.callback_context
#1952 Improved callback_context
dash.ctx, a more concise name for dash.callback_contextctx.triggered_prop_ids, a dictionary of the component ids and props that triggered the callback.ctx.triggered_id, the id of the component that triggered the callback.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.
#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:
#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
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.### Fixed - #1963 Fix #1780 flask shutdown deprecation warning when running dashduo threaded tests. - #1995 Fix #1992 ImportError: cannot import name
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 l
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.
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.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.fillpattern for scatter traces with filled areaunsafe-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.mesh3d traces.#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.
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 fold
dash.get_relative_pathdash.strip_relative_pathdash.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.#1911 Upgrade Plotly.js to v2.9.0 (from v2.8.3).
ticklabelstep to axes to reduce tick labels while still showing all ticks./assets vs the versions built into dcc or ddk.#1930 Upgrade JavaScript dependencies across renderer and all components.
3D traces are now compatible with no-unsafe-eval CSP rules.
#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:
no-unsafe-eval CSP rules.smith subplots and scattersmith traces, for drawing Smith charts.histogram traces.uirevision and autorange that pops up in some cases of mixed clientside / serverside figure generation.heatmap and related trace types.#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 moduledash[diskcache]: required if you use DiskcacheLongCallbackManagerdash[celery]: required if you use CeleryLongCallbackManagerdash[ci]: mainly for internal use, these are additional requirements for the Dash CI tests, exposed for other component libraries to use a matching configuration.#1883 in DataTable added page_current to persisted_props as requested in #1860
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.
Dropdown, RadioItem, and Checklist
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.options can be supplied in two new forms:
string|number|bool where label and value are equal to the items in the list.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
min, max, and step are now the first three keyword arguments which means they can be supplied as positional arguments without the keyword.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.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: https://github.com/plotly/dash/issues/1766
DataTable
data and columns the first twokeyword arguments which means they can be supplied as positional arguments without the keyword.columns isn't supplied then it is extracted from the the first row in dataBefore:
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'))
Checklist & RadioItems
inline appends display: inline-block to labelStyle.dcc.Checklist(inline=True)
#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.
orjson for Python 3.6dash.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
More number formatting options due to d3-format upgrade.
@app.long_callback decorator to support callback functions that take a long time to run. See the PR and documentation for more information.orjson package is installed.request_refresh_jwt hook and retry requests that used expired JWT tokens.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.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.npm run build script to simplify build process involving dash-renderer and subcomponent libraries within dash.#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:
d3-format upgrade.geo projections.scattergl, splom and parcoords traces.legend.groupclickbbox of hover items in event data, to support custom dash-driven hover effects#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
html elements - <command>, <element>, <isindex>, <listing>, <multicol>, <nextid>. These are obsolete and had been previously removed from the reference table.Nothing published for this version
Nothing published for this version
Nothing published for this version
Patch release 2.2.1 containing a security fix.
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.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.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.timing_information after certain modifications to Flask behaviorThis 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.
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.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.strict bundle) in your assets folder you will have no function constructors.hovermode to "closest".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".bar.marker.pattern, image.zsmooth, and various other features and bugfixes.icicle trace type.legendrank trace attribute.%h) for date formattingdisabled_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.dash-info.yaml to regenerate examples without attaching now-deprecated core component packages (dashHtmlComponents, dashCoreComponents, or dashTable).dash-info.yaml to regenerate examples without attaching now-deprecated core component packages (dashHtmlComponents, dashCoreComponents, or dashTable).html option to markdown_options prop. This enables the use of html tags in markdown text.filter_options - to control case of all filters, columns.filter_options - to control filter case for each columni=, 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 columnshighlight.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.dash-info.yaml to regenerate example without attaching now-deprecated core component packages (dashHtmlComponents, dashCoreComponents, or dashTable).dcc.send_file - send a file from disk
outputs vs output to avoid a perceived security issue.Download component. Along with this several utility functions are added to help construct the appropriate data format:
dcc.send_file - send a file from diskdcc.send_data_frame - send a DataFrame, using one of its writer methodsdcc.send_bytes - send a bytestring or the result of a bytestring writerdcc.send_string - send a string or the result of a string writerDatePickerRange that would sometimes shift the allowed dates by one day.EnhancedTab component that ignored disabled_className property#179 - Fixes #77 Added allow and referrerPolicy properties to html.Iframe
#178 - Fix #161 <object> 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.
updated _add_assets_resource to build asset urls the same way as get_asset_url.
dash.callback_context this addresses many use cases which require circular callbacks.dash[testing] requirements for easier integration in external projects. This PR also bumps many dash[dev] requirements.get_asset_url now pulls from an external source if assets_external_path is set.
_add_assets_resource to build asset urls the same way as get_asset_url.assets_external_path Dash argument to be more clear that it will allways be joined with the assets_url_path argument when determining the url to an external asset.import dash fail with a cryptic error message asking whether you have a file named "dash.py"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.drag_value prop to dcc.Sliderto be able to fire callbacks from dragging and releasing the slider.## Dash-Core-Components ### Updated - #898 - Patch Release 1.58.2
Feature release of Plotly.js 1.58.0 which:
ticklabelposition attribute to cartesian axes and colorbars #5275autotypenumbers to axes and layout #5240itemwidth to legends #5212root.color attribute to sunburst and treemap traces #5232, #5245Fixed #751, a bug that causes dcc.Slider and dcc.RangerSlider tooltips to be visible even if the slider component isn't visible (e.g. overflow),
app.callback(...) a decorator.dcc.Slider and dcc.RangerSlider tooltips to be visible even if the slider component isn't visible (e.g. overflow),## Dash and Dash-Renderer ### Fixed - #1426 Fix a regression caused by flask-compress==1.6.0 causing performance degradation on server requests
flask-compress==1.6.0 causing performance degradation on server requests## Dash and Dash-Renderer ### Fixed - #1415 Fix a regression with some layouts callbacks involving dcc.Tabs, not yet loaded dash_table.DataTable and d
refactored the existing extendTraces API to be a single mergeTraces API that can handle both prepend as well as extend.
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.persistenceTransforms to strip the time part of the datetime in the persited props of DatePickerSingle (date) and DatePickerRange (end_date, start_date), fixing dcc#700.prependData to Graph to support Plotly.prependTraces
extendTraces API to be a single mergeTraces API that can handle both prepend as well as extend.Feature release of Plotly.js 1.55.0 which:
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) .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.callback_context.record_timing(name, seconds)prevent_initial_call as a positional arg in callback definitionsticklabelmode on cartesian date axes #4993, #5055, #5060, #5065, #5088, #5089source attribute to image traces for fast rendering #5075zsmooth attribute for discrete heatmapgl traces #4953rangeslider #5025parent_className: Add CSS class for the outermost dcc.Loading parent div DOM node
app.logger.setLevel(logging.WARNING).--jl-prefix option to dash-generate-components, optionally generates Julia version of components and corresponding Julia packageInput, 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.dcc.Loading component
parent_className: Add CSS class for the outermost dcc.Loading parent div DOM nodeparent_style: Add CSS style property for the outermost dcc.Loading parent div DOM nodeclassName property, which changed in #740. parent_className (or inline styles in parent_style) now allow CSS rules to be applied to the outermost dcc.Loading div, which is no longer covered by className on loading completion as of Dash Core Components >= 1.9.1 (Dash >= 1.11.0).page_current and page_count fields to accommodate larger numbersAdds a new markdown_options property that supports:
title parameter to set the
document title. This is the recommended alternative to setting app.title or overriding
the index HTML.update_title parameter to set or disable the "Updating...." document title during updates. Closes #856 and #732### Fixed - #1310 Fix a regression since 1.13.0 preventing more than one loading state from being shown at a time.
## Dash-Table ### Fixed - #798 Fix a bug where headers are not aligned with columns after an update #797
Fix regression that causes crash when FLASK_ENV is modified during app execution
FLASK_ENV is modified during app execution_wait_for_callbacks to fail## Dash-Core-Components ### Updated - #824 - Upgraded plotly.js to 1.54.3 - Patch release 1.54.3 - Patch release 1.54.2
### 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 er
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.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.dash.testing is compatible with more pytest plugins, particularly pytest-flake8 and pytest-black.### Added - #1228 Adds control over firing callbacks on page (or layout chunk) load. Individual callbacks can have their initial calls disabled in the
@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.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.ALL wildcards in their Output which would fail if no components matched the pattern.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.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
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.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.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.uirevision was not behaving when inside a dcc.Loading component772 Modified dcc.Link to work with absolute paths if refresh=True.
dash.run_server() host and port parameters to be set with environment variables HOST & PORT, respectively### Added - #1133 Allow the compress config variable to be set with an environment variable with DASH_COMPRESS=FALSE
compress config variable to be set with an environment variable with DASH_COMPRESS=FALSE## Dash and Dash-Renderer ### Fixed - #1080 Handle case where dash fails to load when used inside an iframe with a sandbox attribute that only has all
number did not correctly update their values.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
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
dcc.Link (dccLink) and nested dcc.Markdown (dccMarkdown) react components inside of dcc.Markdownresponsive property that overrides the underlying Plotly.js graph responsiveness from Dash-landdash-graph--pending class to dcc.Graph, present while resizing, (re-)rendering, loadinghighlight.js is now bundled into the package, and no longer sets the window.hljs variable. Similarly to how plotly.js is handled, it is overridden by a user-provided version if one exists.presentation is specified as markdown.
window.hljs is specified, that will be used for highlighting instead.Upgraded plotly.js to 1.51.2 #708
visit_and_snapshot API in dash.testing.browser to stay on the page so you can run other checks.children in an array, and they get passed to other props.dash.testing stop API with process application runner in Python2. Use kill() instead of communicate() to avoid hanging.min and max are now omitted when the slider renders.marks labels.verticalHeight to Slider and RangeSlider, to allow the user to specify the height (in px) of vertical sliders. This defaults to 400.Fix and improve the clear_input() API in dash.testing, so it's more robust handling react input.
clear_input() API in dash.testing, so it's more robust handling react input.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.start_date, min_date_allowed, end_date, or max_date_allowed for the initial visible month if the value of the parameter initial_visible_month is not supplied.loading_state being handled incorrectly, causing the table to steal focus## Dash ### Fixed - #999 Fix fingerprint for component suites with metadata in version. - #983 Fix the assets loading issues when dashR application ru
metadata in version.## Dash and Dash-Renderer ### Fixed - #987 Fix cache string handling for component suites with nested folders in their packages. - #986 Fix a bug with
Reject all updates with throw window.dash_clientside.PreventUpdate;
throw window.dash_clientside.PreventUpdate;window.dash_clientside.no_updatexlsx library on exportthrow window.dash_clientside.PreventUpdate;window.dash_clientside.no_updatewait_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.Upgraded plotly.js to 1.50.1 #681
readonly columns.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_gr
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.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.dash.testing methods: clear_local_storage, clear_session_storage, and clear_storage (to clear both together)dash.testing adds two APIs zoom_in_graph_by_ratio and click_at_coord_fractions about advanced interactions using mouse ActionChainexport_columns that takes values all or visible (default). This prop controls the columns used during exportis blank unary operator. Returns true for undefined, null and ''.page_count that sets the maximum number of pages that are
accessible via the pagination menu when using backend pagination.datestartswith relational operator now supports number comparisonequal instead of the expected default for the column type0 (number)search_value prop to Dropdown, for server-side options loading/filtering. #660treemap trace type for display of hierarchical data.texttemplate support for all traces with on-graph text, and custom date formatting for templated on-graph and hover text.bar charts.Fix regression in DatePickerRange, DatePickerSingle, Input #652
Added support for persistence of user-edited props to value-input components: Checklist, DatePickerRange, DatePickerSingle, Dropdown, Input, RadioItem
--percy-assets in pytest to specify extra application assets path if neededwait_for_element_by_id and visit_and_snapshot APIs in browser, adds raw_command option (it also has higher priority than
the default waitress one) and optional start_timeout argument to handle large application within process runnerChecklist, DatePickerRange, DatePickerSingle, Dropdown, Input, RadioItems, RangeSlider, Slider, Tabs, and Textarea. New props are persistence, persistence_type, and persisted_props. Set persistence to a truthy value to enable, the other two modify persistence behavior. See plotly/dash#903 for more details. #646Slider and RangeSlider components with tooltip.always_visible #640Graph is wrapped by Loading component #608persistence, 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#566npm run build:local and pip install in editable mode, i.e. pip install -e . #910persistence, persistence_type, and persisted_props. Set persistence to a truthy value to enable, the other two modify persistence behavior. See plotly/dash#903 for more details.
#319data prop is loading.filter_query (e.g filter_query: '{colA} eq ""')
#567border-radius in style_** propswhite-space, overflow and text-overflow from its parent, making it possible to style
multi-line & ellipsis with style_data and other style props.
#583#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
dash-generate-components on Windows.--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.npm run build:local and pip install in editable mode, i.e. pip install -e .Fixed problems with Graph components leaking events and being recreated multiple times if declared with no ID #604
dev_tools_prune_errors to app.run_server and app.enable_dev_tools. Default True, tracebacks only include user code and below. Set it to False for the previous behavior showing all the Dash and Flask parts of the stack.Fixed problems with Graph components leaking events and being recreated multiple times if declared with no ID #604
Fixed problem with DatePickerRange component about clearable not working #614 and #594
column.selectable nested prop that displays a selection checkbox or radio button in the column.column_selectable prop to choose whether columns can be selected or not, and whether a single or
multiple selections can be in effect at the same time.selected_columns prop that contains the list of visible and hidden columns that are currently selectedderived_viewport_selected_columns that contains the list of visible columns that are currently selected
This prop is read-only. Use selected_columns in callbacks instead.export_format: display behavior.
#549dev_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.Upgraded plotly.js to 1.49.1 #595
Fixed inconsistent behavior of input with type=number #580
input with type=number #580indicator trace type for gauge and KPI displays.choroplethmapbox and densitymapbox trace types, numerous style options for mapbox subplots that do not require a Mapbox access token, and more.column.hideable flag that displays an "eye" action icon in the column
Accepts a boolean, array of booleans, 'last' or 'first'. Clicking on the "eye" will add the column to the hidden_columns prop.
hidden_columns can be added back through the Columns toggle menu whether they are hideable or not.column.clearable, column.deletable and column.renamable
These props now also accept 'last' and 'first'.
#313 Ability to export table as csv or xlsx file.
New column.clearable flag that displays a "eraser" action in the column
Accepts a boolean or array of booleans for multi-line headers.
Clicking a merged column's "eraser" will clear all related columns.
data.#318 Headers are included when copying from the table to different tabs and elsewhere. They are ignored when copying from the table onto itself and between two tables within the same tab.
#497 Like for clearing above, deleting through the "trash" action will also reset the filter for the affected column(s)
#524 Fixed readonly dropdown cells content (display label, not value)
#259 Fixed columns sticky on Safari
#491 Fixed inconsistent behaviors when editing cell headers
#521 Fixed white line artifacts when rendering the table with browser zoom different from 100%
Bump dash-table version from 4.0.1 to 4.0.2
💥 #808 Remove strong dash.testing dependencies per community feedback. Testing users should do pip install dash[testing] afterwards.
Nothing published for this version
💥 #761 Several breaking changes to the dash.Dash API:
💥 #761 Several breaking changes to the dash.Dash API:
static_folder and components_cache_max_agesupress_callback_exceptions fallbackresources.config.infer_from_layoutapp.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.hot_reload_interval from msec to seconds, for consistency with hot_reload_watch_intervalenable_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.
Nothing published for this version
Bump dash-core-components version from 0.47.0 to 0.48.0
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →