Safely add untrusted strings to HTML/XML markup.
Project Links
Meta
Maintainer: Pallets
Requires Python: >=3.9
Classifiers
Development Status
- 5 - Production/Stable
Environment
- Web Environment
Intended Audience
- Developers
Operating System
- OS Independent
Programming Language
- Python
Topic
- Internet :: WWW/HTTP :: Dynamic Content
- Text Processing :: Markup :: HTML
Typing
- Typed
MarkupSafe
MarkupSafe implements a text object that escapes characters so it is safe to use in HTML and XML. Characters that have special meanings are replaced so that they display as the actual characters. This mitigates injection attacks, meaning untrusted user input can safely be displayed on a page.
Examples
>>> from markupsafe import Markup, escape
>>> # escape replaces special characters and wraps in Markup
>>> escape("<script>alert(document.cookie);</script>")
Markup('<script>alert(document.cookie);</script>')
>>> # wrap in Markup to mark text "safe" and prevent escaping
>>> Markup("<strong>Hello</strong>")
Markup('<strong>hello</strong>')
>>> escape(Markup("<strong>Hello</strong>"))
Markup('<strong>hello</strong>')
>>> # Markup is a str subclass
>>> # methods and operators escape their arguments
>>> template = Markup("Hello <em>{name}</em>")
>>> template.format(name='"World"')
Markup('Hello <em>"World"</em>')
Donate
The Pallets organization develops and supports MarkupSafe 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.
Contributing
See our detailed contributing documentation for many ways to contribute, including reporting issues, requesting features, asking or answering questions, and making PRs.
3.0.3
Sep 27, 2025
3.0.2
Oct 18, 2024
3.0.1
Oct 08, 2024
3.0.0
Oct 07, 2024
2.1.5
Feb 02, 2024
2.1.4
Jan 19, 2024
2.1.3
Jun 02, 2023
2.1.2
Jan 17, 2023
2.1.1
Mar 15, 2022
2.1.0
Feb 18, 2022
2.0.1
May 18, 2021
2.0.0
May 11, 2021
2.0.0rc2
Apr 16, 2021
2.0.0rc1
Feb 15, 2021
2.0.0a1
Apr 10, 2020
1.1.1
Feb 24, 2019
1.1.0
Nov 05, 2018
1.0
Mar 07, 2017
0.23
May 08, 2014
0.22
May 08, 2014
0.21
Apr 17, 2014
0.20
Apr 17, 2014
0.19
Mar 06, 2014
0.18
May 22, 2013
0.17
May 21, 2013
0.16
May 20, 2013
0.15
Jul 20, 2011
0.14
Jul 20, 2011
0.13
Jul 20, 2011
0.12
Feb 17, 2011
0.11
Sep 07, 2010
0.9.3
Aug 11, 2010
0.9.2
Jun 22, 2010
0.9.1
Jun 22, 2010
0.9
Jun 22, 2010
Wheel compatibility matrix
Files in release
markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl (11.4KiB)
markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl (11.8KiB)
markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (21.5KiB)
markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (20.2KiB)
markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (20.2KiB)
markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl (21.0KiB)
markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl (19.8KiB)
markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl (20.3KiB)
markupsafe-3.0.3-cp310-cp310-win32.whl (14.2KiB)
markupsafe-3.0.3-cp310-cp310-win_amd64.whl (14.7KiB)
markupsafe-3.0.3-cp310-cp310-win_arm64.whl (13.6KiB)
markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl (11.4KiB)
markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl (11.8KiB)
markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (23.7KiB)
markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22.4KiB)
markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (21.4KiB)
markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl (23.1KiB)
markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl (21.0KiB)
markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl (22.4KiB)
markupsafe-3.0.3-cp311-cp311-win32.whl (14.2KiB)
markupsafe-3.0.3-cp311-cp311-win_amd64.whl (14.7KiB)
markupsafe-3.0.3-cp311-cp311-win_arm64.whl (13.6KiB)
markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl (11.3KiB)
markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl (11.7KiB)
markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (23.8KiB)
markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22.4KiB)
markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (21.4KiB)
markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl (23.2KiB)
markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl (21.0KiB)
markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl (22.5KiB)
markupsafe-3.0.3-cp312-cp312-win32.whl (14.2KiB)
markupsafe-3.0.3-cp312-cp312-win_amd64.whl (14.8KiB)
markupsafe-3.0.3-cp312-cp312-win_arm64.whl (13.6KiB)
markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl (11.3KiB)
markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl (11.7KiB)
markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (23.8KiB)
markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22.4KiB)
markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (21.5KiB)
markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl (23.2KiB)
markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl (21.1KiB)
markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl (22.5KiB)
markupsafe-3.0.3-cp313-cp313-win32.whl (14.2KiB)
markupsafe-3.0.3-cp313-cp313-win_amd64.whl (14.8KiB)
markupsafe-3.0.3-cp313-cp313-win_arm64.whl (13.6KiB)
markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl (11.4KiB)
markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl (11.8KiB)
markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (25.0KiB)
markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (23.0KiB)
markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (22.7KiB)
markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl (24.2KiB)
markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl (22.2KiB)
markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl (23.1KiB)
markupsafe-3.0.3-cp313-cp313t-win32.whl (14.3KiB)
markupsafe-3.0.3-cp313-cp313t-win_amd64.whl (14.8KiB)
markupsafe-3.0.3-cp313-cp313t-win_arm64.whl (13.6KiB)
markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl (11.3KiB)
markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl (11.7KiB)
markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (23.8KiB)
markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22.5KiB)
markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (21.5KiB)
markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl (23.3KiB)
markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl (21.1KiB)
markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl (22.5KiB)
markupsafe-3.0.3-cp314-cp314-win32.whl (14.4KiB)
markupsafe-3.0.3-cp314-cp314-win_amd64.whl (15.0KiB)
markupsafe-3.0.3-cp314-cp314-win_arm64.whl (13.7KiB)
markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl (11.4KiB)
markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl (11.8KiB)
markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (25.1KiB)
markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (23.0KiB)
markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (22.7KiB)
markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl (24.3KiB)
markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl (22.2KiB)
markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl (23.1KiB)
markupsafe-3.0.3-cp314-cp314t-win32.whl (14.5KiB)
markupsafe-3.0.3-cp314-cp314t-win_amd64.whl (15.1KiB)
markupsafe-3.0.3-cp314-cp314t-win_arm64.whl (13.8KiB)
markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl (11.4KiB)
markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl (11.8KiB)
markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (21.4KiB)
markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (20.1KiB)
markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl (20.1KiB)
markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl (20.9KiB)
markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl (19.7KiB)
markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl (20.1KiB)
markupsafe-3.0.3-cp39-cp39-win32.whl (14.2KiB)
markupsafe-3.0.3-cp39-cp39-win_amd64.whl (14.7KiB)
markupsafe-3.0.3-cp39-cp39-win_arm64.whl (13.6KiB)
markupsafe-3.0.3.tar.gz (78.4KiB)
No dependencies