{"id":13510514,"url":"https://github.com/syntax-tree/mdast","last_synced_at":"2025-10-03T12:54:27.639Z","repository":{"id":43712274,"uuid":"48559092","full_name":"syntax-tree/mdast","owner":"syntax-tree","description":"Markdown Abstract Syntax Tree format","archived":false,"fork":false,"pushed_at":"2024-10-04T12:05:04.000Z","size":238,"stargazers_count":1218,"open_issues_count":0,"forks_count":44,"subscribers_count":18,"default_branch":"main","last_synced_at":"2025-05-12T19:29:02.355Z","etag":null,"topics":["ast","markdown","syntax-tree","unist"],"latest_commit_sha":null,"homepage":"https://unifiedjs.com","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/syntax-tree.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"unifiedjs","open_collective":"unified"}},"created_at":"2015-12-24T23:12:36.000Z","updated_at":"2025-05-12T10:12:04.000Z","dependencies_parsed_at":"2023-02-18T17:45:30.819Z","dependency_job_id":"ea00cb6d-204b-40ac-bd63-70f8f672a294","html_url":"https://github.com/syntax-tree/mdast","commit_stats":{"total_commits":105,"total_committers":8,"mean_commits":13.125,"dds":"0.10476190476190472","last_synced_commit":"eace3f04a9518632ddaed59c9fdfe3620a0b7769"},"previous_names":["wooorm/mdast"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syntax-tree%2Fmdast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syntax-tree%2Fmdast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syntax-tree%2Fmdast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syntax-tree%2Fmdast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/syntax-tree","download_url":"https://codeload.github.com/syntax-tree/mdast/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253808714,"owners_count":21967586,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ast","markdown","syntax-tree","unist"],"created_at":"2024-08-01T02:01:41.999Z","updated_at":"2025-10-03T12:54:22.591Z","avatar_url":"https://github.com/syntax-tree.png","language":null,"readme":"# ![mdast][logo]\n\n**M**ark**d**own **A**bstract **S**yntax **T**ree.\n\n***\n\n**mdast** is a specification for representing markdown in a [syntax\ntree][syntax-tree].\nIt implements **[unist][]**.\nIt can represent several flavours of [markdown][],\nsuch as [CommonMark][] and [GitHub Flavored Markdown][gfm].\n\nThis document may not be released.\nSee [releases][] for released documents.\nThe latest released version is [`5.0.0`][latest].\n\n## Contents\n\n* [Introduction](#introduction)\n  * [Where this specification fits](#where-this-specification-fits)\n* [Types](#types)\n* [Nodes (abstract)](#nodes-abstract)\n  * [`Literal`](#literal)\n  * [`Parent`](#parent)\n* [Nodes](#nodes)\n  * [`Blockquote`](#blockquote)\n  * [`Break`](#break)\n  * [`Code`](#code)\n  * [`Definition`](#definition)\n  * [`Emphasis`](#emphasis)\n  * [`Heading`](#heading)\n  * [`Html`](#html)\n  * [`Image`](#image)\n  * [`ImageReference`](#imagereference)\n  * [`InlineCode`](#inlinecode)\n  * [`Link`](#link)\n  * [`LinkReference`](#linkreference)\n  * [`List`](#list)\n  * [`ListItem`](#listitem)\n  * [`Paragraph`](#paragraph)\n  * [`Root`](#root)\n  * [`Strong`](#strong)\n  * [`Text`](#text)\n  * [`ThematicBreak`](#thematicbreak)\n* [Mixin](#mixin)\n  * [`Alternative`](#alternative)\n  * [`Association`](#association)\n  * [`Reference`](#reference)\n  * [`Resource`](#resource)\n* [Enumeration](#enumeration)\n  * [`referenceType`](#referencetype)\n* [Content model](#content-model)\n  * [`Content`](#content)\n  * [`FlowContent`](#flowcontent)\n  * [`ListContent`](#listcontent)\n  * [`PhrasingContent`](#phrasingcontent)\n* [Extensions](#extensions)\n  * [GFM](#gfm)\n  * [Frontmatter](#frontmatter)\n  * [MDX](#mdx)\n* [Glossary](#glossary)\n* [List of utilities](#list-of-utilities)\n* [References](#references)\n* [Security](#security)\n* [Related](#related)\n* [Contribute](#contribute)\n* [Acknowledgments](#acknowledgments)\n* [License](#license)\n\n## Introduction\n\nThis document defines a format for representing [markdown][] as an [abstract\nsyntax tree][syntax-tree].\nDevelopment of mdast started in July 2014,\nin **[remark][]**,\nbefore [unist][] existed.\nThis specification is written in a [Web IDL][webidl]-like grammar.\n\n### Where this specification fits\n\nmdast extends [unist][],\na format for syntax trees,\nto benefit from its [ecosystem of utilities][utilities].\n\nmdast relates to [JavaScript][] in that it has a rich [ecosystem of\nutilities][list-of-utilities] for working with compliant syntax trees in\nJavaScript.\nHowever,\nmdast is not limited to JavaScript and can be used in other programming\nlanguages.\n\nmdast relates to the [unified][] and [remark][] projects in that mdast syntax\ntrees are used throughout their ecosystems.\n\n## Types\n\nIf you are using TypeScript,\nyou can use the unist types by installing them with npm:\n\n```sh\nnpm install @types/mdast\n```\n\n## Nodes (abstract)\n\n### `Literal`\n\n```idl\ninterface Literal \u003c: UnistLiteral {\n  value: string\n}\n```\n\n**Literal** ([**UnistLiteral**][dfn-unist-literal]) represents an abstract\ninterface in mdast containing a value.\n\nIts `value` field is a `string`.\n\n### `Parent`\n\n```idl\ninterface Parent \u003c: UnistParent {\n  children: [MdastContent]\n}\n```\n\n**Parent** ([**UnistParent**][dfn-unist-parent]) represents an abstract\ninterface in mdast containing other nodes (said to be [*children*][term-child]).\n\nIts content is limited to only other [**mdast content**][dfn-mdast-content].\n\n## Nodes\n\n### `Blockquote`\n\n```idl\ninterface Blockquote \u003c: Parent {\n  type: 'blockquote'\n  children: [FlowContent]\n}\n```\n\n**Blockquote** ([**Parent**][dfn-parent]) represents a section quoted from\nsomewhere else.\n\n**Blockquote** can be used where [**flow**][dfn-flow-content] content is\nexpected.\nIts content model is also [**flow**][dfn-flow-content] content.\n\nFor example,\nthe following markdown:\n\n```markdown\n\u003e Alpha bravo charlie.\n```\n\nYields:\n\n```js\n{\n  type: 'blockquote',\n  children: [{\n    type: 'paragraph',\n    children: [{type: 'text', value: 'Alpha bravo charlie.'}]\n  }]\n}\n```\n\n### `Break`\n\n```idl\ninterface Break \u003c: Node {\n  type: 'break'\n}\n```\n\n**Break** ([**Node**][dfn-node]) represents a line break,\nsuch as in poems or addresses.\n\n**Break** can be used where [**phrasing**][dfn-phrasing-content] content is\nexpected.\nIt has no content model.\n\nFor example,\nthe following markdown:\n\n```markdown\nfoo··\nbar\n```\n\nYields:\n\n```js\n{\n  type: 'paragraph',\n  children: [\n    {type: 'text', value: 'foo'},\n    {type: 'break'},\n    {type: 'text', value: 'bar'}\n  ]\n}\n```\n\n### `Code`\n\n```idl\ninterface Code \u003c: Literal {\n  type: 'code'\n  lang: string?\n  meta: string?\n}\n```\n\n**Code** ([**Literal**][dfn-literal]) represents a block of preformatted text,\nsuch as ASCII art or computer code.\n\n**Code** can be used where [**flow**][dfn-flow-content] content is expected.\nIts content is represented by its `value` field.\n\nThis node relates to the [**phrasing**][dfn-phrasing-content] content concept\n[**InlineCode**][dfn-inline-code].\n\nA `lang` field can be present.\nIt represents the language of computer code being marked up.\n\nIf the `lang` field is present,\na `meta` field can be present.\nIt represents custom information relating to the node.\n\nFor example,\nthe following markdown:\n\n```markdown\n    foo()\n```\n\nYields:\n\n```js\n{\n  type: 'code',\n  lang: null,\n  meta: null,\n  value: 'foo()'\n}\n```\n\nAnd the following markdown:\n\n````markdown\n```js highlight-line=\"2\"\nfoo()\nbar()\nbaz()\n```\n````\n\nYields:\n\n```js\n{\n  type: 'code',\n  lang: 'javascript',\n  meta: 'highlight-line=\"2\"',\n  value: 'foo()\\nbar()\\nbaz()'\n}\n```\n\n### `Definition`\n\n```idl\ninterface Definition \u003c: Node {\n  type: 'definition'\n}\n\nDefinition includes Association\nDefinition includes Resource\n```\n\n**Definition** ([**Node**][dfn-node]) represents a resource.\n\n**Definition** can be used where [**content**][dfn-content] is expected.\nIt has no content model.\n\n**Definition** includes the mixins [**Association**][dfn-mxn-association] and\n[**Resource**][dfn-mxn-resource].\n\n**Definition** should be associated with\n[**LinkReferences**][dfn-link-reference] and\n[**ImageReferences**][dfn-image-reference].\n\nFor example,\nthe following markdown:\n\n```markdown\n[Alpha]: https://example.com\n```\n\nYields:\n\n```js\n{\n  type: 'definition',\n  identifier: 'alpha',\n  label: 'Alpha',\n  url: 'https://example.com',\n  title: null\n}\n```\n\n### `Emphasis`\n\n```idl\ninterface Emphasis \u003c: Parent {\n  type: 'emphasis'\n  children: [PhrasingContent]\n}\n```\n\n**Emphasis** ([**Parent**][dfn-parent]) represents stress emphasis of its\ncontents.\n\n**Emphasis** can be used where [**phrasing**][dfn-phrasing-content] content is\nexpected.\nIts content model is [**phrasing**][dfn-phrasing-content] content.\n\nFor example,\nthe following markdown:\n\n```markdown\n*alpha* _bravo_\n```\n\nYields:\n\n```js\n{\n  type: 'paragraph',\n  children: [\n    {\n      type: 'emphasis',\n      children: [{type: 'text', value: 'alpha'}]\n    },\n    {type: 'text', value: ' '},\n    {\n      type: 'emphasis',\n      children: [{type: 'text', value: 'bravo'}]\n    }\n  ]\n}\n```\n\n### `Heading`\n\n```idl\ninterface Heading \u003c: Parent {\n  type: 'heading'\n  depth: 1 \u003c= number \u003c= 6\n  children: [PhrasingContent]\n}\n```\n\n**Heading** ([**Parent**][dfn-parent]) represents a heading of a section.\n\n**Heading** can be used where [**flow**][dfn-flow-content] content is expected.\nIts content model is [**phrasing**][dfn-phrasing-content] content.\n\nA `depth` field must be present.\nA value of `1` is said to be the highest rank and `6` the lowest.\n\nFor example,\nthe following markdown:\n\n```markdown\n# Alpha\n```\n\nYields:\n\n```js\n{\n  type: 'heading',\n  depth: 1,\n  children: [{type: 'text', value: 'Alpha'}]\n}\n```\n\n### `Html`\n\n```idl\ninterface Html \u003c: Literal {\n  type: 'html'\n}\n```\n\n**Html** ([**Literal**][dfn-literal]) represents a fragment of raw [HTML][].\n\n**Html** can be used where [**flow**][dfn-flow-content] or\n[**phrasing**][dfn-phrasing-content] content is expected.\nIts content is represented by its `value` field.\n\n**Html** nodes do not have the restriction of being valid or complete HTML\n([\\[HTML\\]][html]) constructs.\n\nFor example,\nthe following markdown:\n\n```markdown\n\u003cdiv\u003e\n```\n\nYields:\n\n```js\n{type: 'html', value: '\u003cdiv\u003e'}\n```\n\n### `Image`\n\n```idl\ninterface Image \u003c: Node {\n  type: 'image'\n}\n\nImage includes Resource\nImage includes Alternative\n```\n\n**Image** ([**Node**][dfn-node]) represents an image.\n\n**Image** can be used where [**phrasing**][dfn-phrasing-content] content is\nexpected.\nIt has no content model,\nbut is described by its `alt` field.\n\n**Image** includes the mixins [**Resource**][dfn-mxn-resource] and\n[**Alternative**][dfn-mxn-alternative].\n\nFor example,\nthe following markdown:\n\n```markdown\n![alpha](https://example.com/favicon.ico \"bravo\")\n```\n\nYields:\n\n```js\n{\n  type: 'image',\n  url: 'https://example.com/favicon.ico',\n  title: 'bravo',\n  alt: 'alpha'\n}\n```\n\n### `ImageReference`\n\n```idl\ninterface ImageReference \u003c: Node {\n  type: 'imageReference'\n}\n\nImageReference includes Reference\nImageReference includes Alternative\n```\n\n**ImageReference** ([**Node**][dfn-node]) represents an image through\nassociation,\nor its original source if there is no association.\n\n**ImageReference** can be used where [**phrasing**][dfn-phrasing-content]\ncontent is expected.\nIt has no content model,\nbut is described by its `alt` field.\n\n**ImageReference** includes the mixins [**Reference**][dfn-mxn-reference] and\n[**Alternative**][dfn-mxn-alternative].\n\n**ImageReference** should be associated with a [**Definition**][dfn-definition].\n\nFor example,\nthe following markdown:\n\n```markdown\n![alpha][bravo]\n```\n\nYields:\n\n```js\n{\n  type: 'imageReference',\n  identifier: 'bravo',\n  label: 'bravo',\n  referenceType: 'full',\n  alt: 'alpha'\n}\n```\n\n### `InlineCode`\n\n```idl\ninterface InlineCode \u003c: Literal {\n  type: 'inlineCode'\n}\n```\n\n**InlineCode** ([**Literal**][dfn-literal]) represents a fragment of computer\ncode,\nsuch as a file name,\ncomputer program,\nor anything a computer could parse.\n\n**InlineCode** can be used where [**phrasing**][dfn-phrasing-content] content\nis expected.\nIts content is represented by its `value` field.\n\nThis node relates to the [**flow**][dfn-flow-content] content concept\n[**Code**][dfn-code].\n\nFor example,\nthe following markdown:\n\n```markdown\n`foo()`\n```\n\nYields:\n\n```js\n{type: 'inlineCode', value: 'foo()'}\n```\n\n### `Link`\n\n```idl\ninterface Link \u003c: Parent {\n  type: 'link'\n  children: [PhrasingContent]\n}\n\nLink includes Resource\n```\n\n**Link** ([**Parent**][dfn-parent]) represents a hyperlink.\n\n**Link** can be used where [**phrasing**][dfn-phrasing-content] content is\nexpected.\nIts content model is also [**phrasing**][dfn-phrasing-content] content.\n\n**Link** includes the mixin [**Resource**][dfn-mxn-resource].\n\nFor example,\nthe following markdown:\n\n```markdown\n[alpha](https://example.com \"bravo\")\n```\n\nYields:\n\n```js\n{\n  type: 'link',\n  url: 'https://example.com',\n  title: 'bravo',\n  children: [{type: 'text', value: 'alpha'}]\n}\n```\n\n### `LinkReference`\n\n```idl\ninterface LinkReference \u003c: Parent {\n  type: 'linkReference'\n  children: [PhrasingContent]\n}\n\nLinkReference includes Reference\n```\n\n**LinkReference** ([**Parent**][dfn-parent]) represents a hyperlink through\nassociation,\nor its original source if there is no association.\n\n**LinkReference** can be used where [**phrasing**][dfn-phrasing-content] content\nis expected.\nIts content model is also [**phrasing**][dfn-phrasing-content] content.\n\n**LinkReference** includes the mixin [**Reference**][dfn-mxn-reference].\n\n**LinkReferences** should be associated with a [**Definition**][dfn-definition].\n\nFor example,\nthe following markdown:\n\n```markdown\n[alpha][Bravo]\n```\n\nYields:\n\n```js\n{\n  type: 'linkReference',\n  identifier: 'bravo',\n  label: 'Bravo',\n  referenceType: 'full',\n  children: [{type: 'text', value: 'alpha'}]\n}\n```\n\n### `List`\n\n```idl\ninterface List \u003c: Parent {\n  type: 'list'\n  ordered: boolean?\n  start: number?\n  spread: boolean?\n  children: [ListContent]\n}\n```\n\n**List** ([**Parent**][dfn-parent]) represents a list of items.\n\n**List** can be used where [**flow**][dfn-flow-content] content is expected.\nIts content model is [**list**][dfn-list-content] content.\n\nAn `ordered` field can be present.\nIt represents that the items have been intentionally ordered (when `true`),\nor that the order of items is not important (when `false` or not present).\n\nA `start` field can be present.\nIt represents,\nwhen the `ordered` field is `true`,\nthe starting number of the list.\n\nA `spread` field can be present.\nIt represents that one or more of its children are separated with a blank line\nfrom its [siblings][term-sibling] (when `true`),\nor not (when `false` or not present).\n\nFor example,\nthe following markdown:\n\n```markdown\n1. foo\n```\n\nYields:\n\n```js\n{\n  type: 'list',\n  ordered: true,\n  start: 1,\n  spread: false,\n  children: [{\n    type: 'listItem',\n    spread: false,\n    children: [{\n      type: 'paragraph',\n      children: [{type: 'text', value: 'foo'}]\n    }]\n  }]\n}\n```\n\n### `ListItem`\n\n```idl\ninterface ListItem \u003c: Parent {\n  type: 'listItem'\n  spread: boolean?\n  children: [FlowContent]\n}\n```\n\n**ListItem** ([**Parent**][dfn-parent]) represents an item in a\n[**List**][dfn-list].\n\n**ListItem** can be used where [**list**][dfn-list-content] content is expected.\nIts content model is [**flow**][dfn-flow-content] content.\n\nA `spread` field can be present.\nIt represents that the item contains two or more [*children*][term-child]\nseparated by a blank line (when `true`),\nor not (when `false` or not present).\n\nFor example,\nthe following markdown:\n\n```markdown\n* bar\n```\n\nYields:\n\n```js\n{\n  type: 'listItem',\n  spread: false,\n  children: [{\n    type: 'paragraph',\n    children: [{type: 'text', value: 'bar'}]\n  }]\n}\n```\n\n### `Paragraph`\n\n```idl\ninterface Paragraph \u003c: Parent {\n  type: 'paragraph'\n  children: [PhrasingContent]\n}\n```\n\n**Paragraph** ([**Parent**][dfn-parent]) represents a unit of discourse dealing\nwith a particular point or idea.\n\n**Paragraph** can be used where [**content**][dfn-content] is expected.\nIts content model is [**phrasing**][dfn-phrasing-content] content.\n\nFor example,\nthe following markdown:\n\n```markdown\nAlpha bravo charlie.\n```\n\nYields:\n\n```js\n{\n  type: 'paragraph',\n  children: [{type: 'text', value: 'Alpha bravo charlie.'}]\n}\n```\n\n### `Root`\n\n```idl\ninterface Root \u003c: Parent {\n  type: 'root'\n}\n```\n\n**Root** ([**Parent**][dfn-parent]) represents a document.\n\n**Root** can be used as the [*root*][term-root] of a [*tree*][term-tree],\nnever as a [*child*][term-child].\nIts content model is **not** limited to [**flow**][dfn-flow-content] content,\nbut instead can contain any [**mdast content**][dfn-mdast-content] with the\nrestriction that all content must be of the same category.\n\n### `Strong`\n\n```idl\ninterface Strong \u003c: Parent {\n  type: 'strong'\n  children: [PhrasingContent]\n}\n```\n\n**Strong** ([**Parent**][dfn-parent]) represents strong importance,\nseriousness,\nor urgency for its contents.\n\n**Strong** can be used where [**phrasing**][dfn-phrasing-content] content is\nexpected.\nIts content model is [**phrasing**][dfn-phrasing-content] content.\n\nFor example,\nthe following markdown:\n\n```markdown\n**alpha** __bravo__\n```\n\nYields:\n\n```js\n{\n  type: 'paragraph',\n  children: [\n    {\n      type: 'strong',\n      children: [{type: 'text', value: 'alpha'}]\n    },\n    {type: 'text', value: ' '},\n    {\n      type: 'strong',\n      children: [{type: 'text', value: 'bravo'}]\n    }\n  ]\n}\n```\n\n### `Text`\n\n```idl\ninterface Text \u003c: Literal {\n  type: 'text'\n}\n```\n\n**Text** ([**Literal**][dfn-literal]) represents everything that is just text.\n\n**Text** can be used where [**phrasing**][dfn-phrasing-content] content is\nexpected.\nIts content is represented by its `value` field.\n\nFor example,\nthe following markdown:\n\n```markdown\nAlpha bravo charlie.\n```\n\nYields:\n\n```js\n{type: 'text', value: 'Alpha bravo charlie.'}\n```\n\n### `ThematicBreak`\n\n```idl\ninterface ThematicBreak \u003c: Node {\n  type: 'thematicBreak'\n}\n```\n\n**ThematicBreak** ([**Node**][dfn-node]) represents a thematic break,\nsuch as a scene change in a story,\na transition to another topic,\nor a new document.\n\n**ThematicBreak** can be used where [**flow**][dfn-flow-content] content is\nexpected.\nIt has no content model.\n\nFor example,\nthe following markdown:\n\n```markdown\n***\n```\n\nYields:\n\n```js\n{type: 'thematicBreak'}\n```\n\n## Mixin\n\n### `Alternative`\n\n```idl\ninterface mixin Alternative {\n  alt: string?\n}\n```\n\n**Alternative** represents a node with a fallback\n\nAn `alt` field should be present.\nIt represents equivalent content for environments that cannot represent the\nnode as intended.\n\n### `Association`\n\n```idl\ninterface mixin Association {\n  identifier: string\n  label: string?\n}\n```\n\n**Association** represents an internal relation from one node to another.\n\nAn `identifier` field must be present.\nIt can match another node.\n`identifier` is a source value: character escapes and character references are\n*not* parsed.\nIts value must be normalized.\n\nA `label` field can be present.\n`label` is a string value: it works just like `title` on a link or a `lang` on\ncode: character escapes and character references are parsed.\n\nTo normalize a value,\ncollapse markdown whitespace (`[\\t\\n\\r ]+`) to a space,\ntrim the optional initial and/or final space,\nand perform case-folding.\n\nWhether the value of `identifier` (or normalized `label` if there is no\n`identifier`) is expected to be a unique identifier or not depends on the type\nof node including the **Association**.\nAn example of this is that they should be unique on\n[**Definition**][dfn-definition],\nwhereas multiple [**LinkReference**][dfn-link-reference]s can be non-unique to\nbe associated with one definition.\n\n### `Reference`\n\n```idl\ninterface mixin Reference {\n  referenceType: string\n}\n\nReference includes Association\n```\n\n**Reference** represents a marker that is [**associated**][dfn-mxn-association]\nto another node.\n\nA `referenceType` field must be present.\nIts value must be a [**referenceType**][dfn-enum-reference-type].\nIt represents the explicitness of the reference.\n\n### `Resource`\n\n```idl\ninterface mixin Resource {\n  url: string\n  title: string?\n}\n```\n\n**Resource** represents a reference to resource.\n\nA `url` field must be present.\nIt represents a URL to the referenced resource.\n\nA `title` field can be present.\nIt represents  advisory information for the resource,\nsuch as would be appropriate for a tooltip.\n\n## Enumeration\n\n### `referenceType`\n\n```idl\nenum referenceType {\n  'shortcut' | 'collapsed' | 'full'\n}\n```\n\n**referenceType** represents the explicitness of a reference.\n\n* **shortcut**: the reference is implicit,\n  its identifier inferred from its content\n* **collapsed**: the reference is explicit,\n  its identifier inferred from its content\n* **full**: the reference is explicit,\n  its identifier explicitly set\n\n## Content model\n\n```idl\ntype MdastContent = FlowContent | ListContent | PhrasingContent\n```\n\nEach node in mdast falls into one or more categories of **Content** that group\nnodes with similar characteristics together.\n\n### `Content`\n\n```idl\ntype Content = Definition | Paragraph\n```\n\n**Content** represents runs of text that form definitions and paragraphs.\n\n### `FlowContent`\n\n```idl\ntype FlowContent =\n  Blockquote | Code | Heading | Html | List | ThematicBreak | Content\n```\n\n**Flow** content represent the sections of document.\n\n### `ListContent`\n\n```idl\ntype ListContent = ListItem\n```\n\n**List** content represent the items in a list.\n\n### `PhrasingContent`\n\n```idl\ntype PhrasingContent = Break | Emphasis | Html | Image | ImageReference\n  | InlineCode | Link | LinkReference | Strong | Text\n```\n\n**Phrasing** content represent the text in a document and its markup.\n\n## Extensions\n\nMarkdown syntax is often extended.\nIt is not a goal of this specification to list all possible extensions.\nHowever,\na short list of frequently used extensions are shown below.\n\n### GFM\n\nThe following interfaces are found in [GitHub Flavored Markdown][gfm].\n\n#### `Delete`\n\n```idl\ninterface Delete \u003c: Parent {\n  type: 'delete'\n  children: [PhrasingContent]\n}\n```\n\n**Delete** ([**Parent**][dfn-parent]) represents contents that are no longer\naccurate or no longer relevant.\n\n**Delete** can be used where [**phrasing**][dfn-phrasing-content] content is\nexpected.\nIts content model is [**phrasing**][dfn-phrasing-content] content.\n\nFor example,\nthe following markdown:\n\n```markdown\n~~alpha~~\n```\n\nYields:\n\n```js\n{\n  type: 'delete',\n  children: [{type: 'text', value: 'alpha'}]\n}\n```\n\n#### `ListItem` (GFM)\n\n```idl\ninterface ListItemGfm \u003c: ListItem {\n  checked: boolean?\n}\n```\n\nIn GFM,\na `checked` field can be present.\nIt represents whether the item is done (when `true`),\nnot done (when `false`),\nor indeterminate or not applicable (when `null` or not present).\n\n#### `FootnoteDefinition`\n\n```idl\ninterface FootnoteDefinition \u003c: Parent {\n  type: 'footnoteDefinition'\n  children: [FlowContent]\n}\n\nFootnoteDefinition includes Association\n```\n\n**FootnoteDefinition** ([**Parent**][dfn-parent]) represents content relating\nto the document that is outside its flow.\n\n**FootnoteDefinition** can be used where [**flow**][dfn-flow-content] content is\nexpected.\nIts content model is also [**flow**][dfn-flow-content] content.\n\n**FootnoteDefinition** includes the mixin\n[**Association**][dfn-mxn-association].\n\n**FootnoteDefinition** should be associated with\n[**FootnoteReferences**][dfn-footnote-reference].\n\nFor example,\nthe following markdown:\n\n```markdown\n[^alpha]: bravo and charlie.\n```\n\nYields:\n\n```js\n{\n  type: 'footnoteDefinition',\n  identifier: 'alpha',\n  label: 'alpha',\n  children: [{\n    type: 'paragraph',\n    children: [{type: 'text', value: 'bravo and charlie.'}]\n  }]\n}\n```\n\n#### `FootnoteReference`\n\n```idl\ninterface FootnoteReference \u003c: Node {\n  type: 'footnoteReference'\n}\n\nFootnoteReference includes Association\n```\n\n**FootnoteReference** ([**Node**][dfn-node]) represents a marker through\nassociation.\n\n**FootnoteReference** can be used where [**phrasing**][dfn-phrasing-content]\ncontent is expected.\nIt has no content model.\n\n**FootnoteReference** includes the mixin [**Association**][dfn-mxn-association].\n\n**FootnoteReference** should be associated with a\n[**FootnoteDefinition**][dfn-footnote-definition].\n\nFor example,\nthe following markdown:\n\n```markdown\n[^alpha]\n```\n\nYields:\n\n```js\n{\n  type: 'footnoteReference',\n  identifier: 'alpha',\n  label: 'alpha'\n}\n```\n\n#### `Table`\n\n```idl\ninterface Table \u003c: Parent {\n  type: 'table'\n  align: [alignType]?\n  children: [TableContent]\n}\n```\n\n**Table** ([**Parent**][dfn-parent]) represents two-dimensional data.\n\n**Table** can be used where [**flow**][dfn-flow-content] content is expected.\nIts content model is [**table**][dfn-table-content] content.\n\nThe [*head*][term-head] of the node represents the labels of the columns.\n\nAn `align` field can be present.\nIf present,\nit must be a list of [**alignType**s][dfn-enum-align-type].\nIt represents how cells in columns are aligned.\n\nFor example,\nthe following markdown:\n\n```markdown\n| foo | bar |\n| :-- | :-: |\n| baz | qux |\n```\n\nYields:\n\n```js\n{\n  type: 'table',\n  align: ['left', 'center'],\n  children: [\n    {\n      type: 'tableRow',\n      children: [\n        {\n          type: 'tableCell',\n          children: [{type: 'text', value: 'foo'}]\n        },\n        {\n          type: 'tableCell',\n          children: [{type: 'text', value: 'bar'}]\n        }\n      ]\n    },\n    {\n      type: 'tableRow',\n      children: [\n        {\n          type: 'tableCell',\n          children: [{type: 'text', value: 'baz'}]\n        },\n        {\n          type: 'tableCell',\n          children: [{type: 'text', value: 'qux'}]\n        }\n      ]\n    }\n  ]\n}\n```\n\n#### `TableCell`\n\n```idl\ninterface TableCell \u003c: Parent {\n  type: 'tableCell'\n  children: [PhrasingContent]\n}\n```\n\n**TableCell** ([**Parent**][dfn-parent]) represents a header cell in a\n[**Table**][dfn-table],\nif its parent is a [*head*][term-head],\nor a data cell otherwise.\n\n**TableCell** can be used where [**row**][dfn-row-content] content is expected.\nIts content model is [**phrasing**][dfn-phrasing-content] content excluding\n[**Break**][dfn-break] nodes.\n\nFor an example,\nsee [**Table**][dfn-table].\n\n#### `TableRow`\n\n```idl\ninterface TableRow \u003c: Parent {\n  type: 'tableRow'\n  children: [RowContent]\n}\n```\n\n**TableRow** ([**Parent**][dfn-parent]) represents a row of cells in a table.\n\n**TableRow** can be used where [**table**][dfn-table-content] content is\nexpected.\nIts content model is [**row**][dfn-row-content] content.\n\nIf the node is a [*head*][term-head],\nit represents the labels of the columns for its parent [**Table**][dfn-table].\n\nFor an example,\nsee [**Table**][dfn-table].\n\n#### `alignType`\n\n```idl\nenum alignType {\n  'left' | 'right' | 'center' | null\n}\n```\n\n**alignType** represents how phrasing content is aligned\n([\\[CSSTEXT\\]][css-text]).\n\n* **`'left'`**: See the [`left`][css-left] value of the `text-align` CSS\n  property\n* **`'right'`**: See the [`right`][css-right] value of the `text-align`\n  CSS property\n* **`'center'`**: See the [`center`][css-center] value of the `text-align`\n  CSS property\n* **`null`**: phrasing content is aligned as defined by the host environment\n\n#### `FlowContent` (GFM)\n\n```idl\ntype FlowContentGfm = FootnoteDefinition | Table | FlowContent\n```\n\n#### `ListContent` (GFM)\n\n```idl\ntype ListContentGfm = ListItemGfm\n```\n\n#### `PhrasingContent` (GFM)\n\n```idl\ntype PhrasingContentGfm = FootnoteReference | Delete | PhrasingContent\n```\n\n#### `RowContent`\n\n```idl\ntype RowContent = TableCell\n```\n\n**Row** content represent the cells in a row.\n\n#### `TableContent`\n\n```idl\ntype TableContent = TableRow\n```\n\n**Table** content represent the rows in a table.\n\n### Frontmatter\n\nThe following interfaces are found with YAML.\n\n#### `Yaml`\n\n```idl\ninterface Yaml \u003c: Literal {\n  type: 'yaml'\n}\n```\n\n**Yaml** ([**Literal**][dfn-literal]) represents a collection of metadata for\nthe document in the YAML ([\\[YAML\\]][yaml]) data serialisation language.\n\n**Yaml** can be used where [**frontmatter**][dfn-frontmatter-content] content is\nexpected.\nIts content is represented by its `value` field.\n\nFor example,\nthe following markdown:\n\n```markdown\n---\nfoo: bar\n---\n```\n\nYields:\n\n```js\n{type: 'yaml', value: 'foo: bar'}\n```\n\n#### `FrontmatterContent`\n\n```idl\ntype FrontmatterContent = Yaml\n```\n\n**Frontmatter** content represent out-of-band information about the document.\n\nIf frontmatter is present,\nit must be limited to one node in the [*tree*][term-tree],\nand can only exist as a [*head*][term-head].\n\n#### `FlowContent` (frontmatter)\n\n```idl\ntype FlowContentFrontmatter = FrontmatterContent | FlowContent\n```\n\n### MDX\n\nSee [`remark-mdx`](https://mdxjs.com/packages/remark-mdx/#syntax-tree).\n\n## Glossary\n\nSee the [unist glossary][glossary].\n\n## List of utilities\n\nSee the [unist list of utilities][utilities] for more utilities.\n\n\u003c!--lint disable list-item-spacing--\u003e\n\n* [`mdast-add-list-metadata`](https://gitlab.com/staltz/mdast-add-list-metadata)\n  — enhance the metadata of `list` and `listItem` nodes\n* [`mdast-util-assert`](https://github.com/syntax-tree/mdast-util-assert)\n  — assert nodes\n* [`mdast-builder`](https://github.com/mike-north/mdast-builder)\n  — build mdast structures with composable functions\n* [`mdast-comment-marker`](https://github.com/syntax-tree/mdast-comment-marker)\n  — parse a comment marker\n* [`mdast-util-compact`](https://github.com/syntax-tree/mdast-util-compact)\n  — make a tree compact\n* [`mdast-util-definitions`](https://github.com/syntax-tree/mdast-util-definitions)\n  — find definition nodes\n* [`mdast-util-directive`](https://github.com/syntax-tree/mdast-util-directive)\n  — parse and serialize directives\n* [`mdast-util-find-and-replace`](https://github.com/syntax-tree/mdast-util-find-and-replace)\n  — find and replace text\n* [`mdast-flatten-image-paragraphs`](https://gitlab.com/staltz/mdast-flatten-image-paragraphs)\n  — flatten `paragraph` and `image` into one `image` node\n* [`mdast-flatten-listitem-paragraphs`](https://gitlab.com/staltz/mdast-flatten-listitem-paragraphs)\n  — flatten `listItem` and (nested) paragraph into one listItem node\n* [`mdast-flatten-nested-lists`](https://gitlab.com/staltz/mdast-flatten-nested-lists)\n  — transform a tree to avoid lists in lists\n* [`mdast-util-from-adf`](https://github.com/bitcrowd/mdast-util-from-adf)\n  — build mdast syntax tree from Atlassian Document Format (ADF)\n* [`mdast-util-from-markdown`](https://github.com/syntax-tree/mdast-util-from-markdown)\n  — parse markdown\n* [`mdast-util-frontmatter`](https://github.com/syntax-tree/mdast-util-frontmatter)\n  — parse and serialize frontmatter\n* [`mdast-util-gfm`](https://github.com/syntax-tree/mdast-util-gfm)\n  — parse and serialize GFM\n* [`mdast-util-gfm-autolink-literal`](https://github.com/syntax-tree/mdast-util-gfm-autolink-literal)\n  — parse and serialize GFM autolink literals\n* [`mdast-util-gfm-footnote`](https://github.com/syntax-tree/mdast-util-gfm-footnote)\n  — parse and serialize GFM footnotes\n* [`mdast-util-gfm-strikethrough`](https://github.com/syntax-tree/mdast-util-gfm-strikethrough)\n  — parse and serialize GFM strikethrough\n* [`mdast-util-gfm-table`](https://github.com/syntax-tree/mdast-util-gfm-table)\n  — parse and serialize GFM tables\n* [`mdast-util-gfm-task-list-item`](https://github.com/syntax-tree/mdast-util-gfm-task-list-item)\n  — parse and serialize GFM task list items\n* [`mdast-util-gridtables`](https://github.com/syntax-tree/mdast-util-gridtables)\n  — parse and serialize gridtables\n* [`mdast-util-heading-range`](https://github.com/syntax-tree/mdast-util-heading-range)\n  — markdown heading as ranges\n* [`mdast-util-heading-style`](https://github.com/syntax-tree/mdast-util-heading-style)\n  — get the style of a heading node\n* [`mdast-util-hidden`](https://github.com/Xunnamius/unified-utils/tree/main/packages/mdast-util-hidden)\n  — prevent nodes from being seen by transformers.\n* [`mdast-util-math`](https://github.com/syntax-tree/mdast-util-math)\n  — parse and serialize math\n* [`mdast-util-mdx`](https://github.com/syntax-tree/mdast-util-mdx)\n  — parse and serialize MDX\n* [`mdast-util-mdx-expression`](https://github.com/syntax-tree/mdast-util-mdx-expression)\n  — parse and serialize MDX expressions\n* [`mdast-util-mdx-jsx`](https://github.com/syntax-tree/mdast-util-mdx-jsx)\n  — parse and serialize MDX JSX\n* [`mdast-util-mdxjs-esm`](https://github.com/syntax-tree/mdast-util-mdxjs-esm)\n  — parse and serialize MDX ESM\n* [`mdast-move-images-to-root`](https://gitlab.com/staltz/mdast-move-images-to-root)\n  — move image nodes up the tree until they are direct children of the root\n* [`mdast-normalize-headings`](https://github.com/syntax-tree/mdast-normalize-headings)\n  — ensure at most one top-level heading is in the document\n* [`mdast-util-phrasing`](https://github.com/syntax-tree/mdast-util-phrasing)\n  — check if a node is phrasing content\n* [`mdast-squeeze-paragraphs`](https://github.com/syntax-tree/mdast-squeeze-paragraphs)\n  — remove empty paragraphs\n* [`mdast-util-toc`](https://github.com/syntax-tree/mdast-util-toc)\n  — generate a table of contents from a tree\n* [`mdast-util-to-hast`](https://github.com/syntax-tree/mdast-util-to-hast)\n  — transform to hast\n* [`mdast-util-to-markdown`](https://github.com/syntax-tree/mdast-util-to-markdown)\n  — serialize markdown\n* [`mdast-util-to-nlcst`](https://github.com/syntax-tree/mdast-util-to-nlcst)\n  — transform to nlcst\n* [`mdast-util-to-string`](https://github.com/syntax-tree/mdast-util-to-string)\n  — get the plain text content of a node\n* [`mdast-zone`](https://github.com/syntax-tree/mdast-zone)\n  — HTML comments as ranges or markers\n\n## References\n\n* **unist**:\n  [Universal Syntax Tree][unist].\n  T. Wormer; et al.\n* **Markdown**:\n  [Markdown][].\n  J. Gruber.\n* **CommonMark**:\n  [CommonMark][].\n  J. MacFarlane; et al.\n* **GFM**:\n  [GitHub Flavored Markdown][gfm].\n  GitHub.\n* **HTML**:\n  [HTML Standard][html],\n  A. van Kesteren; et al.\n  WHATWG.\n* **CSSTEXT**:\n  [CSS Text][css-text],\n  CSS Text, E. Etemad, K. Ishii.\n  W3C.\n* **JavaScript**:\n  [ECMAScript Language Specification][javascript].\n  Ecma International.\n* **YAML**:\n  [YAML Ain’t Markup Language][yaml],\n  O. Ben-Kiki, C. Evans, I. döt Net.\n* **Web IDL**:\n  [Web IDL][webidl],\n  C. McCormack.\n  W3C.\n\n## Security\n\nAs mdast can contain HTML and be used to represent HTML,\nand improper use of HTML can open you up to a [cross-site scripting (XSS)][xss]\nattack,\nimproper use of mdast is also unsafe.\nWhen transforming to HTML (typically through [**hast**][hast]),\nalways be careful with user input and use [`hast-util-santize`][sanitize] to\nmake the hast tree safe.\n\n## Related\n\n* [hast](https://github.com/syntax-tree/hast)\n  — Hypertext Abstract Syntax Tree format\n* [nlcst](https://github.com/syntax-tree/nlcst)\n  — Natural Language Concrete Syntax Tree format\n* [xast](https://github.com/syntax-tree/xast)\n  — Extensible Abstract Syntax Tree\n\n## Contribute\n\nSee [`contributing.md`][contributing] in [`syntax-tree/.github`][health] for\nways to get started.\nSee [`support.md`][support] for ways to get help.\nIdeas for new utilities and tools can be posted in [`syntax-tree/ideas`][ideas].\n\nA curated list of awesome `syntax-tree`,\nunist,\nmdast,\nhast,\nxast,\nand nlcst resources,\ncan be found in [awesome syntax-tree][awesome].\n\nThis project has a [code of conduct][coc].\nBy interacting with this repository,\norganization,\nor community you agree to abide by its terms.\n\n## Acknowledgments\n\nThe initial release of this project was authored by\n[**@wooorm**](https://github.com/wooorm).\n\nSpecial thanks to [**@eush77**](https://github.com/eush77) for their work,\nideas,\nand incredibly valuable feedback!\n\nThanks to\n[**@anandthakker**](https://github.com/anandthakker),\n[**@arobase-che**](https://github.com/arobase-che),\n[**@BarryThePenguin**](https://github.com/BarryThePenguin),\n[**@chinesedfan**](https://github.com/chinesedfan),\n[**@ChristianMurphy**](https://github.com/ChristianMurphy),\n[**@craftzdog**](https://github.com/craftzdog),\n[**@d4rekanguok**](https://github.com/d4rekanguok),\n[**@detj**](https://github.com/detj),\n[**@dominictarr**](https://github.com/dominictarr),\n[**@gkatsev**](https://github.com/gkatsev),\n[**@Hamms**](https://github.com/Hamms),\n[**@Hypercubed**](https://github.com/Hypercubed),\n[**@ikatyang**](https://github.com/ikatyang),\n[**@izumin5210**](https://github.com/izumin5210),\n[**@jasonLaster**](https://github.com/jasonLaster),\n[**@Justineo**](https://github.com/Justineo),\n[**@justjake**](https://github.com/justjake),\n[**@KyleAMathews**](https://github.com/KyleAMathews),\n[**@laysent**](https://github.com/laysent),\n[**@macklinu**](https://github.com/macklinu),\n[**@mike-north**](https://github.com/mike-north),\n[**@Murderlon**](https://github.com/Murderlon),\n[**@nevik**](https://github.com/nevik),\n[**@Rokt33r**](https://github.com/Rokt33r),\n[**@rhysd**](https://github.com/rhysd),\n[**@rubys**](https://github.com/rubys),\n[**@Sarah-Seo**](https://github.com/Sarah-Seo),\n[**@sethvincent**](https://github.com/sethvincent),\n[**@silvenon**](https://github.com/silvenon),\n[**@simov**](https://github.com/simov),\n[**@staltz**](https://github.com/staltz),\n[**@stefanprobst**](https://github.com/stefanprobst),\n[**@tmcw**](https://github.com/tmcw),\nand [**@vhf**](https://github.com/vhf)\nfor contributing to mdast and related projects!\n\n## License\n\n[CC-BY-4.0][license] © [Titus Wormer][author]\n\n\u003c!-- Definitions --\u003e\n\n[health]: https://github.com/syntax-tree/.github\n\n[contributing]: https://github.com/syntax-tree/.github/blob/HEAD/contributing.md\n\n[support]: https://github.com/syntax-tree/.github/blob/HEAD/support.md\n\n[coc]: https://github.com/syntax-tree/.github/blob/HEAD/code-of-conduct.md\n\n[awesome]: https://github.com/syntax-tree/awesome-syntax-tree\n\n[ideas]: https://github.com/syntax-tree/ideas\n\n[license]: https://creativecommons.org/licenses/by/4.0/\n\n[author]: https://wooorm.com\n\n[logo]: https://raw.githubusercontent.com/syntax-tree/mdast/e6b43aa/logo.svg?sanitize=true\n\n[releases]: https://github.com/syntax-tree/mdast/releases\n\n[latest]: https://github.com/syntax-tree/mdast/releases/tag/5.0.0\n\n[dfn-node]: https://github.com/syntax-tree/unist#node\n\n[dfn-unist-parent]: https://github.com/syntax-tree/unist#parent\n\n[dfn-unist-literal]: https://github.com/syntax-tree/unist#literal\n\n[dfn-parent]: #parent\n\n[dfn-literal]: #literal\n\n[dfn-code]: #code\n\n[dfn-inline-code]: #inlinecode\n\n[dfn-list]: #list\n\n[dfn-table]: #table\n\n[dfn-break]: #break\n\n[dfn-link-reference]: #linkreference\n\n[dfn-image-reference]: #imagereference\n\n[dfn-footnote-reference]: #footnotereference\n\n[dfn-definition]: #definition\n\n[dfn-footnote-definition]: #footnotedefinition\n\n[term-tree]: https://github.com/syntax-tree/unist#tree\n\n[term-child]: https://github.com/syntax-tree/unist#child\n\n[term-sibling]: https://github.com/syntax-tree/unist#sibling\n\n[term-root]: https://github.com/syntax-tree/unist#root\n\n[term-head]: https://github.com/syntax-tree/unist#head\n\n[dfn-mxn-resource]: #resource\n\n[dfn-mxn-association]: #association\n\n[dfn-mxn-reference]: #reference\n\n[dfn-mxn-alternative]: #alternative\n\n[dfn-enum-align-type]: #aligntype\n\n[dfn-enum-reference-type]: #referencetype\n\n[dfn-mdast-content]: #content-model\n\n[dfn-flow-content]: #flowcontent\n\n[dfn-frontmatter-content]: #frontmattercontent\n\n[dfn-content]: #content\n\n[dfn-list-content]: #listcontent\n\n[dfn-table-content]: #tablecontent\n\n[dfn-row-content]: #rowcontent\n\n[dfn-phrasing-content]: #phrasingcontent\n\n[list-of-utilities]: #list-of-utilities\n\n[unist]: https://github.com/syntax-tree/unist\n\n[syntax-tree]: https://github.com/syntax-tree/unist#syntax-tree\n\n[yaml]: https://yaml.org\n\n[html]: https://html.spec.whatwg.org/multipage/\n\n[css-text]: https://drafts.csswg.org/css-text/\n\n[css-left]: https://drafts.csswg.org/css-text/#valdef-text-align-left\n\n[css-right]: https://drafts.csswg.org/css-text/#valdef-text-align-right\n\n[css-center]: https://drafts.csswg.org/css-text/#valdef-text-align-center\n\n[javascript]: https://www.ecma-international.org/ecma-262/9.0/index.html\n\n[webidl]: https://heycam.github.io/webidl/\n\n[markdown]: https://daringfireball.net/projects/markdown/\n\n[commonmark]: https://commonmark.org\n\n[gfm]: https://github.github.com/gfm/\n\n[glossary]: https://github.com/syntax-tree/unist#glossary\n\n[utilities]: https://github.com/syntax-tree/unist#list-of-utilities\n\n[unified]: https://github.com/unifiedjs/unified\n\n[remark]: https://github.com/remarkjs/remark\n\n[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting\n\n[hast]: https://github.com/syntax-tree/hast\n\n[sanitize]: https://github.com/syntax-tree/hast-util-sanitize\n","funding_links":["https://github.com/sponsors/unifiedjs","https://opencollective.com/unified"],"categories":["Others","markdown","miscellaneous","Tools","mdast utilities","[🪄 ui-front-end](https://github.com/stars/ketsapiwiq/lists/magic-wand-ui-front-end)","Official"],"sub_categories":["Miscellaneuous"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyntax-tree%2Fmdast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsyntax-tree%2Fmdast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyntax-tree%2Fmdast/lists"}