Description
<div align="center"><img src="https://raw.githubusercontent.com/pallets/werkzeug/refs/heads/stable/docs/_static/werkzeug-name.svg" alt="" height="150"></div> # Werkzeug *werkzeug* German noun: "tool". Etymology: *werk* ("work"), *zeug* ("stuff") Werkzeug is a comprehensive [WSGI][] web application library. It began as a simple collection of various utilities for WSGI applications and has become one of the most advanced WSGI utility libraries. It includes: - An interactive debugger that allows inspecting stack traces and source code in the browser with an interactive interpreter for any frame in the stack. - A full-featured request object with objects to interact with headers, query args, form data, files, and cookies. - A response object that can wrap other WSGI applications and handle streaming data. - A routing system for matching URLs to endpoints and generating URLs for endpoints, with an extensible system for capturing variables from URLs. - HTTP utilities to handle entity tags, cache control, dates, user agents, cookies, files, and more. - A threaded WSGI server for use while developing applications locally. - A test client for simulating HTTP requests during testing without requiring running a server. Werkzeug doesn't enforce any dependencies. It is up to the developer to choose a template engine, database adapter, and even how to handle requests. It can be used to build all sorts of end user applications such as blogs, wikis, or bulletin boards. [Flask][] wraps Werkzeug, using it to handle the details of WSGI while providing more structure and patterns for defining powerful applications. [WSGI]: https://wsgi.readthedocs.io/en/latest/ [Flask]: https://www.palletsprojects.com/p/flask/ ## A Simple Example ```python # save this as app.py from werkzeug.wrappers import Request, Response @Request.application def application(request: Request) -> Response: return Response("Hello, World!") if __name__ == "__main__": from werkzeug.serving import run_simple run_simple("127.0.0.1", 5000, application) ``` ``` $ python -m app * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) ``` ## Donate The Pallets organization develops and supports Werkzeug and other popular packages. In order to grow the community of contributors and users, and allow the maintainers to devote more time to the projects, [please donate today][]. [please donate today]: https://palletsprojects.com/donate ## Contributing See our [detailed contributing documentation][contrib] for many ways to contribute, including reporting issues, requesting features, asking or answering questions, and making PRs. [contrib]: https://palletsprojects.com/contributing/
Release History
| Version | Changes | Urgency | Date |
|---|---|---|---|
| 3.1.8 | Imported from PyPI (3.1.8) | Low | 4/21/2026 |
| 3.1.7 | This is the Werkzeug 3.1.7 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release. PyPI: https://pypi.org/project/Werkzeug/3.1.7/ Changes: https://werkzeug.palletsprojects.com/page/changes/#version-3-1-7 Milestone: https://github.com/pallets/werkzeug/milestone/44?closed=1 - `parse_list_header` preserves partially quoted items, discards empty items, and returns empty for unclosed quoted values | Medium | 3/24/2026 |
| 3.1.6 | This is the Werkzeug 3.1.6 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release. PyPI: https://pypi.org/project/Werkzeug/3.1.6/ Changes: https://werkzeug.palletsprojects.com/page/changes/#version-3-1-6 - `safe_join` on Windows does not allow special devices names in multi-segment paths. [GHSA-29vq-49wr-vm6x](https://github.com/pallets/werkzeug/security/advisories/GHSA-29vq | Low | 2/19/2026 |
| 3.1.5 | This is the Werkzeug 3.1.5 security fix release, which fixes security issues and bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release. PyPI: https://pypi.org/project/Werkzeug/3.1.5/ Changes: https://werkzeug.palletsprojects.com/page/changes/#version-3-1-5 Milestone: https://github.com/pallets/werkzeug/milestone/43?closed=1 - `safe_join` on Windows does not allow more special device names, regardless of extension or s | Low | 1/8/2026 |
| 3.1.4 | This is the Werkzeug 3.1.4 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release. PyPI: https://pypi.org/project/Werkzeug/3.1.4/ Changes: https://werkzeug.palletsprojects.com/page/changes/#version-3-1-4 Milestone: https://github.com/pallets/werkzeug/milestone/42?closed=1 - `safe_join` on Windows does not allow special device names. This prevents reading from these when using `send_from_directo | Low | 11/29/2025 |
| 3.1.3 | This is the Werkzeug 3.1.3 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes vs 3.1.0. PyPI: https://pypi.org/project/Werkzeug/3.1.3/ Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-1-3 Milestone: https://github.com/pallets/werkzeug/milestone/41?closed=1 - Initial data passed to `MultiDict` and similar interfaces only accepts `list`, `tuple`, or `set` when passing multiple values. It had been changed | Low | 11/8/2024 |
| 3.1.2 | This is the Werkzeug 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes vs 3.1.0. PyPI: https://pypi.org/project/Werkzeug/3.1.2/ Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-1-2 Milestone: https://github.com/pallets/werkzeug/milestone/40?closed=1 - Improve type annotation for `TypeConversionDict.get` to allow the `type` parameter to be a callable. #2988 - `Headers` does not inherit from `Muta | Low | 11/4/2024 |
| 3.1.1 | This is the Werkzeug 3.1.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes vs 3.1.0. PyPI: https://pypi.org/project/Werkzeug/3.1.1/ Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-1-1 Milestone: https://github.com/pallets/werkzeug/milestone/38?closed=1 - Fix an issue that caused `str(Request.headers)` to always appear empty. #2985 | Low | 11/1/2024 |
| 3.1.0 | This is the Werkzeug 3.1.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecations, or introduce potentially breaking changes. We encourage everyone to upgrade, and to use a tool such as [pip-tools](https://pypi.org/project/pip-tools/) to pin all dependencies and control upgrades. Test with warnings treated as errors to be able to adapt to deprecation warnings early. PyPI: https://pypi.org/project/Werkzeug/3.1.0/ Changes: https://w | Low | 10/31/2024 |
| 3.0.6 | This is the Werkzeug 3.0.6 security fix release, which fixes security issues but does not otherwise change behavior and should not result in breaking changes. PyPI: https://pypi.org/project/Werkzeug/3.0.6/ Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-0-6 - Fix how `max_form_memory_size` is applied when parsing large non-file fields. [GHSA-q34m-jh98-gwm2](https://github.com/advisories/GHSA-q34m-jh98-gwm2) - `safe_join` catches certain paths on Windows that we | Low | 10/25/2024 |
| 3.0.5 | This is the Werkzeug 3.0.5 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes. PyPI: https://pypi.org/project/Werkzeug/3.0.5/ Changes: https://werkzeug.palletsprojects.com/en/stable/changes/#version-3-0-5 Milestone: https://github.com/pallets/werkzeug/milestone/37?closed=1 - The Watchdog reloader ignores file closed no write events. #2945 - Logging works with client addresses containing an IPv6 scope. #2952 - Ignore invalid au | Low | 10/25/2024 |
| 3.0.4 | This is the Werkzeug 3.0.4 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes. PyPI: https://pypi.org/project/Werkzeug/3.0.4/ Changes: https://werkzeug.palletsprojects.com/en/3.0.x/changes/#version-3-0-4 Milestone: https://github.com/pallets/werkzeug/milestone/36?closed=1 - Restore behavior where parsing `multipart/x-www-form-urlencoded` data with invalid UTF-8 bytes in the body results in no form data parsed rather than | Low | 8/21/2024 |
| 3.0.3 | This is the Werkzeug 3.0.3 security release, which fixes security issues and bugs but does not otherwise change behavior and should not result in breaking changes. PyPI: https://pypi.org/project/Werkzeug/3.0.3/ Changes: https://werkzeug.palletsprojects.com/en/3.0.x/changes/#version-3-0-3 Milestone: https://github.com/pallets/werkzeug/milestone/35?closed=1 - Only allow `localhost`, `.localhost`, `127.0.0.1`, or the specified hostname when running the dev server, to make debugger request | Low | 5/5/2024 |
| 3.0.2 | This is a fix release for the 3.0.x feature branch. * Changes: https://werkzeug.palletsprojects.com/en/3.0.x/changes/#version-3-0-2 | Low | 4/6/2024 |
| 2.3.8 | This is a security release for the 2.3.x feature branch. * Changes: https://werkzeug.palletsprojects.com/en/2.3.x/changes/#version-2-3-8 | Low | 11/8/2023 |
| 3.0.1 | This is a security release for the 3.0.x feature branch. * Changes: https://werkzeug.palletsprojects.com/en/3.0.x/changes/#version-3-0-1 | Low | 10/24/2023 |
| 3.0.0 | This is a feature release, which includes new features, removes previously deprecated code, and adds new deprecations. The 3.0.x branch is now the supported fix branch, the 2.3.x branch will become a tag marking the end of support for that branch. We encourage everyone to upgrade, and to use a tool such as [pip-tools](https://pypi.org/project/pip-tools/) to pin all dependencies and control upgrades. Test with warnings treated as errors to be able to adapt to deprecation warnings early. * Chan | Low | 9/30/2023 |
| 2.3.7 | This is a fix release for the 2.3.x feature branch. * Changes: https://werkzeug.palletsprojects.com/en/2.3.x/changes/#version-2-3-7 * Milestone: https://github.com/pallets/werkzeug/milestone/33?closed=1 | Low | 8/14/2023 |
| 2.3.6 | This is a fix release for the 2.3.x feature branch. * Changes: https://werkzeug.palletsprojects.com/en/2.3.x/changes/#version-2-3-6 * Milestone: https://github.com/pallets/werkzeug/milestone/32?closed=1 | Low | 6/8/2023 |
| 2.3.5 | This is a fix release for the 2.3.x feature branch. * Changes: https://werkzeug.palletsprojects.com/en/2.3.x/changes/#version-2-3-5 * Milestone: https://github.com/pallets/werkzeug/milestone/31?closed=1 | Low | 6/7/2023 |
| 2.3.4 | This is a fix release for the 2.3.x release branch. * Changes: https://werkzeug.palletsprojects.com/en/2.3.x/changes/#version-2-3-4 * Milestone: https://github.com/pallets/werkzeug/milestone/30?closed=1 | Low | 5/8/2023 |
| 2.3.3 | This is a fix release for the 2.3.x release branch. * Changes: https://werkzeug.palletsprojects.com/en/2.3.x/changes/#version-2-3-3 * Milestone: https://github.com/pallets/werkzeug/milestone/29?closed=1 | Low | 5/1/2023 |
| 2.3.2 | This is a fix release for the 2.3.x release branch. - Changes: https://werkzeug.palletsprojects.com/en/2.3.x/changes/#version-2-3-2 - Milestone: https://github.com/pallets/werkzeug/milestone/28?closed=1 | Low | 4/28/2023 |
| 2.3.1 | This is a fix release for the 2.3.x release branch. * Changes: https://werkzeug.palletsprojects.com/en/2.3.x/changes/#version-2-3-1 * Milestone: https://github.com/pallets/werkzeug/milestone/27?closed=1 | Low | 4/27/2023 |
| 2.3.0 | This is a feature release, which includes new features, removes previously deprecated code, and adds new deprecations. The 2.3.x branch is now the supported fix branch, the 2.2.x branch will become a tag marking the end of support for that branch. We encourage everyone to upgrade, and to use a tool such as [pip-tools](https://pypi.org/project/pip-tools/) to pin all dependencies and control upgrades. Test with warnings treated as errors to be able to adapt to deprecation warnings early. * Chan | Low | 4/25/2023 |
| 2.2.3 | This is a fix release for the 2.2.x release branch. * Changes: https://werkzeug.palletsprojects.com/en/2.2.x/changes/#version-2-2-3 * Milestone: https://github.com/pallets/werkzeug/milestone/26?closed=1 This release contains security fixes for: * https://github.com/pallets/werkzeug/security/advisories/GHSA-xg9f-g7g7-2323 * https://github.com/pallets/werkzeug/security/advisories/GHSA-px8h-6qxv-m22q | Low | 2/14/2023 |
| 2.2.2 | This is a fix release for the [2.2.0](https://github.com/pallets/werkzeug/releases/tag/2.2.0) feature release. * Changes: https://werkzeug.palletsprojects.com/en/2.2.x/changes/#version-2-2-2 * Milestone: https://github.com/pallets/werkzeug/milestone/25?closed=1 | Low | 8/8/2022 |
| 2.2.1 | This is a fix release for the [2.2.0](https://github.com/pallets/werkzeug/releases/tag/2.2.0) feature release. * Changes: https://werkzeug.palletsprojects.com/en/2.2.x/changes/#version-2-2-1 * Milestone: https://github.com/pallets/werkzeug/milestone/24?closed=1 | Low | 7/27/2022 |
| 2.2.0 | This is a feature release, which includes new features and removes previously deprecated features. The 2.2.x branch is now the supported bugfix branch, the 2.1.x branch will become a tag marking the end of support for that branch. We encourage everyone to upgrade, and to use a tool such as [pip-tools](https://pypi.org/project/pip-tools/) to pin all dependencies and control upgrades. * Changes: https://werkzeug.palletsprojects.com/en/2.2.x/changes/#version-2-2-0 * Milestone: https://github.co | Low | 7/23/2022 |
| 2.1.2 | This is a fix release for the [2.1.0](https://github.com/pallets/werkzeug/releases/tag/2.1.0) feature release. * Changes: https://werkzeug.palletsprojects.com/en/2.1.x/changes/#version-2-1-2 * Milestone: https://github.com/pallets/werkzeug/milestone/22?closed=1 | Low | 4/28/2022 |
| 2.1.1 | This is a fix release for the [2.1.0](https://github.com/pallets/werkzeug/releases/tag/2.1.0) feature release. * Changes: https://werkzeug.palletsprojects.com/en/2.1.x/changes/#version-2-1-1 * Milestone: https://github.com/pallets/werkzeug/milestone/19?closed=1 | Low | 4/1/2022 |
| 2.1.0 | This is a feature release, which includes new features and removes previously deprecated features. The 2.1.x branch is now the supported bugfix branch, the 2.0.x branch will become a tag marking the end of support for that branch. We encourage everyone to upgrade, and to use a tool such as [pip-tools](https://pypi.org/project/pip-tools/) to pin all dependencies and control upgrades. * Changes: https://werkzeug.palletsprojects.com/en/2.1.x/changes/#version-2-1-0 * Milestone: https://github.co | Low | 3/28/2022 |
| 2.0.3 | * Changes: https://werkzeug.palletsprojects.com/en/2.0.x/changes/#version-2-0-3 * Milestone: https://github.com/pallets/werkzeug/milestone/18?closed=1 | Low | 2/7/2022 |
| 2.0.2 | * Changes: https://werkzeug.palletsprojects.com/en/2.0.x/changes/#version-2-0-2 | Low | 10/6/2021 |
| 2.0.1 | * Changes: https://werkzeug.palletsprojects.com/en/2.0.x/changes/#version-2-0-1 | Low | 5/17/2021 |
| 2.0.0 | New major versions of all the core Pallets libraries, including Werkzeug 2.0, have been released! :tada: * Read the announcement on our blog: https://palletsprojects.com/blog/flask-2-0-released/ * Read the full list of changes: https://werkzeug.palletsprojects.com/changes/#version-2-0-0 * Retweet the announcement on Twitter: https://twitter.com/PalletsTeam/status/1392266507296514048 * Follow our blog, Twitter, or GitHub to see future announcements. This represents a significant amount | Low | 5/12/2021 |
| 2.0.0rc5 | * Changes: https://werkzeug.palletsprojects.com/en/master/changes#version-2-0-0 | Low | 5/3/2021 |
| 2.0.0rc4 | * Changes: https://werkzeug.palletsprojects.com/en/master/changes/#version-2-0-0 | Low | 4/16/2021 |
| 2.0.0rc3 | * Changes: https://werkzeug.palletsprojects.com/en/master/changes/#version-2-0-0 Use the `--pre` flag to install this pre-release: ``` pip install --pre Werkzeug==2.0.0rc3 ``` | Low | 3/17/2021 |
| 2.0.0rc2 | * Changes: https://werkzeug.palletsprojects.com/en/master/changes/#version-2-0-0 Use the `--pre` flag to install this pre-release: ``` pip install --pre Werkzeug==2.0.0rc2 ``` | Low | 3/3/2021 |
| 2.0.0rc1 | * Changes: https://werkzeug.palletsprojects.com/en/master/changes/#version-2-0-0 Use the `--pre` flag to install this pre-release: ``` pip install --pre Werkzeug==2.0.0rc1 ``` | Low | 2/9/2021 |
| 1.0.1 | * Changelog: https://werkzeug.palletsprojects.com/en/1.0.x/changes/#version-1-0-1 | Low | 3/31/2020 |
| 1.0.0 | After 13 years of development, we're finally 1.0! Note that previously deprecated code has been removed in this release. Use 0.16.1 as an intermediate step to see deprecation warnings and upgrade. * Blog: https://palletsprojects.com/blog/werkzeug-1-0-0-released * Changelog: https://werkzeug.palletsprojects.com/en/1.0.x/changes/#version-1-0-0 * Twitter: https://twitter.com/PalletsTeam/status/1225561504004689920 | Low | 3/31/2020 |
| 1.0.0rc1 | * Changes: https://werkzeug.palletsprojects.com/en/master/changes/#version-1-0-0 Use the `--pre` flag to install this pre-release: ``` pip install --pre Werkzeug==1.0.0rc1 ``` | Low | 1/31/2020 |
| 0.16.1 | * Changelog: https://werkzeug.palletsprojects.com/en/0.16.x/changes/#version-0-16-1 | Low | 1/27/2020 |
| 0.16.0 | Most of the top-level attributes in the `werkzeug` module are now deprecated, and will be removed in 1.0.0. For example, instead of `import werkzeug; werkzeug.url_quote`, do `from werkzeug.urls import url_quote`. A deprecation warning will show the correct import to use. `werkzeug.exceptions` and `werkzeug.routing` should also be imported instead of accessed, but for technical reasons canβt show a warning. * Blog: https://palletsprojects.com/blog/werkzeug-0-16-0-released * Changelog: http | Low | 9/19/2019 |
| 0.15.6 | The issue causing the reloader to fail when running from a setuptools entry point (like `flask run`) on Windows has been fixed. * Changelog: http://werkzeug.palletsprojects.com/en/0.15.x/changes/#version-0-15-6 | Low | 9/4/2019 |
| 0.15.5 | * Changelog: http://werkzeug.palletsprojects.com/en/0.15.x/changes/#version-0-15-5 | Low | 7/17/2019 |
| 0.15.4 | * Blog: https://palletsprojects.com/blog/werkzeug-0-15-3-released/ * Changes: https://werkzeug.palletsprojects.com/en/0.15.x/changes/#version-0-15-4 | Low | 5/15/2019 |
| 0.15.3 | * Blog: https://palletsprojects.com/blog/werkzeug-0-15-3-released/ * Changes: https://werkzeug.palletsprojects.com/en/0.15.x/changes/#version-0-15-3 | Low | 5/15/2019 |
