Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ jobs:
run: npm ci

- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: '3.12'
python-version: '3.14'
cache: pip

- name: Install Dash (editable)
Expand Down Expand Up @@ -155,9 +155,9 @@ jobs:
run: npm ci

- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: '3.12'
python-version: '3.14'
cache: pip

- name: Install Dash (editable)
Expand Down
90 changes: 45 additions & 45 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
python-version: ["3.9", "3.14"]

steps:
- name: Checkout repository
Expand All @@ -113,7 +113,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -174,9 +174,9 @@ jobs:
run: npm ci

- name: Set up Python for build
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: '3.12'
python-version: '3.14'
cache: pip

- name: Install build dependencies
Expand Down Expand Up @@ -237,10 +237,10 @@ jobs:
- name: Install Node.js dependencies
run: npm ci

- name: Set up Python 3.12
uses: actions/setup-python@v5
- name: Set up Python 3.14
uses: actions/setup-python@v7
with:
python-version: '3.12'
python-version: '3.14'
cache: 'pip'
cache-dependency-path: requirements/*.txt

Expand Down Expand Up @@ -273,7 +273,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
python-version: ["3.9", "3.14"]

# Redis service for the RedisSharedStorage backend.
services:
Expand Down Expand Up @@ -304,7 +304,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -347,7 +347,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
python-version: ["3.9", "3.14"]

# Service container for Redis
services:
Expand Down Expand Up @@ -383,7 +383,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -459,7 +459,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
python-version: ["3.9", "3.14"]

services:
redis:
Expand Down Expand Up @@ -488,7 +488,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -533,7 +533,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.12"]
python-version: ["3.14"]

steps:
- name: Checkout repository
Expand All @@ -549,7 +549,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -591,7 +591,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.12"]
python-version: ["3.14"]
test-group: ["1", "2", "3"]

steps:
Expand All @@ -608,7 +608,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -655,7 +655,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
python-version: ["3.9", "3.14"]

steps:
- name: Checkout repository
Expand All @@ -671,7 +671,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -716,7 +716,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
python-version: ["3.9", "3.14"]

steps:
- name: Checkout repository
Expand All @@ -732,7 +732,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -776,14 +776,14 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
python-version: ["3.9", "3.14"]
react-version: ["18.3.1", "19.2.4"]
test-group: ["1", "2", "3"]

env:
REACT_VERSION: ${{ matrix.react-version }}
PERCY_TOKEN: ${{ matrix.python-version == '3.12' && matrix.react-version == '18.3.1' && secrets.PERCY_TOKEN || '' }}
PERCY_ENABLE: ${{ matrix.python-version == '3.12' && matrix.react-version == '18.3.1' && '1' || '0' }}
PERCY_TOKEN: ${{ matrix.python-version == '3.14' && matrix.react-version == '18.3.1' && secrets.PERCY_TOKEN || '' }}
PERCY_ENABLE: ${{ matrix.python-version == '3.14' && matrix.react-version == '18.3.1' && '1' || '0' }}
PERCY_PARALLEL_TOTAL: -1
# Pin the build identity so every shard joins the same parallel build and
# Percy links it to the PR. Auto-detection otherwise uses the ephemeral
Expand All @@ -808,7 +808,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -839,11 +839,11 @@ jobs:
run: npm run setup-tests.py

- name: Run main integration tests
if: matrix.python-version != '3.12' || matrix.react-version != '18.3.1'
if: matrix.python-version != '3.14' || matrix.react-version != '18.3.1'
run: pytest --headless --nopercyfinalize --junitxml=test-reports/junit_intg.xml tests/integration --splits 3 --group ${{ matrix.test-group }}

- name: Run main integration tests with Percy
if: matrix.python-version == '3.12' && matrix.react-version == '18.3.1'
if: matrix.python-version == '3.14' && matrix.react-version == '18.3.1'
uses: ./.github/actions/percy-exec
with:
command: pytest --headless --nopercyfinalize --junitxml=test-reports/junit_intg.xml tests/integration --splits 3 --group ${{ matrix.test-group }}
Expand Down Expand Up @@ -878,13 +878,13 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
python-version: ["3.9", "3.14"]
react-version: ["18.3.1", "19.2.4"]

env:
REACT_VERSION: ${{ matrix.react-version }}
PERCY_TOKEN: ${{ matrix.python-version == '3.12' && matrix.react-version == '18.3.1' && secrets.PERCY_TOKEN || '' }}
PERCY_ENABLE: ${{ matrix.python-version == '3.12' && matrix.react-version == '18.3.1' && '1' || '0' }}
PERCY_TOKEN: ${{ matrix.python-version == '3.14' && matrix.react-version == '18.3.1' && secrets.PERCY_TOKEN || '' }}
PERCY_ENABLE: ${{ matrix.python-version == '3.14' && matrix.react-version == '18.3.1' && '1' || '0' }}
PERCY_PARALLEL_TOTAL: -1
# Pin the build identity so every shard joins the same parallel build and
# Percy links it to the PR. Auto-detection otherwise uses the ephemeral
Expand All @@ -909,7 +909,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -941,12 +941,12 @@ jobs:
run: npm ci

- name: Run HTML components tests
if: matrix.python-version != '3.12' || matrix.react-version != '18.3.1'
if: matrix.python-version != '3.14' || matrix.react-version != '18.3.1'
working-directory: components/dash-html-components
run: pytest --headless --nopercyfinalize --junitxml=test-reports/junit_html.xml

- name: Run HTML components tests with Percy
if: matrix.python-version == '3.12' && matrix.react-version == '18.3.1'
if: matrix.python-version == '3.14' && matrix.react-version == '18.3.1'
uses: ./.github/actions/percy-exec
with:
command: pytest --headless --nopercyfinalize --junitxml=test-reports/junit_html.xml
Expand Down Expand Up @@ -987,10 +987,10 @@ jobs:
node-version: '24'
cache: 'npm'

- name: Set up Python 3.12
uses: actions/setup-python@v5
- name: Set up Python 3.14
uses: actions/setup-python@v7
with:
python-version: '3.12'
python-version: '3.14'

- name: Install Node.js dependencies
run: npm ci
Expand Down Expand Up @@ -1033,7 +1033,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
python-version: ["3.9", "3.14"]

steps:
- name: Checkout repository
Expand All @@ -1046,7 +1046,7 @@ jobs:
cache: 'npm'

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -1081,14 +1081,14 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.12"]
python-version: ["3.9", "3.14"]
react-version: ["18.3.1", "19.2.4"]
test-group: ["1", "2", "3"]

env:
REACT_VERSION: ${{ matrix.react-version }}
PERCY_TOKEN: ${{ matrix.python-version == '3.12' && matrix.react-version == '18.3.1' && secrets.PERCY_TOKEN || '' }}
PERCY_ENABLE: ${{ matrix.python-version == '3.12' && matrix.react-version == '18.3.1' && '1' || '0' }}
PERCY_TOKEN: ${{ matrix.python-version == '3.14' && matrix.react-version == '18.3.1' && secrets.PERCY_TOKEN || '' }}
PERCY_ENABLE: ${{ matrix.python-version == '3.14' && matrix.react-version == '18.3.1' && '1' || '0' }}
PERCY_PARALLEL_TOTAL: -1
# Pin the build identity so every shard joins the same parallel build and
# Percy links it to the PR. Auto-detection otherwise uses the ephemeral
Expand All @@ -1113,7 +1113,7 @@ jobs:
run: npm ci

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
Expand Down Expand Up @@ -1191,10 +1191,10 @@ jobs:
- name: Install Node.js dependencies
run: npm ci

- name: Set up Python 3.12
uses: actions/setup-python@v5
- name: Set up Python 3.14
uses: actions/setup-python@v7
with:
python-version: '3.12'
python-version: '3.14'
cache: 'pip'
cache-dependency-path: requirements/*.txt

Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ This project adheres to [Semantic Versioning](https://semver.org/).
## [Unreleased]

### Added
- [#4036](https://github.com/plotly/dash/pull/4036) Added support for Python 3.13 and 3.14.
- [#3976](https://github.com/plotly/dash/pull/3976) Add a new `scrollToTop` prop to `dcc.Link` to control whether the page scrolls to the top after client-side navigation. It defaults to `True` to preserve the existing behavior. Fixes [#3974](https://github.com/plotly/dash/issues/3974).
- [#3947](https://github.com/plotly/dash/pull/3947) Make `plotly-cloud` a default install dependency of Dash instead of an optional extra, so the `plotly` CLI and Dash's cloud integration work out of the box. The `dash[cloud]` extra is kept for backward compatibility.
- [#3930](https://github.com/plotly/dash/pull/3930) Add shared storage: a backend-agnostic cross-process state manager (key/value with optional TTL, plus ordered replayable pub/sub) on every app via `dash.ctx.shared_storage`, started lazily and disabled with `shared_storage=None`. Ships `LocalSharedStorage` (default, in-memory with optional disk persistence), `DiskcacheSharedStorage`, and `RedisSharedStorage` for horizontally-scaled deployments; see `.ai/ARCHITECTURE.md`.
Expand Down
2 changes: 1 addition & 1 deletion requirements/ci.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Dependencies used by CI on github.com/plotly/dash
black==22.3.0
black==25.11.0
flake8==7.3.0
flaky==3.8.1
flask-talisman==1.1.0
Expand Down
2 changes: 2 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ def read_req_file(req_type):
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Database :: Front-Ends",
"Topic :: Office/Business :: Financial :: Spreadsheet",
"Topic :: Scientific/Engineering :: Visualization",
Expand Down
Loading