--- layout: default title: Upgrading from 1.6 to 2.0 (for developers) description: Developer guide to upgrading to newer versions of this library --- ## Minimum PHP Version The minimum supported PHP version was increased from 7.1 to 7.4. ## `CommonMarkConverter` and `GithubFlavoredMarkdownConverter` constructors The constructor methods for both `CommonMarkConverter` and `GithubFlavoredMarkdownConverter` no longer accept passing in a customized `Environment`. If you want to customize the extensions used in your converter you should switch to using `MarkdownConverter`. See the [Basic Usage](/2.0/basic-usage/) documentation for an example. ```diff -use League\CommonMark\CommonMarkConverter; use League\CommonMark\Environment\Environment; use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension; use League\CommonMark\Extension\Table\TableExtension; +use League\CommonMark\MarkdownConverter; $config = [ 'html_input' => 'escape', 'allow_unsafe_links' => false, 'max_nesting_level' => 100, ]; -$environment = new Environment(); +$environment = new Environment($config); $environment->addExtension(new CommonMarkCoreExtension()); $environment->addExtension(new TableExtension()); -$converter = new CommonMarkConverter($config, $environment); // or GithubFlavoredMarkdownConverter +$converter = new MarkdownConverter($environment); echo $converter->convertToHtml('Hello World!'); ``` ## `CommonMarkConverter` Return Type In 1.x, calling `convertToHtml()` would return a `string`. In 2.x this changed to return a `RenderedContentInterface`. To get the resulting HTML, either cast it to a `string` or call `->getContent()`. (This new interface extends from `Stringable` so you can type hint against that instead, if needed.) ```diff use League\CommonMark\CommonMarkConverter; $converter = new CommonMarkConverter(); -echo $converter->convertToHtml('# Hello World!'); +echo $converter->convertToHtml('# Hello World!')->getContent(); +// or +echo (string) $converter->convertToHtml('# Hello World!'); ``` ## HTML Changes Table of Contents items are no longer wrapped with `

` tags: ```diff

``` See [#613](https://github.com/thephpleague/commonmark/issues/613) for details. Additionally, the HTML (including URL fragments) for Heading Permalinks have changed: ```diff -

Hello World!

+

Hello World!

``` Note that the `href` now targets the `id` attribute instead of the `name`, which is deprecated in HTML 5. Additionally, the default prefix has changed to `content`. See the [Heading Permalink extension documentation](/2.0/extensions/heading-permalinks/#configuration) for more details on how to configure the prefixes. ## Configuration Option Changes Several configuration options now have new names: | Old Key/Path | New Key/Path | Notes | | ----------------------------------- | ----------------------------------- | --------------------------------------- | | `enable_em` | `commonmark/enable_em` | | | `enable_strong` | `commonmark/enable_strong` | | | `use_asterisk` | `commonmark/use_asterisk` | | | `use_underscore` | `commonmark/use_underscore` | | | `unordered_list_markers` | `commonmark/unordered_list_markers` | Empty arrays no longer allowed | | `heading_permalink/id_prefix` | (unchanged) | Default is now `content` | | `heading_permalink/inner_contents` | `heading_permalink/symbol` | | | `heading_permalink/slug_normalizer` | `slug_normalizer/instance` | | | `max_nesting_level` | (unchanged) | Only integer values are supported | | `mentions/*/symbol` | `mentions/*/prefix` | | | `mentions/*/regex` | `mentions/*/pattern` | Cannot contain start/end `/` delimiters | ## Classes/Namespaces Renamed Many classes now live in different namespaces, and some have also been renamed. Here's a quick guide showing their new locations: _(Note that the base namespace of `League\CommonMark` has been omitted from this table for brevity.)_ | Old Class Namespace/Name (1.x) | New Class Namespace/Name (2.0) | | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | `Environment` | `Environment\Environment` | | `Extension\CommonMarkCoreExtension` | `Extension\CommonMark\CommonMarkCoreExtension` | | `Block\Element\Document` | `Node\Block\Document` | | `DocParser` | `Parser\MarkdownParser` | | `DocParserInterface` | `Parser\MarkdownParserInterface` | | `ElementRendererInterface` | `Renderer\ChildNodeRendererInterface` | | `HtmlRenderer` | `Renderer\HtmlRenderer` | (This is only a partial list of the clases and interfaces you're likely to work with as a consumer – see the [developer upgrade guide](/2.0/upgrading/developers/) for the complete list.) ## Removed Classes The following classes have been removed: | Class name in 1.x | Replacement / Notes | | ------------------------------ | ------------------------------------------------------------------------------------------------------------- | | `Converter` | Use `MarkdownConverter` instead. | | `ConverterInterface` | Use `MarkdownConverterInterface`. This interface has the same methods so it should be a drop-in replacement. | (Several other classes were removed, but these are the only ones you're likely to notice. See the [developer upgrade guide](/2.0/upgrading/developers/) for the complete list.) ## Renamed constants The following constants have been moved/renamed: | Old Name/Location (1.x) | New Name/Location (2.0) | | ----------------------------------------- | ------------------------ | | `EnvironmentInterface::HTML_INPUT_ALLOW` | `HtmlFilter::ALLOW` | | `EnvironmentInterface::HTML_INPUT_ESCAPE` | `HtmlFilter::ESCAPE` | | `EnvironmentInterface::HTML_INPUT_STRIP` | `HtmlFilter::STRIP` | ## Renamed Methods The following methods have been renamed: | Class | Old Name (1.x) | New Name (2.0) | | -------------------------------------------------- | ------------------ | ----------------------- | | `Environment` / `ConfigurableEnvironmentInterface` | `addBlockParser()` | `addBlockStartParser()` | | `ReferenceMap` / `ReferenceMapInterface` | `addReference()` | `add()` | | `ReferenceMap` / `ReferenceMapInterface` | `getReference()` | `get()` | | `ReferenceMap` / `ReferenceMapInterface` | `listReferences()` | `getIterator()` | ## Configuration Method Changes Calling `EnvironmentInterface::getConfig()` without any parameters is no longer supported. Calling `ConfigurableEnvironmentInterface::mergeConfig()` without any parameters is no longer supported. The `ConfigurableEnvironmentInterface::setConfig()` method has been removed. Use `getConfig()` instead. ## `bin/commonmark` command This command was buggy to test and was relatively unpopular, so it has been removed. If you need this type of functionality, consider writing your own script with a Converter/Environment configured exactly how you want it. ## `CommonMarkConverter::VERSION` constant This previously-deprecated constant was removed in 2.0. Use `\Composer\InstalledVersions` provided by `composer-runtime-api` instead. ## `HeadingPermalinkRenderer::DEFAULT_INNER_CONTENTS` constant This previously-deprecated constant was removed in 2.0. Use `HeadingPermalinkRenderer::DEFAULT_SYMBOL` instead.