NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #3043 most downloaded on Packagist
Multi-purpose text formatting and markup library. Plugins offer support for BBCodes, Markdown, emoticons, HTML, embedding third-party media (YouTube, etc...), enhanced typography and more.
Last release 10 months ago
14 Nov 2025
Release timing varies
gaps range from 2 weeks to 9 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
137 releases · first in 2015
2c7c4d072 MediaEmbed: fix YouTube
85d45dcb8 MediaEmbed: updated YouTube
One column per quarter.
7aef5f425 Fix deprecation warnings on PHP 8.5
99e57d380 MediaEmbed: added ConfigurableHostInterface8346e81d3 MediaEmbed: added Crankers9e4296987 MediaEmbed: added PeerTubef87358afa MediaEmbed: added missing source filef6bdc27a5 MediaEmbed: removed Livestream (defunct)479af5fd2 MediaEmbed: fixed PeerTube helperb20fb7bcb Disable network tests by default7aef5f425 Fix deprecation warnings on PHP 8.55de379d6d Fix more deprecation warnings on PHP 8.5e0aea781e MediaEmbed: updated Imgurce6eaaa14 MediaEmbed: updated On3303959a41 MediaEmbed: updated Pastebincb1368cf2 MediaEmbed: updated Rumble05febbbe9 MediaEmbed: updated Threads5a32f548c RegexpConvertor: updated Unicode propertiesffa2386ed Remove unsupported PHP 8.1 from CIc22e88f0b Updated docs0ad200815 MediaEmbed: added AbstractConfigurableHostHelper::getHosts()
0ad200815 MediaEmbed: added AbstractConfigurableHostHelper::getHosts()922ca9e50 MediaEmbed: added Blueskyc126dec98 MediaEmbed: added Nacho Videofcd2c8af5 MediaEmbed: added Omny5eabf320b MediaEmbed updated SoundCloudac657d73b MediaEmbed: updated Apple Podcastsc30ea7129 MediaEmbed: updated Bandcampacb7c7f77 MediaEmbed: updated Bluesky22c5386c5 MediaEmbed: updated Facebook15d62a2dc MediaEmbed: updated Facebookbc9958e65 MediaEmbed: updated Facebook309108d80 MediaEmbed: updated Instagram9e72cf786 MediaEmbed: updated Instagram425d20910 MediaEmbed: updated VK4a1e208b3 MediaEmbed: updated VK4d84cce94 MediaEmbed: updated VK9288d086f RegexpConvertor: updated Unicode propertiese4c43adb7 Updated hljs-loaderfd428797b refactor: Remove redundant use statement⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
613f6361c MediaEmbed: added SiteHelpers API8cf698f84 MediaEmbed: updated Spreaker9ac3f008c Updated AbstractNormalizationa96383c6e Updated GitHub actiona025c6e11 Updated dependenciesc06092c26 Upgraded GitHub actionsThe following classes have moved namespace and are (silently) deprecated:
s9e\TextFormatter\Plugins\MediaEmbed\Configurator\AbstractConfigurableHostHelper
s9e\TextFormatter\Plugins\MediaEmbed\Configurator\MastodonHelper
s9e\TextFormatter\Plugins\MediaEmbed\Configurator\XenForoHelper
The preferred way to access helpers is through the plugin's configurator. For example:
$configurator->MediaEmbed->getSiteHelper('mastodon')
$configurator->MediaEmbed->getSiteHelper('xenforo')
3001de226 MediaEmbed: updated Giphy
3001de226 MediaEmbed: updated Giphy7b7c14b61 MediaEmbed: updated Instagram3a31a34c1 MediaEmbed: updated JSFiddle34912a84e MediaEmbed: updated Medium4fd5739d6 MediaEmbed: updated VKeafb249cc MediaEmbed: updated dark theme selector in Telegram and Twitter487e3c48b MediaEmbed: added On3 DB
487e3c48b MediaEmbed: added On3 DB8d91c8b3f MediaEmbed: removed BleacherReportbf99a935d MediaEmbed: updated 247Sports05b9223e2 MediaEmbed: updated WSJac0b75ee0 MediaEmbed: updated example URLs742e3da89 Return the response body when a HTTP error occurs during scrapingce28c14bd FilterSyntaxMatcher: fixed parseFilterArg() signature
ce28c14bd FilterSyntaxMatcher: fixed parseFilterArg() signature134bffb2b Extended optimizations related to equality tests to inequality testsf8c5a455f Replaced array callbacks with first class callables where applicablec7609e321 Updated docse43f99a47 Use in_array() in strict mode wherever applicable54546445f Added deprecation warning to docs
c9f762aad Added JavaScript support for str_replace() as an attribute filter54546445f Added deprecation warning to docsa3aa58984 AttributeFilterChain: added support for constructor arguments in default filters5a937310a AttributeFilterCollection: added support for arguments passed to default filters84ee03aad FilterSyntaxMatcher: added support for named arguments4599040f4 MediaEmbed: added Captivateddadd0525 MediaEmbed: added XenForo56da3f431 Fixed links in docs9dc8b1a69 Fixed nullable types for PHP 8.4894615027 MediaEmbed: updated Imgur7372cd01f MediaEmbed: updated Kalturafb4b6d957 MediaEmbed: updated Mastodon0941fde59 Updated copyright notice99dffbce7 Updated dependencies⚠️ If you generate your own bundles, be sure to regenerate them after upgrading as their signature as been updated. ⚠️
⚠️ If you generate your own bundles, be sure to regenerate them after upgrading as their signature as been updated. ⚠️
a41591323 Bundles: added type declarationsb1d809a0c MediaEmbed: removed Amazonf9ff2282d MediaEmbed: removed Streamjad9d50711d AbstractChooseOptimization: optimized isEqualNode() for the common casee4eb30c89 AbstractChooseOptimization: replaced isEqualNode() implementationf97349402 MediaEmbed: updated Bandcamp7c95e9d51 MediaEmbed: updated Threadse1ec00821 AbstractNormalization: added workaround for weird DOM quirks
e1ec00821 AbstractNormalization: added workaround for weird DOM quirks07f2468de MediaEmbed: added Twitter oEmbed endpointe595860bb DisallowUnsupportedXSL: fixed the range of allowed characters in dynamic attributes25714e6dc Bumped the requirements for s9e/sweetdom14d759679 OptimizeChoose: minor code simplification31ae9abd5 OptimizeChoose: reorganized codefc9795083 OptimizeChooseText: remove empty text nodes during optimizationd8e08b723 UninlineAttributes: refactored how xsl:attribute elements are created195118a53 Updated dependencies44b040c98 Added GitHub workflow
44b040c98 Added GitHub workflowf0fbc6f84 TemplateNormalizations: added OptimizeChooseAttributes pass3da387000 TemplateNormalizations: added support for SweetDOMbb1a1d2ac MediaEmbed: removed NBC Sportsbc785a197 MediaEmbed: removed Stitcherd5b261549 MediaEmbed: fixed TikTok oEmbed endpoint4e54aa38d ElementInspector: updated to the latest HTML specs3601bb871 Emoji: updated to Unicode 15.18e6a8b119 MediaEmbed: updated IMDbf788f1d86 MediaEmbed: updated Podbean7574739cb MediaEmbed: updated Spreaker6c327465b ParsedDOM: simplified some DOM manipulationsb6fb13a79 RecursiveParser: use unnamed captures for arguments04f5bc417 RegexpConvertor: updated Unicode propertiesc2c6c69dc TemplateNormalizations: simplified code through argument unpackingfddea0221 Updated dependencies20e789066 XPathConvertor: optimize away superfluous string() callscd53829c3 BBCodes: updated default CODE
cd53829c3 BBCodes: updated default CODEc5891a573 MediaEmbed: updated Facebookee1965642 MediaEmbed: updated Facebookb429c7b60 MediaEmbed: updated Facebook593490f42 MediaEmbed: updated Facebook135de3549 MediaEmbed: updated Twitter334e96d72 MediaEmbed: updated Twitter6fb87d797 MediaEmbed: updated YouTube55cae0cdf Updated README440d40901 Enable PHP8 functions in bundled renderers
440d40901 Enable PHP8 functions in bundled renderers8188d7ace MediaEmbed: updated Reddit528665cc3 RulesGeneratorList: updated remove()f33cdf622 Updated RTD config38e323231 MediaEmbed: added Threads
38e323231 MediaEmbed: added Threadsd1887fad1 MediaEmbed: added support for YouTube clipsd34f9d3c1 MediaEmbed: removed defunct site Gfycata35d090d2 MediaEmbed: updated Facebook473cb5958 MediaEmbed: updated Facebookb06918f8f MediaEmbed: updated Instagram9cd4fc514 MediaEmbed: updated Spotifyae32e676d MediaEmbed: updated Spotifycbf872bb7 MediaEmbed: updated TrendingViews6653f07f7 MediaEmbed: updated Twitter1817f1b79 MediaEmbed: updated YouTube2d73167e4 Reorganized TemplateNormations66fcff366 Updated README5b58f4485 Added ParsedDOM API to safely manipulate XML
5b58f4485 Added ParsedDOM API to safely manipulate XML052cde47b BBCodes: updated hljs-loadere824143f7 MediaEmbed: updated SlideShare84be6040c MediaEmbed: updated SlideShare31553ea9a MediaEmbed: updated Telegram422f66269 MediaEmbed: updated TikTok0b2abb6e3 MediaEmbed: updated Tumblrab81d37a8 MediaEmbed: updated YouTubef84dbded0 MediaEmbed: added Bunny Stream
f84dbded0 MediaEmbed: added Bunny Stream922025f00 MediaEmbed: added support for YouTube Live URLs8b473fee9 Improved PHP 8.2 support285322ab8 MediaEmbed: updated Tumblrd1441d7ae MediaEmbed: updated Tumblr961b39811 Parser: remove U+FFFE and U+FFFF from input and output889296b3b Updated PHPUnit to 9.6536cbdf1f Autoimage: added support for custom file extensions
536cbdf1f Autoimage: added support for custom file extensionseb8a5c487 Autovideo: added support for custom file extensionsd4750cdbb MediaEmbed: added MastodonHelper9ad74ecac MediaEmbed: added support for custom Mastodon instances7f7481ab9 MediaEmbed: updated Mastodonba76ce0b0 MediaEmbed: updated Rutube9724b7906 MediaEmbed: updated TikTokc0ce8f099 ElementInspector: updated HTML specs
c0ce8f099 ElementInspector: updated HTML specs41b342149 Emoji: replaced the default assets URLece847b93 MediaEmbed: added Mastodon
ece847b93 MediaEmbed: added Mastodonaf7a4ddcb BBCodes: updated default CODE0989028dc Emoji: updated to Unicode 15.0bb5aadcbb Litedown: updated inline spoilers' onclick handler62d23f557 MediaEmbed: updated Spotifyce3edbd40 MediaEmbed: updated Tumblr4460ef815 MediaEmbed: added Rumble oEmbed endpoint
4460ef815 MediaEmbed: added Rumble oEmbed endpoint02eefa9cf MediaEmbed: added Rutube oEmbed endpointd3d27b7bd MediaEmbed: removed bad header from Rutube3b117c891 MediaEmbed: updated Facebook8b3919d87 MediaEmbed: updated Facebook9fb6cd493 MediaEmbed: updated Facebookf0879ef04 MediaEmbed: updated dynamic iframes71e5bbe78 Added CSP headers to live preview demos
71e5bbe78 Added CSP headers to live preview demos6ceca4fff Added doc5ce43ed08 JavaScript: added messaging-related externs440817eb0 JavaScript: removed support for Internet Explorer20a3c1333 BBCodes: updated default SPOILER87223f85e Bumped requirements to PHP >= 7.4266f84b50 FunctionCache: don't add a semicolon if there's aleady one followed by whitespacebabb3f094 JavaScript: hash function content as key in function cacheac7984af4 JavaScript: made the XSLT generator publicc4f347bc2 JavaScript: moved function cache generator to its own classdd4553f4f JavaScript: unescape braces before generating the function cache key6404747b1 JavaScript: updated externsff36ac05d JavaScript: updated externs47cba5e05 JavaScript: use ES6 syntax for variable declarations8f58dcb9f JavaScript: use arrow functions where appropriatecf678e15b MediaEmbed: replaced var with let in onload handlersa9ac9d364 MediaEmbed: updated Odyseeb4f8a86df MediaEmbed: updated TikTokc3e1c382b Updated live preview demod55692342 Updated live preview demose3245de01 BBCodes: removed redundant higlighting in CODE
e3245de01 BBCodes: removed redundant higlighting in CODEc87eb3f35 BBCodes: fixed Closure Compiler warning in CODE02f0d41f2 BBCodes: updated hljs-loader in CODEcdd9d190e ElementInspector: updated to latest specsdf8440c2b JavaScript: prefill the function cache with static code87a284e38 MediaEmbed: added Wavekit
87a284e38 MediaEmbed: added Wavekite0dcd772b BBCodes: updated default CODE4919d8bd3 MediaEmbed: updated MixCloudb23054412 Updated dependencies69de62652 Updated docse0fab7776 MediaEmbed: added support for private playlists in SoundCloud
c34737eb5 Allow trailing plus sign in Autolink
ba4b7a84b Fixed whitespacec34737eb5 Allow trailing plus sign in Autolink6d4c3e097 Updated MkDocs7cd2a60be MediaEmbed: added Gfycat oEmbed data
7cd2a60be MediaEmbed: added Gfycat oEmbed data16d598964 MediaEmbed: added support for dark theme in Instagram66afa69e6 MediaEmbed: added support for dark theme in Reddit6fca64d7e MediaEmbed: added support for dark theme in Telegram5e294db63 MediaEmbed: removed Vocaroo's old Flash playerc199a448a Fixed callable type annotations840acf54c ElementInspector: updated element definitions0f6b6372a MediaEmbed: updated Acast2822347ca MediaEmbed: updated Getty6b6fc560c MediaEmbed: updated Odyseee0d2ecbb2 MediaEmbed: updated Rumble683a50394 MediaEmbed: updated Spotify example URLe3c00295b MediaEmbed: updated Streamable17904dd79 MediaEmbed: updated TikTok2483eaf1b MediaEmbed: updated Twitter0cbd29fde MediaEmbed: updated Twitterbfd6323d0 MediaEmbed: updated Vimeo3fcab01e0 MediaEmbed: updated Vimeo53ce06e23 MediaEmbed: updated WSHH9c8a36d2d Updated external dependenciesd11508589 Use correct parameter type in setParameters docblock4f02bf465 XmlFileDefinitionCollection: allow '0' to be cast to an integerbc0d88317 XmlFileDefinitionCollection: do not convert non-string valuesbc58b94ed Added support for PHP 8.1
bc58b94ed Added support for PHP 8.1cf6fb85ce MediaEmbed: added Audius1d5e3e2a1 Emoji: updated to Unicode 14.0e8ff4904d MediaEmbed: updated Facebook7b7dcd3cb Updated BBCodes doc2bacb5d24 BBCodes: give explicitly-paired BBCodes slightly better priority
2bacb5d24 BBCodes: give explicitly-paired BBCodes slightly better priority1c00f2624 MediaEmbed: ignore Gist archive links11c766817 MediaEmbed: updated Acaste75f9f3d2 MediaEmbed: updated Gista81e56567 MediaEmbed: updated TrendingViewsf80f790b0 NormalizedCollection: ignore invalid keys in delete() and exists()6d3c5af8e MediaEmbed: added Acast
6d3c5af8e MediaEmbed: added Acast0c4e0c15c MediaEmbed: added YouMakerdcf3cbf98 RegexpConvertor: added early return for empty regexpsc88fe3653 BBCodes: updated default CODE BBCode62b4e7f4b BBCodes: updated default CODE BBCode29d5bcf16 Change code highlighting theme from github-gist to github.37fadd4e9 MediaEmbed: scrape from HTTP headers as well as body6e66120f0 MediaEmbed: updated 247Sports83629d2c4 MediaEmbed: updated Medium03c9dd73a Use HLJS 11.0.1fd0df9fe2 BBCodes: updated default CODE BBCode
fd0df9fe2 BBCodes: updated default CODE BBCode699577a02 Quick renderer: do not transform switch statements5df3c57b9 StylesheetCompressor: fixed an issue with UTF-8 chars incorrectly split
5df3c57b9 StylesheetCompressor: fixed an issue with UTF-8 chars incorrectly split2091db6b6 FixUnescapedCurlyBracesInHtmlAttributes: added support for arrow functions
2091db6b6 FixUnescapedCurlyBracesInHtmlAttributes: added support for arrow functions129691ddd MediaEmbed: added Odyseece1817bf0 MediaEmbed: removed defunct sites Break, GameTrailers, and Mixer16a01b3df ElementInspector: updated definitions from HTML specs70e05f3c3 JavaScript: replaced substr() with substring()632452c0a MediaEmbed: updated Odyseefa6ce8f1a MediaEmbed: updated YouTubeb680fbcd0 Replaced ternaries with null coalescing operatorse51239b7e UrlFilter: updated regexp and JavaScript version4256d1f08 MediaEmbed: added Apple Podcasts
4256d1f08 MediaEmbed: added Apple Podcastsbeb0082bc XPathConvertor: added support for PHP 8.0 string functionsf801b61f2 MediaEmbed: updated IMDb44f22bfc8 MediaEmbed: updated Wistiabd16776c5 Updated bundlesf1fe19a42 XPathConvertor: made the optional PHP features togglable26ac52914 XSLT: explicitly set htmlspecialchars() escape mode4b83f7c67 BBCodes: updated default CODE BBCode
4b83f7c67 BBCodes: updated default CODE BBCodec7b72ac82 MediaEmbed: updated Podbeaned19f57c0 MediaEmbed: updated SoundCloud6a233cf46 MediaEmbed: updated TikTok739cd5f10 MediaEmbed: updated WorldStarHipHop33168acaa MediaEmbed: added AMP metadata
33168acaa MediaEmbed: added AMP metadatab52de21fd EnforceContentModels: generate breakParagraph rules where applicable813be2c3d MediaEmbed: updated Megaphone126771444 MediaEmbed: updated Sportsnet03edc53a0 MediaEmbed: added support for fb.watch URLs
03edc53a0 MediaEmbed: added support for fb.watch URLsf3a88bece Litedown: fixed an issue with fenced code blocks inside of lists19699dc2f Emoji: ignore aliases that are followed by U+FE0E36e505ced MediaEmbed: updated BBC Newse838f3779 MediaEmbed: updated Rutube9f08233e6 MediaEmbed: updated Twitch03af8d8e2 Parser: simplified outputTag()a11f4c232 TaskLists: recheck tags at the end of configuration4d0b7595f Emoji: fixed a PHP error that can occur with empty aliases
4d0b7595f Emoji: fixed a PHP error that can occur with empty aliases327f06a6a Emoji: fixed an issue with some Unicode aliasescf913ebbe BBCodes: updated default CODE BBCode38f158f2f MediaEmbed: updated Anchorb5d664bb3 MediaEmbed: added Imgur oEmbed info
b5d664bb3 MediaEmbed: added Imgur oEmbed infoc21685645 MediaEmbed: added Instagram Reels06d5e490f PHP renderer generator: added a fast path for handling static node namesf357b2e64 TemplateParser: removed unused parameters0dd855c9e MediaEmbed: updated Streamable23ee8a5d5 MediaEmbed: updated Wistiaf14bd4eca TemplateParser: mark boolean attributes in the representation6909b2327 TemplateHelper: fixed handling of HTML special characters in highlightNode()
6909b2327 TemplateHelper: fixed handling of HTML special characters in highlightNode()0a661c962 AttributeFilters: refactored HashmapFilter and MapFilterc8ae84391 BBCodes: updated default CODE BBCode816182d45 MediaEmbed: updated BitChute16d018d6e MediaEmbed: updated TikTok704b16b4f RegexpFilter: reworked safeness checksbb8c095e6 FilterSyntaxMatcher: added explicit octal notation
bb8c095e6 FilterSyntaxMatcher: added explicit octal notationea51b491d MediaEmbed: added Falstad Circuit Simulator159784fb2 MediaEmbed: added JSFiddle7baf9538c MediaEmbed: added Rumble935957bb4 MediaEmbed: added support for dark themesc7548f5e1 MediaEmbed: removed discontinued FOX Sports site0edf2e91b MediaEmbed: updated JSFiddle6b99842fe MediaEmbed: updated Libsyn16a1e596a MediaEmbed: updated Twitterdf91465b8 Updated bundles2b9267496 BBCodes: updated default CODE BBCode
2b9267496 BBCodes: updated default CODE BBCodea583e346c MediaEmbed: updated 247Sports0b138efc4 MediaEmbed: updated Amazon923310847 MediaEmbed: updated BBC News338e48986 MediaEmbed: updated Spotify30b0a11c8 MediaEmbed: updated Stitcher47c929c02 MediaEmbed: updated dumpertc49e5a430 BBCodes: updated default CODE BBCode
c49e5a430 BBCodes: updated default CODE BBCode480398516 BBCodes: updated default CODE BBCodec88642cdc Emoji: updated to Unicode 13.15a6c80ea0 MediaEmbed: updated Getty Images14923f953 MediaEmbed: updated Gfycat693b57ae9 MediaEmbed: updated Mediume62774c4e MediaEmbed: added Clyp
e62774c4e MediaEmbed: added Clyp79c359ed8 MediaEmbed: added Mixcloud oEmbed data039a08e49 BBCodes: updated default CODE BBCode5aa06ccda MediaEmbed: updated BBC News6ac0b25b2 MediaEmbed: updated Kaltura74ee840cd MediaEmbed: updated Spotify9f6654eb9 MediaEmbed: updated Stitcherb65d3a585 MediaEmbed: added Castos
b65d3a585 MediaEmbed: added Castosd96e5b47b MediaEmbed: added CodePenc7265bc7a MediaEmbed: added Kaltura33da8e189 MediaEmbed: added TradingView1fa8bcd3b MediaEmbed: added Vimeo oEmbed infoc81c92802 CallbackGenerator: explicitly cast callback to string715710926 MediaEmbed: updated MSNBCe9b901e96 MediaEmbed: updated Medium4fd902b91 BBCodes: updated default CODE BBCode
4fd902b91 BBCodes: updated default CODE BBCodeb2823a510 BBCodes: updated default CODE BBCodeb13470f70 MediaEmbed: updated Audiomacka5cce0a8e MediaEmbed: updated Twitch615378133 MediaEmbed: updated Twitchc34a75ea4 MediaEmbed: added Wistia
c34a75ea4 MediaEmbed: added Wistia7f2a0a843 BBCodes: updated default CODE BBCode388e4fbfc JavaScript: updated externs4d2792bc4 MediaEmbed: reinstated unofficial support for hashless VK URLsca83829e5 RegexpConvertor: reorganized codeb141e1098 RegexpConvertor: updated Unicode propertiesc5c2d2cbf TaskList: replaced template manipulation with SweetDOMea4658c5b Added template manipulation via SweetDOM
ea4658c5b Added template manipulation via SweetDOMdc61d807c Litedown: added support for self-generated "id" attributes in headersf9eb0e264 Autolink: removed dead code2e127910c PHP Renderer: removed redundant removal of meta-elementscc0c621c2 Litedown: improved compatibility with original Markdown rules for parentheses in links62942bbc2 Added AddAttributeValueToElements and SetAttributeOnElements template normalizers
62942bbc2 Added AddAttributeValueToElements and SetAttributeOnElements template normalizersd4d0b66ec MediaEmbed: added GIPHYef7a64e6b MediaEmbed: added loading="lazy" attribute to iframesf136125c1 MediaEmbed: added support for GIPHY videosa79accfd0 Emoji: updated Twemoji URLea42a6e90 Emoji: updated to Unicode 13.03f51c0852 MediaEmbed: updated Facebook782bbadbb Renderers: ensure that floating point numbers are displayed in the C localea1d089576 SetRelNoreferrerOnTargetedLinks: refactored to extend AddAttributeValueToElementse08158d2f TaskLists: ignore task IDs during live preview1b5d46223 XSLT: ensure that the decimal separator is a dot regardless of locale⚠️ This release contains functional changes. See [docs/Internals/Changes.md](https://s9etextformatter.readthedocs.io/Internals/Changes/#250) for a des
⚠️ This release contains functional changes. See docs/Internals/Changes.md for a description. ⚠️
f2d1ff160 Added TaskLists pluginc12c0db9c Fatdown: added TaskLists96912cdeb Litedown: added support for automatic links885f7e234 Renderer: improved performance of safety check436c2d8d9 Utils: improved the performance of various functionsThe Litedown plugin now supports automatic links and creates an EMAIL tag.
5c358aa8f DisallowUnsupportedXSL: added xsl:attribute and xsl:element checks
5c358aa8f DisallowUnsupportedXSL: added xsl:attribute and xsl:element checksaf2944f19 DisallowUnsupportedXSL: refactored attribute requirements7e3c1a8c0 MediaEmbed: updated Facebook7290f8b4e PHP renderer: match libxslt serialization of minimizable attributes in HTML7414ca9d5 Quick renderer: replaced hardcoded value with constant6d9dcd09c TemplateChecks: added DisallowUncompilableXSL
6d9dcd09c TemplateChecks: added DisallowUncompilableXSL039015605 TemplateChecks: added DisallowUnsupportedXSL, enabled by defaulta5ddda129 DisallowUnsafeDynamicURL: improved detection of safe URLs27dbc900b MediaEmbed: updated Spotify12bdf56b7 JavaScript: fixed scripts not being executed on Blink browsers
12bdf56b7 JavaScript: fixed scripts not being executed on Blink browsers544f430f9 BBCodes: updated default CODE BBCode61d3dcf2a BBCodes: updated default CODE BBCode194bc5388 BBCodes: updated default CODE BBCode98fa77467 JavaScript: updated externs3eae3fbe1 MediaEmbed: updated definitions
9db9113e6 Autolink: added support for trailing underscores
9db9113e6 Autolink: added support for trailing underscores4de32bb77 JavaScript: added minifier hints for plugin regexpc7d1b9e72 Autolink: fixed an issue where valid characters could be removed from the end of a URL3b08570a2 TemplateNormalizer: fixed an issue where the XSL namespace could become unregistered in XPath3d1969853 MediaEmbed: updated MSNBC and Tumblrc1e06bc87 MediaEmbed: updated TikTok9bf0d3823 MediaEmbed: updated XboxClips, now GameClips.io19674d155 XPathConvertor: do not add extraneous calls to boolean() in conditionsb79f84836 MediaEmbed: removed defunct site CollegeHumor
b79f84836 MediaEmbed: removed defunct site CollegeHumor0af04297e BBCodes: updated default CODE BBCode385992df9 MediaEmbed: updated Vocaroo138821eac Tag: reorganized codead91b2d37 XPathHelper: improved minification of boolean operators6943368f2 XPathHelper: improved minification of consecutive non-word characters55782b27a XPathHelper: remove redundant parentheses in minify()26004e063 XPathHelper: replaced string encoder in minify()00510a5b6 XPathHelper: simplified and improved minification of operatorsf6c496721 Autolink: added support for rootless URLs
f6c496721 Autolink: added support for rootless URLs0f7166909 FilterSyntaxMatcher: added support for numeric literal separatord519bad01 HTMLEntities: added support for HTML5 entities076524e87 MediaEmbed: added support for Spotify podcasts1bd195933 TemplateLoader: added support for HTML 5 entities in HTML templatesba20ec844 TemplateLoader: added support for HTML 5 entities in XSLT templates3fe1f6482 BBCodes: updated default CODE BBCodeb3cea0820 FilterSyntaxMatcher: improved support for escaped characters94071e2fe TemplateLoader: improved handling of HTML5's AMP entity33d90df58 XPathHelper: rewritten string encoderabc127c7d MediaEmbed: added Spreaker
abc127c7d MediaEmbed: added Spreaker0aaff6af6 XPathConvertor: added support for booleans in math expressions0d8acace1 MediaEmbed: removed defunct site Plays.tv84f8f35fd Parser: fixed trimFirstLine rule ignored on paired tags0764f9e3c XPathConvertor: do not backtrack on attribute names07df31fbe XPathHelper: improved minification of substractionsb19a9207e XPathHelper: use the XPathConvertor parser for complex expressions7dde9892c Added support for custom header in generated PHP files
7dde9892c Added support for custom header in generated PHP files727da332c Bundle: added getParser() and getRenderer() definitions to base classe707f6f28 BundleGenerator: added support for bundling the JavaScript source5c576086a MediaEmbed: added Anchor2ec9591ce MediaEmbed: added Megaphone729fbb540 MediaEmbed: updated CNBCa669a53d4 Parser: simplified the computation of allowed tags in new contexte4030cf6a StylesheetCompressor: split into smaller chunks to appease Google Closure Compiler30654b4f5 Updated JavaScript Logger⚠️ This release contains API changes. See [docs/Internals/API_changes.md](https://s9etextformatter.readthedocs.io/Internals/API_changes/#220) for a de
⚠️ This release contains API changes. See docs/Internals/API_changes.md for a description. ⚠️
⚠️ This release contains functional changes. See docs/Internals/Changes.md for a description. ⚠️
b52eb84f3 AbstractConstantFolding: added support for folding conditional expressionsda7387e1b FoldConstantXPathExpressions: added support for boolean expressionseeb5ec68f FoldConstantXPathExpressions: added support for simple comparisonsa2c8cc0be InlineXPathLiterals: added support for true() and false()cd6eede77 Live preview: added support for data-s9e-livepreview-hash attributee560157b9 Live preview: added support for data-s9e-livepreview-onupdate attribute/eventfd984e34e MediaEmbed: added Mixer4ef14d2c5 TemplateNormalizations: added DeoptimizeIff7dddb9a6 TemplateNormalizations: added OptimizeChooseDeadBranches179035702 XPathConvertor: added support for true() and false()414f457ed MediaEmbed: removed defunct site Tinypicabf0bea88 Ruleset: removed useless codef52add17f Fixed Google Closure Compiler warnings in live preview6d8d0e82c AbstractConstantFolding: improved performance4d08e2493 Amend document typos492288d7b BBCodes: updated [code] BBCode510176e04 BBCodes: updated [code] BBCodead030d0a6 BBCodes: updated [code] BBCode98acaa712 BBCodes: updated var descriptions in bundled BBCodese8501554b ContextSafeness: consider backticks unsafe in JavaScripte7baa21e2 ElementInspector: updated to HTML 5.38ef407006 Emoji: updated to Unicode 12.171c5b4d15 Escaper: escape tildes by default0e277e649 FoldArithmeticConstants: restricted additive identity folding507cdadd4 FoldConstantXPathExpressions: ignore irrational numbers74d308561 JavaScript: updated externsbde1c604d Live preview: improved handling of update eventba54cfa16 Live preview: renamed data-s9e-livepreview-postprocess to data-s9e-livepreview-onrender6b35b43c7 MediaEmbed: updated Audioboom912a5f52c MediaEmbed: updated CNN3e0df2054 MediaEmbed: updated Facebooke92f180d6 RecursiveParser: use a DEFINE group for group expressions99b7f0b84 RegexpConvertor: updated properties to latest Unicode specs8b2ba9100 XPath: reorganized codeed9e70daa XPathConvertor: simplified grouping of boolean operators and expressionsThe following methods are silently deprecated and will be removed in the next major release:
s9e\TextFormatter\Configurator\TemplateChecker::disable()
s9e\TextFormatter\Configurator\TemplateChecker::enable()
The data-s9e-livepreview-postprocess attribute has been renamed to data-s9e-livepreview-onrender. The old attribute name remains as an alias but will be removed in 3.0.0. See the list of live preview attributes.
The Escaper plugin now escapes ~ by default.
The backtick character ` is now considered unsafe when user input is used in a JavaScript context.
Your coding agent can read these notes before it upgrades. Set up the MCP server →