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
9ca5270 Parser: fixed an issue with fosterParent and high-priority tags
9ca5270 Parser: fixed an issue with fosterParent and high-priority tags0eeecb3 Parser: fixed an issue with fosterParent and low-priority tags11bdbe7 BlockElementsFosterFormattingElements: do not create a fosterParent rule if the template is not passthrough5bb3b77 Parser: adjusted the cost of fixing tags in fosterParent8a13fb4 RegexpBuilder: added support for non-Unicode strings
8a13fb4 RegexpBuilder: added support for non-Unicode strings7bafcde MediaEmbed: removed support for discontinued Mixcloud short links9f2b080 Litedown: fixed quote markup interpreted inside of fenced code blockse56f871 OptimizeChoose: fixed an issue with node iteration over a live tree09bc408 Http: prefer native stream to cURL if safe mode is on (PHP 5.3 only)9398ee9 MediaEmbed: updated ComedyCentral93a6a9b MediaEmbed: updated Imgur5de2c70 MediaEmbed: updated Straw Pollbbabbb9 MediaEmbed: updated Tumblr5ac0294 Updated externs files for Closure Compiler v20160208One column per quarter.
e98b8a0 Added an HTTP helper with support for cURL and native streams
e98b8a0 Added an HTTP helper with support for cURL and native streams19ecb28 Added support for customisable timeout in HTTP clients88562c2 Added support for toggling SSL peer verification in HTTP clientsc4e0a99 ClosureCompilerService: added support for configurable HTTP clientff15e3a HostedMinifier: added support for configurable HTTP client8509ded MediaEmbed: added Blab5feeae6 MediaEmbed: added support for HTTP client used for scrapinge2cae50 RemoteCache: added support for configurable HTTP client39139c3 ClosureCompilerService: reorganized code0c2b5aa Curl: reset the request body when doing POST requests48d08f6 MediaEmbed: moved all GitHub iframes to RawGitc73392e MediaEmbed: moved hosted iframes back to GitHub4e55063 MediaEmbed: updated Indiegogo6444043 Moved Http helper to the Utils namespace9973077 OnlineMinifier: automatically set timeout in getHttpClient()ab2c9f1 RemoteCache: updated for new APIb2481cd Reorganized native HTTP client's code0489bb8 Set headers unconditionally in native HTTP clientfd08fc1 Added support for MatthiasMullie\Minify
fd08fc1 Added support for MatthiasMullie\Minify8eda0fb JavaScript: added support for converting \x{....} in regexps932f6f1 Minifiers: added experimental minifiers HostedMinifier and RemoteCachee06bc52 MediaEmbed: removed Rdio2c76bb3 BBCodes: updated Highlight.js to 9.0.04be9a3f ClosureCompilerApplication: cache the binary's hash for performanceb730287 ClosureCompilerApplication: made constructor argument optional43b9f74 Minifier: use a default constant used as cache differentiator8e4706d Added support for negative offsets in NormalizedList
8e4706d Added support for negative offsets in NormalizedListfaeafd6 JavaScript: added FirstAvailable minifier1ec2d62 MediaEmbed: added Plays.tv853e63b MediaEmbed: added support for timestamps in Twitch videos4dab11f Litedown: fixed incorrect indentation in fenced code blocks8bc9340 Litedown: trim whitespace around the language name in fenced code blocks19ee41c Litedown: updated inline code syntax to bring it closer to Markdown's1f6e375 MediaEmbed: updated Pastebin299996e MediaEmbed: updated Twitch to use their new playerc40350b Censor: added JavaScript hint
c40350b Censor: added JavaScript hint650adb0 Censor: added JavaScript hint68fe6d6 Emoji: added JavaScript hint491042c Emoji: added JavaScript hint23e84ac Emoticons: added JavaScript hint7ec97e6 HTMLElements: added JavaScript hint5b5a6c4 JavaScript: added support for custom hints set by pluginsfe484da Litedown: added JavaScript hint for skipping HTML entity decoding0971ef0 Litedown: added support for decoding HTML entities in attribute values993f5cc Preg: added JavaScript hint3484b60 BBCodes: removed duplicate conditiond0b6396 BBCodes: fixed improper pairing during parsing080d7aa HTMLElements: fixed detection of empty elements58dd013 HTMLEntities: ignore control characters encoded as HTML entitiesffcdd48 MediaEmbed: replaced protocol-relative iframe URLs from GitHub to use HTTPS95b72d7 MediaEmbed: updated CNNec41c55 MediaEmbed: updated GameTrailers2209d3c Updated emoji script4ce201a utils.js: cache the element used in html_entity_decode()b6d4c3e BBCodes: added support for lists that start at an arbitrary number
b6d4c3e BBCodes: added support for lists that start at an arbitrary number72d8236 Litedown: added support for empty linksc466adf Litedown: added support for ordered lists that start at an arbitrary number54b40b8 Litedown: added support for reference links and imagesd26f829 Litedown: added support for single quoted and unquoted titles in links and images22426da Litedown: added support for unescaped brackets in link text and image alt text76c7f6a MediaEmbed: added support for country-specific Facebook links58d8541 XPathConvertor: added support for conditions with more than 3 boolean operationsd1ce37e MediaEmbed: fixed CSS overflow on iOS Safari10cfa29 XPathConvertor: fixed comparison to 0845279a Escaper: reverted to using a custom taga94a625 MediaEmbed: updated Facebook13c9015 MediaEmbed: updated Facebookc742fa7 MediaEmbed: updated Imgurd7edfed MediaEmbed: updated Imgurff60c99 MediaEmbed: updated Instagram4e138d7 MediaEmbed: updated Xbox DVR048e433 MediaEmbed: updated vidmebb56400 Parser: automatically correct the length of ignore tags0676a8d Updated Fatdown3abcb7d Bundles: added getCachedParser() and getCachedRenderer()
3abcb7d Bundles: added getCachedParser() and getCachedRenderer()5925a64 MediaEmbed: removed redundant codeb0ab098 Emoji: simplified template generationf624086 Litedown: allow lists to start immediately after a header or horizontal rulea871f19 Litedown: replaced the way block boundaries are set3c8c61d MediaEmbed: updated Comedy Centralce982d7 MediaEmbed: updated Imgurdf9e944 MediaEmbed: updated Imgur to not transform links to static imagese5c72df MediaEmbed: updated NPRcd24826 NormalizedCollection: save items in the lexical order of their keys73e14ab BBCodes: ensure that end tags added by lookahead are not duplicated
73e14ab BBCodes: ensure that end tags added by lookahead are not duplicatedfd6bd30 Emoji: added draggable="false" to Emoji One imagesd32e93d MediaEmbed: added support for private tracks in SoundCloud0dd8a61 PHP renderer generator: added support for raw outputce681ae BBCodes: updated the default CODE definition627d41c JavaScript\ConfigOptimizer: do not attempt to deduplicate simple variables7afa5f9 MediaEmbed: updated wget() to send a User-agent header31e3b26 TemplateParser: set the escape value of literal text in script elements to "raw"b6dd56b MediaEmbed: fixed malformed XSL when an attribute value contains an angle bracket but is not XSL
b6dd56b MediaEmbed: fixed malformed XSL when an attribute value contains an angle bracket but is not XSL0d4675c MediaEmbed: fixed responsive embeds alignment30ca6ac MediaEmbed: updated Medium7887f79 MediaEmbed: updated SoundCloud7abbe26 Added AVTHelper::toXSL()
7abbe26 Added AVTHelper::toXSL()5863c4c Added JavaScript\StylesheetCompressor257a413 MediaEmbed: added support for Google Drivea6f99bb MediaEmbed: added support for multiple-choice templates82f06e3 TemplateNormalizations: added OptimizeChoosebc8e764 TemplateNormalizations: added additive identity optimization to FoldArithmeticConstants9548cee TemplateNormalizations: added support for decimal values in InlineXPathLiterals0a6ff7a TemplateNormalizations: added support for multiplications, divisions and sub expressions in FoldConstants7a439ff XPathConvertor: added support for parenthesized math expressionsdc8a261 Emoji: removed unnecessary parentheses in JavaScript regexpedacfa8 MediaEmbed: removed ESPN Deportese20df9f MediaEmbed: removed enableResponsiveEmbeds() and disabledResponsiveEmbeds()4e7f087 MediaEmbed: removed the embed element from Flash templatesb1500b6 PHP renderer generator: removed constant math evaluation which was made redundant by the FoldArithmeticConstants template normalization pass9c8eaa0 MediaEmbed: fixed the MEDIA tag filter to not create a tag if it does not match a known sitea5feb09 Quick renderer: fixed a potential issue with string comparison against single quotes80f2c9a Quick renderer: fixed incorrect comparison against literals that contain a single quotee1809c3 BBCodes: updated Highlight.js in CODE BBCodec3f79fb Censor: do not escape single quotes in Helper::reparse()050b051 MediaEmbed: overhauled responsive embeds2ac29f1 MediaEmbed: reorganized filterTag()5ff9c1e MediaEmbed: reorganized template generation7ede2a7 MediaEmbed: updated Audiomack and SoundCloud1b8956f MediaEmbed: updated Google Drive493ac00 MediaEmbed: updated IMDb455723e MediaEmbed: updated Imgur4680bb5 MediaEmbed: updated Ustream5552810 Moved JavaScript callbacks deduplication to ConfigOptimizer2bc612c TemplateNormalizations: improved parentheses removal in FoldArithmeticConstants361212f TemplateNormalizations: preserve strings content in FoldArithmeticConstants679f0d3 TemplateNormalizations: renamed FoldConstants to FoldArithmeticConstants470c1da Updated docblock0765165 Utils: updated serializeAttributes() to escape quotes in a manner consistent with the parsercaf1dc2 XPathHelper: updated minify() to remove more space around the div operator38a9c89 XPathHelper: updated minify() to remove spaces after a div operatordd3fe8c Added CharacterClassBuilder helper
dd3fe8c Added CharacterClassBuilder helperc3f08fb JavaScript: use returnFalse and returnTrue callbacks as-is0f5051d MediaEmbed: simplified the regexp that matches text links51bce03 ClosureCompilerService: added read timeout with a default value of 10s
51bce03 ClosureCompilerService: added read timeout with a default value of 10s348e1de JavaScript: added returnTrue() in utils.js957ada3 ClosureCompilerApplication: updated command line options for v20150901 and turned off warningsd105dbc JavaScript: created different externs for ClosureCompilerApplication and ClosureCompilerService3cab461 MediaEmbed: moved template generation out of add()c497eb3 MediaEmbed: normalized the order of characters in regexps' character classesed7aaaf MediaEmbed: replaced the 'unresponsive' attribute in site definitions with a 'responsive' attribute95007fb MediaEmbed: simplified the generation of Flash templatesa75dd32 Refreshed bundlesd4e81cb Regexp: avoid adding non-capturing subpatterns to regexps generated by getNamedCaptures() where they are not neededcd1f119 Regexp: simplified getNamedCaptures()d363f8b MediaEmbed: fixed responsive Flash objectsf1ef4fc Parser: fixed incorrect tag removalce1d116 MediaEmbed: moved template generation to its own class
ce1d116 MediaEmbed: moved template generation to its own classbe478e7 MediaEmbed: moved the 'unresponsive' attribute into the iframe/flash definition3f5e499 MediaEmbed: removed support for custom templates15e8ece MediaEmbed: updated Vinec089b4a XPathHelper: fixed false negative in isExpressionNumeric()6c181a7 MediaEmbed: added Oddshot.tv
6c181a7 MediaEmbed: added Oddshot.tv48d03be TemplateNormalizations: added FoldConstants passde996ae Litedown: gave inline links a slightly better priority to give them precedence over BBCodes6a44f9f Litedown: fixed incorrect indentation inside fenced code blocksFull commit log
Initial release
Initial release
Your coding agent can read these notes before it upgrades. Set up the MCP server →