NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #862 most downloaded on PyPI
Extension pack for Python Markdown.
Last release 9 days ago
23 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
124 releases · first in 2015
NEW: Formally declare support for Python 3.11.
** nested between * would be handled in an unexpected way.NEW: Tabbed: Add new syntax to allow forcing a specific tab to be select by default.
One column per quarter.
NEW: Highlight: Allow greater granularity of specifying where language guessing takes place via guess_lang option (e.g. block vs inline).
guess_lang
option (e.g. block vs inline).;.NEW: InlineHilite: Custom inline code block formatters can now be forced to raise an exception by raising a InlineHiliteException.
InlineHiliteException.check_paths is enabled), all other
errors will be propagated up.SnippetMissingError instead of IOError.NEW: Highlight: Changes in order to support Pygments 2.12+. If using Pygments and a version less than 2.12 is installed, Highlight will raise an excep
NEW: B64: Allow SVG to be encoded and inlined.
file:// prefix on absolute paths.extend_pygments_lang is not case sensitive regarding language names.NEW: Drop Python 3.6 support and formally add Python 3.10 support.
pygments_lang_option to enable attaching language classes to Pygments code blocks.SuperFencesException.power and fingerprint keys.NEW: Highlight: If linenums is enabled globally via the highlight extension, and a code block specifies a line number of zero (e.g. SuperFences), disa
linenums is enabled globally via the highlight extension, and a code block specifies a
line number of zero (e.g. SuperFences), disable line numbers for that code block.auto_append feature that was added in 8.2.attr_list is enabled, attributes were not properly added to Pygments code blocks in the
table format. (#1505)This guide will touch on migration concerns related to removals, deprecations, and/or breaking changes.
There are many new features that come with 9.0, and a little housecleaning as well. This guide will touch on migration concerns related to removals, deprecations, and/or breaking changes.
In general, there should be no breaking changes in 9.0 unless you were still using old, already deprecated features.
Removed deprecated features:
Highlight's legacy_no_wrap_code option was removed. This used to allow people to output code blocks in Pygments'
original way, which simply inserted code in a #!html <pre> block. This was added all the way back in 6.3 and was
only added to help transition people to the new output which is HTML5 compatible and wraps code in
#!html <pre><code> blocks. If you have styling or logic that depending on this old, deprecated option, you will
have to update said styles and/or script logic to account for the new output.
Highlight's highlight_code option has formally been removed. This option as been a NOOP for a long time and was
just left around in order to not break people's usage of Highlight. It has now been removed. If it was still hanging
around in your config, it should simply be removed. Nothing functionally will change.
SuperFences, in 7.0, changed up the format of the custom fences. When custom fences were added, a full vision of how they would/should be used had not fully cemented, so unfortunately they have been revised occasionally, 7.0 being the most recent time. To help transition people, a fallback was left in with a warning. This fallback code has now been removed. Information regarding how to upgrade the format is available in the 7.0 release guide.
As far as deprecated functions and features are concerned:
Arithmatex has deprecated all of its SuperFences custom fence functions and instead has replaced it with two configurable methods. MkDocs users may have some concerns that these will not work in the YAML configuration, but fear not as things work just fine. Check out Arithmatex Custom Fences for more info.
PyMdown Extensions provided a number of slugify functions which, like with Arithmatex, have been consolidated into a single configurable function. With this consolidation, two new options have been added that allow applying Python's default case folding on slugs and allow configuring Unicode normalization. Personally, we feel NFC is the way to go, but if others disagree, this is now configurable. Check out One Slugify to Rule Them All. Much like the new Arithmatex formatters, these slugs, even though they are configurable, will work with MkDocs just fine.
Arithmatex now as two new custom fences that can be used for InlineHilite and SuperFences: arithmatex_inline_format
and arithmatex_fenced_format respectively. They can do everything the old methods can do and are configurable. The old
formatters are still available, but have been deprecated.
arithmatex_inline_format is meant for InlineHilite and replaces all other inline formatters. The table below shows how
to migrate:
| Name | Migration |
|---|---|
inline_mathjax_preview_format |
#!py arithmatex_inline_format(mode="mathjax", preview=True) |
inline_mathjax_format |
#!py arithmatex_inline_format(mode="mathjax") |
inline_generic_format |
#!py arithmatex_inline_format(mode="generic") |
arithmatex_fenced_format is meant for SuperFences and replaces all related fenced style formatters.
| Name | Migration |
|---|---|
fence_mathjax_preview_format |
#!py arithmatex_fenced_format(mode="mathjax", preview=True) |
_inline_mathjax_format |
#!py arithmatex_fenced_format(mode="mathjax") |
inline_generic_format |
#!py arithmatex_fenced_format(mode="generic") |
These new, custom fences also add some new features, like being able to change the wrapper element. If you happen to
use MkDocs with Arithmatex, and happen to use mkdocs-minify-plugin, you may notice that some math blocks don't render
proper. This is because the plugin butchers white space in the wrapper #!html <div> element. Now you can wrap your
math in a #!html <pre> and move on :smile:. This is configurable as an Arithmatex option called block_tag and
inline_tag. The custom fences and formatters also have a tag option where this can be configured.
/// note | MkDocs Users Fear not, this works for MkDocs as well! Using the following syntax can allow you to specify the function with keyword arguments:
markdown_extensions:
- pymdownx.superfences:
custom_fences:
- name: math
class: arithmatex
format: !!python/object/apply:pymdownx.arithmatex.arithmatex_fenced_format {kwds: {mode: generic, tag: pre}}
While the above is a personal preference as it keeps the arguments on the same line as the function, you can also specify them in this way which some may find cleaner:
markdown_extensions:
- pymdownx.superfences:
custom_fences:
- name: math
class: arithmatex
format: !!python/object/apply:pymdownx.arithmatex.arithmatex_fenced_format
kwds:
mode: generic
tag: pre
///
Previously, the slug module provided numerous slugify functions, they have all been reduced to one configurable
function. Migration is shown below:
| Name | Migration |
|---|---|
uslugify |
#!py slugify(case="lower", percent_encode=True) |
uslugify_encoded |
#!py slugify(case="lower", ) |
uslugify_cased |
#!py slugify(percent_encode=True) |
uslugify_cased_encoded |
#!py slugify() |
gfm |
#!py slugify(case="lower-ascii", percent_encode=True) |
gfm_encoded |
#!py slugify(case="lower-ascii") |
Additionally, you can now set case="fold" to use Python's default case folding and set normalize to different
Unicode normalization modes (NFC is default).
/// note | MkDocs Users Fear not, this works for MkDocs as well! Using the following syntax can allow you to specify the function with keyword arguments:
markdown_extensions:
- markdown.extensions.toc:
slugify: !!python/object/apply:pymdownx.slugs.slugify {kwds: {case: lower}}
While the above is a personal preference as it keeps the arguments on the same line as the function, you can also specify them in this way which some may find cleaner:
markdown_extensions:
- markdown.extensions.toc:
slugify: !!python/object/apply:pymdownx.slugs.slugify
kwds:
case: lower
///
Please see Migration Notes for details on upgrading to 9.0.
arithmatex class added just like
everywhere else.:man_in_santa_hat: and :mx_claus: backwards -- same for :mrs_claus: and :woman_in_santa_hat:. That is on
Twitter's side, not ours.linespans.lineanchors.anchorlinenos.legacy_no_wrap_code option.auto_title option. If a specific name is not preferred, these names can be overridden via
a user defined mapping called auto_title_map.title option in a fenced code
header.data- attributes on Pygments code blocks. The latter requires
the attr_list extension to be enabled.highlight_code which no longer did anything.slugify function that aims to replace all other slugify methods. Deprecate
uslugify, uslugify_encoded, uslugify_case, uslugify_case_encoded, gfm, and gfm_encoded. slugify takes
parameters returning a function that performs the desired slug handling. slugify adds new options case="fold"
for case folding and normalize='<normalize format here>' (uses NFC by default).pymdownx-inline. Lines not
showing a line number would not render with the proper leading space.Nothing published for this version
NEW: Snippets: now accepts a list of base paths which will be resolved in the order they are specified. Compatibility is present with legacy behavior,
?<num> to link discussions. Full
discussion links will also be shortened if shortening is enabled. (#1187)normalize_issue_symbols option to make issues, pull request, and discussion links all
render with # instead of #, !, and ? respectively. Input syntax is still the same. Great if you want a
GitHub style look where all issue types are just rendered with #.FIX: Ensure content immediately before Details content or Tabbed content gets preserved.
NEW: Drop support for Python 3.5.
FIX: Fix issue with pymdownx-inline an Pygments 2.7+.
pymdownx-inline an Pygments 2.7+.Some previously deprecated features are now removed: tabbed code blocks via SuperFences and ExtraRawHTML. These were originally deprecated as they are…
In general, there are a couple things to be aware of when upgrading to 8.0.
Some previously deprecated features are now removed: tabbed code blocks via SuperFences and ExtraRawHTML. These were originally deprecated as they are now redundant, and information is provided to allow you to get the same behavior as before.
One of the most invasive changes was adding the support of defining arbitrary attributes on code blocks in SuperFences via the brace header format. This caused numerous changes that affects those who define their own custom fences. If you are only using the builtin fences provided by SuperFences, you will likely notice no adverse affects, but will be able to take advantage of new the new features being offered.
SuperFences adds the ability, when using the brace header format (```{.lang .class #id attr=value}) to add
arbitrary HTML attributes to code blocks. By default, all classes, IDs and attributes are added to the code block
of the generated output. The one exception is that the default highlight class is always added to the top level
element.
For instance, if a user needed to specify that a line number starts with an attribute data-linenum-start, they
could simply use the brace header format to define this new attribute:
```{.python data-linenum-start="30"}
import sys
```
Attributes will only be used when Python Markdown's [attr_list][attr-list] extension is enabled. Attributes will
also be ignored when using Pygments as Pygments doesn't directly support adding IDs or arbitrary attributes.
This allows for more extensive configuration when using JavaScript highlighters. Now users can set the appropriate attributes to configure line numbers and other highlighter specific features without the Highlight extension getting in the way.
Some JS highlighters may require attributes and classes to be assigned to the pre element, so the
Highlight extension has added a new feature called code_attr_on_pre. This new
option will ensure that custom classes, IDs, and attributes are applied to the pre element instead.
By default, JavaScript ready code blocks would normally have the specified language class prefixed with language-.
This follows the HTML 5 specification, but some highlighters may prefer something different. The prefix can now be
changed with the new Highlight option called language_prefix.
The legacy tab feature has been removed from SuperFences. This does not mean tab support is dead as the Tabbed extension actually provides an even more useful, general purpose, solution. It was impossible to keep this legacy feature around, in its current implementation, after the restructure of for attribute list support, so we decided to officially retire this already deprecated feature.
ExtraRawHTML has officially been removed. This extension only existed because Python Markdown did not have the
feature exposed in a manner that allowed you to use it without including all of their "Extra" extension, now that
Python Markdown has exposed this extension by itself, there is no longer a reason for us expose it via
ExtraRawHTML. Please use Python Markdown's [md_in_html][md-in-html] extension instead to get the same exact
functionality.
SuperFences made numerous changes so that users who wish not to use Pygments can set arbitrary attributes via the brace header format so that can more extensively configure their code blocks for JavaScript syntax highlighters. This required changes to how custom fences were handled.
Custom fence formatters are now expected to take a new keyword attribute called attrs. attrs contains a
dictionary of key/value pairs defining attributes that should be attached to the main block element generated by a
given formatter. In general, custom formatters should handle these, but are not required to. At the very least,
they should be updated to take the argument even if they don't do anything with them. Custom fences that do not
accept this parameter will silently fail. If your custom fence already accepts **kwargs (as recommended in the 7.0
release), your fence should continue to work even you do not do anything with the attributes. No use and apply the
new, attributes, you will have to read the attrs parameter and set those to one of the elements in your generated
HTML.
Custom fence validators have been updated to handle validation of inputs by assigning valid inputs to either an
options dictionary or an attrs dictionary. The new function signature looks like this:
#!py3 validator(language, inputs, options, attrs, md):.
inputs contains all the parsed key/value pairs and should never be modified. options should have inputs
added to it that configure a formatter's features. You should parse, format and assign all inputs that are
considered options to the option dictionary.
attrs normally would contain copies of any non-option key/value pairs from inputs, unaltered. These would
usually be applied to HTML elements as attributes.
md is the Markdown class instance and is useful if you want to access meta data or anything else in your
validator.
SuperFences will detect if you are using an older validator and should gracefully transition and use the old format, but it is strongly recommended to use the new format. If you run into any issues, you are required to update to the new format. In a future version, the graceful transition will be removed.
Since attributes and options are now parsed via the [attr_list][attr-list] extension, custom fences can no longer
allow inputs in the form key= (with no value), they must be in the form key, key="value" or key=value. When
defining an input in the form key (with no value), the value will be the key name (this is how
[attr_list][attr-list] handles such cases). To specify an empty key, please use key="".
If a custom validator fails, SuperFences will now gracefully handle the error and try the next custom fence in the queue. If a custom formatter fails. If you suspect your custom validator is not working, you should add your own debug code to your custom fence to verify whether it is failing or not.
SuperFences will gracefully handle the error and abort processing the fence. If you suspect your custom formatter is not working, you should add your own debug code to your custom fence to verify whether it is failing or not.
SaneHeaders implements Markdown headers more like CommonMark. Headers require a space
after the # symbol in order for the line to be treated as a header. This allows you to use
MagicLink issues at the start of a line. See
SaneHeaders documentation for more information.
Please see Migration Notes for details on upgrading to 8.0.
key= (no value). Only keys with values or keys
with no value and no = are accepted. Keys with no value will now assume the value to be the key name.attr_list extension is enabled, fenced code that use brace attribute list style headers
( ```{lang #id .class attr=value}) will attach arbitrary attributes that are included in the header to the code
element.linenums) included in fenced code headers no
longer do anything. If attr_list is enabled, and the brace header is used, such options will be treated as HTML
attributes. JavaScript highlighter options should be defined in the brace header form with attr_list enabled in
order to generate appropriate, compatible HTML with the chosen JavaScript highlighter.legacy_tab_classes option has been removed.
Please use the Tabbed extension to create general purpose tabs for code blocks or other content.language_prefix which controls the prefix applied to language classes when
Pygments is not being used.code_attr_on_pre was added to the Highlight extension and controls whether
language classes, and any ids, attributes, and classes that are defined in fenced code attribute list style headers,
are attached to the code element or pre element. This has effect when using Pygments.linenums now defaults to None and accepts None, True, or False. None is
disabled by default, but can be enabled per code block. True enables line numbers globally. False disables
globally and cannot be enabled manually per code block.NEW: Emoji extension now requires custom emoji indexes to take an options and md argument. The old non-argument format is deprecated and still accepte…
hl_lines option. (#878)options and md argument. The old
non-argument format is deprecated and still accepted, but support for indexes with no arguments will be removed at a
future time.#!tex $$..$$ and #!tex begin{}...end{} patterns properly don't match if the tail markers are escaped.SuperFences has deprecated highlight_code. This option now does nothing and will be removed in some future release. If this option was used, you will…
A new extension called Tabbed has been added. With the arrival of this general purpose tabbed content extension, it has made the old SuperFences tabbed content feature redundant. By default, SuperFences will now change the classes it uses for it's tabbed feature to match those of the new Tabbed extension. CSS should be updated accordingly.
The classes that have changed are superfences-tabs and superfences-content, which have changed to tabbed-set and
tabbed-content respectively. Example CSS is updated in SuperFences for
reference.
To help with the transition though, you can quickly switch back to the old style classes by simply enabling the
SuperFences' global option legacy_tab_classes:
extension_configs = {
"pymdownx.superfences": {
"legacy_tab_classes": True
}
}
To learn more about migrating to the Tabbed extension, checkout the Tabbed documentation.
SuperFences' tab content feature will be removed in 8.0. There is no formal date for when this will occur, but it is
recommended to begin migrating as soon as possible, but legacy_tab_classes can be used as a stop gap for the short
term.
SuperFences has deprecated highlight_code. This option now does nothing and will be removed in some future release.
If this option was used, you will have to use custom fences to
implement this behavior with your own custom formatter.
Additional classes and IDs can now be injected into fenced code blocks with the format ```{.lang .more-class}.
The attribute list feature also impacts the custom formatter. While the default formatters will still inject classes and
IDs to the top level element to preserve backwards compatibility, the formatter now must accept the new keyword
parameters classes and id_value. If you have a custom formatter that does not adhere to this new requirement, you
will see a user warning.
The new format is:
def custom_formatter(source, language, css_class, options, md, classes=None, id_value='', **kwargs):
return string
While it is recommended for a user to update their custom formatters to receive the new parameters, at the very
least, users should add **kwargs to future proof their formatters.
SuperFences and InlineHilite no longer sync settings from CodeHilite. To configure either of the extensions, Pymdown Extension's Highlight extension must be used. CodeHilite can be run along side Highlight if desired, but CodeHilite cannot be used to augment SuperFences or InlineHilite's behavior.
Previously alt, left-alt, and right-alt had aliases menu, left-menu, right-menu, lmenu, and rmenu. These
aliases have been removed. menu will now be an alias for context-menu.
It is known that Alt has been referred to as Menu in the real world, but so is the actual Menu/Apps key. This will hopefully create less confusion in the long term, even if there is a little in the short term.
Please see Migration Notes for details on upgrading to 7.0.
social_url_shortener and shortener_user_exclude were added.``` {.lang .additional_class, linenums="1"}) allows
adding additional classes. IDs can be added as well, though Pygments generated code blocks do not have a mechanism
to actually insert IDs. The first provided class will always be treated as the language class.classes and id_value to
allow injecting classes and IDs via the now supported attribute list format. If a code block defines no additional
IDs and classes, the old form will be used. Formatters should include **kwargs at the end to future proof them
from future changes.highight_code option. As SuperFences syntax has language classes built right
in, disabling the highlight_code option makes little sense. While highlight_code is still accepted, it currently
does nothing and will be removed at some future time.*, it will override the
default fence logic.supferfences-tabs and superfences-content to
tabbed-set and tabbed-content respectively. Old style classes can be enabled with the legacy_tab_classes
option in SuperFences. This new option will be retired with SuperFences tabbed content feature in 8.0.super, left-super, and right-super key codes as an alternative to meta. Aliases lsuper and
rsuper were also added.alt-graph key code with altgr alias.lwindows and rwindows for consistency.left-meta and right-meta for consistency with other modifiers. Aliases lmeta and rmeta
were also added.left-option, right-option, left-command, right-command, left-meta, and right-meta codes for
consistency across similar modifier keys. Additional aliases were added as well: loption, roption, lopt,
ropt, left-opt, right-opt, lcommand, rcommand, lcmd, rcmd, left-cmd, right-cmd, lmeta, and
rmeta.alt no longer uses menu, lmenu, and rmenu as key aliases. context-menu now uses the alias menu.
context-menu will display with Menu now.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
NEW: pymdownx.extrarawhtml is now deprecated in favor of Python Markdown's md_in_html extension found in the 3.2 release.
pymdownx.extrarawhtml is now deprecated in favor of Python Markdown's md_in_html extension found in the
3.2 release.pre elements will also be wrapped in code blocks:
#!html <pre><code></code></pre>. legacy_no_wrap_code option has been provided as a temporary way to get the old
behavior during the transition period, the option will be removed in the future.version and version_info.FIX: Fix issue in PathConverter where Windows path conversion from relative to absolute doesn't always work in all browsers.
NEW: Upgrade Twemoji to use 12.1.3.
to_awesome generator for EmojiOne.The old format, while available, is now deprecated.
version and version_info are now accessible via the more standard form __version__ and
_version_info__. The old format, while available, is now deprecated.# would trigger MagicLink's shorthand for issues.**Strong*em,strong***.While there are a number of new features and bug fixes, the only backwards incompatible changes are with SuperFences' custom fences. In an effort to m…
While there are a number of new features and bug fixes, the only backwards incompatible changes are with SuperFences'
custom fences. In an effort to make custom fences more useful, we wanted to be able to pass the Markdown object to the
formatters. This gives custom formats access to things like metadata if required.
The format of custom fence formatters already had two different versions: ones without custom options and one with
custom options. As adding yet another parameter would cause more complexity behind the scenes, we decided to introduce
the breaking change of creating a unified format for formatters with custom options and without. In addition to unifying
the format, we also now pass the Markdown object to the formatters as an additional parameter.
While we were breaking custom formats, it seemed like a good time to go ahead and change the defaults for the
custom_fences options. Most people who are using SuperFences aren't even using the default, niche flow and
sequence custom fences. Instead of hijacking fence names that most people aren't even using, it seemed more
appropriate to define no custom fences.
Below are instructions on how to upgrade if you were relying on the either the default settings of custom_fences or if
you had written your own custom fence formatters.
If you've written your own custom fence formatters, the number of parameters needed has changed, so you must update your existing formatters. The needed parameters are the same regardless of whether you are using an options validator or not.
def custom_formatter(source, language, css_class, options, md):
return string
flow and sequence are no longer defined by default. If you were relying on the default custom fences, you will
have to define them manually now. The needed settings are found below:
extension_configs = {
"pymdownx.superfences": {
"custom_fences": [
{
'name': 'flow',
'class': 'uml-flowchart',
'format': pymdownx.superfences.fence_code_format
},
{
'name': 'sequence',
'class': 'uml-sequence-diagram',
'format': pymdownx.superfences.fence_code_format
}
]
}
}
If you are attempting to configure these options in a YAML based configuration (like in [MkDocs][mkdocs]), please see the FAQ to see how to specify function references in YAML.
Please see Migration Notes for details on upgrading to 6.0.0.
flow and sequence as default custom fences. Users will need to configure
them themselves.NEW: Remove deprecated Github and PlainHTML extension. Remove deprecated Arithmatex option insert_as_script and deprecated MagicLink option base_repo_…
linenums_special option to Highlight extension. Can be overridden per fence in SuperFences.
(!360)linenums_style option to set line number output to Pygments table or inline format. Also provide
a custom pymdownx-inline format for more sane inline output in regards to copy and paste. See Highlight
documentation for more info. (!360)insert_as_script
and deprecated MagicLink option base_repo_url.step
values. (!360)NEW: Add option to fail if specified snippet isn't found.
preserve_tabs option in SuperFences. (#328)NEW: Allow Arithmatex's "smart dollar" logic to be turned off via setting the option smart_dollar to False.
smart_dollar to False.
(#297)FIX: Failure with code highlight when guessing is enabled, but a bad language name is provided.
FIX: Update Twemoji to 2.6.0 and EmojiOne 3.1.3.
NEW: SuperFences now adds experimental support for preserving tabs in fenced code blocks.
FIX: Issues with task lists that span multiple lines.
FIX: Output issue when no user and/or repository is specified.
FIX: Remove internal references to deprecated options.
NEW: Set progress bar class level increments via progress_increment instead of using the hard coded value of 20.
progress_increment instead of using the hard coded value of
20.NEW: Bring back generic output for Arithmatex. Now under the generic option.
generic option. (#185)insert_as_script, tex_inline_wrap, and tex_block_wrap have all been deprecated as they are now entirely unnecessary. A new option has been added calle…
MathJax_Preview that gets auto hidden when the math is rendered.
insert_as_script, tex_inline_wrap, and tex_block_wrap have all been deprecated as they are now entirely
unnecessary. A new option has been added called preview that controls whether the script output generates a
preview or not when the rendered math output is loading. Users no longer need to configure tex2jax.js in there
MathJax configuration anymore. (#171)strip_attributes is now a list instead of a string with a
default of []. pymdownx.plainhtml is still available with the old convention for backwards compatibility, but
will be removed for version 5.0. (!176)FIX: If an invalid provider is given, default to github. If no user or repo is specified, do not convert links that depend on those default values.
github. If no user or repo is specified, do not convert
links that depend on those default values. (#169)NEW: Deprecate GitHub extension. It is now recommended to just include the extensions you want to create a GitHub feel instead of relying on a an exte…
NEW: Add social media mentions -- Twitter only right now.
NEW: Shorthand format for referencing non-default provider commits, issues, pulls, and mentions. (!147)
@user/repo. (!149)NEW: Deprecate base_repo_url in MagicLink in favor of the new provider, user, and repo. (!139)
base_repo_url in MagicLink in favor of the new provider, user, and repo. (!139)NEW: Details can now have multiple classes defined.
NEW: Remove deprecated legacy emoji generator format.
use_codehilite_settings.spoilers extension redirect.NEW: Add new slugs to preserve case. (!103)
NFKD, use NFC instead. (#98)STX and ETX;
they will just pass through. (#95)NEW: Renamed Spoilers to Details
spoilers class to details tags.NEW: Added support for pull request link shortening in MagicLink. (!88)
FIX: Cannot set Highlight's CSS class.
NEW: Add support for Twemoji 2.3.5.
category which is also no included in all indexes.NEW: Highlight extension now runs normal indented code blocks through highlighter.
linenums class was attached to code blocks even if linenums was disabled and
not enabled via fence headers.NEW: Remove deprecated no_nl2br in GitHub extension.
flow and sequence fence are now just custom fences and can be disabled
simply by overwriting the custom_fences setting.no_nl2br in GitHub extension. (#24)nested option in SuperFences. (#24)use_codehilite_settings in SuperFences and InlineHilite and now does nothing. The settings
will be removed in the future. If pymdownx.highlight is used, it's settings will be used instead of CodeHilite.
Eventually, the both SuperFences and InlineHilite will require pymdownx.highlight to be used and will have
CodeHilite support stripped.NEW: Deprecate the nesting option in SuperFences. Nesting is default and the only acceptable behavior moving forward. The ability to turn off nesting…
NEW: MagicLink special repository link shortener for GitHub, GitLab, and Bitbucket.
~, * etc. which are commonly used.etree element so that the attr_list extension and function properly
with it. (#48)NEW: Arithmatex now supports \(...\), \[...\], and \begin{}...\end{}.
\(...\), \[...\], and \begin{}...\end{}.c# and .net etc.FIX: Don't install tools or tests folder when installing from Pypi.
NEW: EscapeAll has the option to perform more like Pandoc in that you can enable escaped newlines to be hardbreaks, and escaped spaces to be nbsp.
hardbreaks, and escaped spaces to be nbsp.NEW: New Snippets extension for including external files into a Markdown file.
$ within math region.mark, caret, and tilde extension weren't quite modeling betterem inline
behavior.NEW: HeaderAnchor extension is now deprecated. It will be removed in a future version.
pymdownx.github extension.pymdownx.slug in preparation of HeaderAnchor removal.NEW: GitHubEmoji is deprecated. Please use the Emoji extension instead.
github extension now turns off nl2br by default in order properly emulate recent changes in GFM.
no_nl2br option is deprecated and will be removed in the future as it no longer reflects GFM behavior.Your coding agent can read these notes before it upgrades. Set up the MCP server →