Repository: graphql-markdown/graphql-markdown
Pull request #2000 (2025-03-05 18:23:11)

✨ isolate mdx
# Description

Make MDX components specific to the doc generator framework used, and default to MD if not defined.
MDX features are now provided by separate package, eg for Docusaurus `@graphql-markdown/docusaurus/mdx`.
The goal is to allow contributors to build custom MDX support matching the doc generator framework they use.

# Checklist

- [x] My changes follow the [contributing guidelines](https://github.com/graphql-markdown/graphql-markdown/blob/main/CONTRIBUTING.md) of this project.
- [x] I have performed a self-review of my code.
- [ ] I have made corresponding changes to the documentation.
- [x] I have added tests that prove my fix is effective or that my changes work.
- [x] New and existing unit tests pass locally with my changes.


github-actions[bot]: 
<!--
  0 failure: 
  1 warning:  This PR modified ...
  
  
  DangerID: danger-id-Danger;
-->


<table>
  <thead>
    <tr>
      <th width="50"></th>
      <th width="100%" data-danger-table="true">Warnings</th>
    </tr>
  </thead>
  <tbody><tr>
      <td>:warning:</td>
      <td>

  This PR modified some Jest snapshot file/s:
 - packages/core/tests/integration/__snapshots__/generator.spec.ts.snap
  </td>
    </tr>
  </tbody>
</table>



<p align="right">
  Generated by :no_entry_sign: <a href="https://danger.systems/js">dangerJS</a> against 8094f3f538754ab4a927c525c0725090ab9d20b6
</p>

sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=graphql-markdown_docusaurus&pullRequest=2000) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_docusaurus&pullRequest=2000&metric=new_coverage&view=list) (required ≥ 80%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_docusaurus&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_utils&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_utils&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_utils&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_utils&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_logger&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_logger&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_logger&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_logger&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_diff&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_diff&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_diff&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_diff&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=graphql-markdown_core&pullRequest=2000) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [2 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_core&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [76.5% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_core&pullRequest=2000&metric=new_coverage&view=list) (required ≥ 80%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_core&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=graphql-markdown_printer-legacy&pullRequest=2000) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [63.6% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_printer-legacy&pullRequest=2000&metric=new_coverage&view=list) (required ≥ 80%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_printer-legacy&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_helpers&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_helpers&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_helpers&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_helpers&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_logger&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_logger&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_logger&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_logger&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_helpers&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_helpers&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_helpers&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_helpers&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=graphql-markdown_docusaurus&pullRequest=2000) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_docusaurus&pullRequest=2000&metric=new_coverage&view=list) (required ≥ 80%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_docusaurus&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_diff&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_diff&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_diff&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_diff&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_utils&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_utils&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_utils&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_utils&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_printer-legacy&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [5 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [90.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_printer-legacy&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_printer-legacy&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_printer-legacy&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=graphql-markdown_core&pullRequest=2000) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [76.5% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_core&pullRequest=2000&metric=new_coverage&view=list) (required ≥ 80%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_core&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_helpers&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_helpers&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_helpers&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_helpers&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_diff&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_diff&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_diff&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_diff&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_printer-legacy&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1 New issue](https://sonarcloud.io/project/issues?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [90.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_printer-legacy&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_printer-legacy&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_printer-legacy&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_logger&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_logger&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_logger&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_logger&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_utils&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_utils&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_utils&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_utils&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=graphql-markdown_core&pullRequest=2000) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [76.5% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_core&pullRequest=2000&metric=new_coverage&view=list) (required ≥ 80%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_core&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_logger&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_logger&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_logger&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_logger&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=graphql-markdown_docusaurus&pullRequest=2000) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_docusaurus&pullRequest=2000&metric=new_coverage&view=list) (required ≥ 80%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_docusaurus&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_diff&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_diff&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_diff&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_diff&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_core&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [1 New issue](https://sonarcloud.io/project/issues?id=graphql-markdown_core&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_core&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_core&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [82.4% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_core&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_core&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_core&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_utils&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_utils&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_utils&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_utils&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_utils&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_helpers&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_helpers&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_helpers&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_helpers&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_printer-legacy&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [1 Accepted issue](https://sonarcloud.io/project/issues?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [90.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_printer-legacy&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_printer-legacy&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_printer-legacy&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_logger&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_logger&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_logger&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_logger&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_logger&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_graphql&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_graphql&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_graphql&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_printer-legacy&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [1 Accepted issue](https://sonarcloud.io/project/issues?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_printer-legacy&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [90.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_printer-legacy&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_printer-legacy&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_printer-legacy&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_helpers&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_helpers&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_helpers&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_helpers&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_helpers&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=graphql-markdown_diff&pullRequest=2000) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=graphql-markdown_diff&pullRequest=2000&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_diff&pullRequest=2000&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_diff&pullRequest=2000&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_diff&pullRequest=2000)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=graphql-markdown_docusaurus&pullRequest=2000) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=graphql-markdown_docusaurus&pullRequest=2000&metric=new_coverage&view=list) (required ≥ 80%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=graphql-markdown_docusaurus&pullRequest=2000)



Patch:
diff --git a/.knip.json b/.knip.json
index e6202660..62c76b18 100644
--- a/.knip.json
+++ b/.knip.json
@@ -29,6 +29,11 @@
       "entry": ["src/main.ts!"],
       "project": ["**/*.ts!"],
       "ignore": ["**/__mocks__/**/*.ts"]
+    },
+    "packages/docusaurus": {
+      "entry": ["src/index.ts!", "src/mdx/index.ts!"],
+      "project": ["**/*.ts!"],
+      "ignore": ["**/__mocks__/**/*.ts"]
     }
   },
   "rules": {
diff --git a/.vscode/settings.json b/.vscode/settings.json
index cb451cd5..b04ad1d3 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -67,6 +67,7 @@
     "Repulsorcraft",
     "Snyk",
     "socio",
+    "specifiedby",
     "spectaql",
     "Starfighter",
     "Starships",
diff --git a/package-lock.json b/package-lock.json
index 5ce635d6..8cea4c35 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15042,6 +15042,7 @@
       "license": "MIT",
       "dependencies": {
         "@graphql-markdown/graphql": "^1.1.5",
+        "@graphql-markdown/logger": "^1.0.5",
         "@graphql-markdown/utils": "^1.7.1"
       },
       "devDependencies": {
diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts
index 83636a60..abb3585e 100644
--- a/packages/cli/src/cli.ts
+++ b/packages/cli/src/cli.ts
@@ -1,6 +1,7 @@
 import type {
   CliOptions,
   GraphQLMarkdownCliOptions,
+  PackageName,
 } from "@graphql-markdown/types";
 
 import type { CommanderStatic } from "commander";
@@ -19,17 +20,22 @@ export const runGraphQLMarkdown = async (
   options: GraphQLMarkdownCliOptions,
   cliOptions: CliOptions,
   loggerModule?: string,
+  mdxParser?: PackageName,
 ): Promise<void> => {
   const config = await buildConfig(options, cliOptions, options.id);
-  await generateDocFromSchema({
-    ...config,
-    loggerModule,
-  });
+  await generateDocFromSchema(
+    {
+      ...config,
+      loggerModule,
+    },
+    mdxParser,
+  );
 };
 
 export const getGraphQLMarkdownCli = (
   options: GraphQLMarkdownCliOptions,
   loggerModule?: string,
+  mdxParser?: PackageName | string,
 ): GraphQLMarkdownCliType => {
   void Logger(loggerModule);
 
@@ -78,6 +84,11 @@ export const getGraphQLMarkdownCli = (
     )
     .option("--pretty", "Prettify generated files")
     .action(async (cliOptions: CliOptions) => {
-      await runGraphQLMarkdown(options, cliOptions, loggerModule);
+      await runGraphQLMarkdown(
+        options,
+        cliOptions,
+        loggerModule,
+        mdxParser as PackageName,
+      );
     }) as GraphQLMarkdownCliType;
 };
diff --git a/packages/core/src/generator.ts b/packages/core/src/generator.ts
index 665a8db9..86416d05 100644
--- a/packages/core/src/generator.ts
+++ b/packages/core/src/generator.ts
@@ -4,6 +4,7 @@ import type {
   GeneratorOptions,
   GraphQLDirective,
   Maybe,
+  PackageName,
   SchemaEntity,
   TypeHierarchyObjectType,
 } from "@graphql-markdown/types";
@@ -29,29 +30,34 @@ import { getRenderer } from "./renderer";
 const NS_PER_SEC = 1e9 as const;
 const SEC_DECIMALS = 3 as const;
 
-export const generateDocFromSchema = async ({
-  baseURL,
-  customDirective,
-  diffMethod,
-  docOptions,
-  force,
-  groupByDirective,
-  homepageLocation,
-  linkRoot,
-  loaders: loadersList,
-  loggerModule,
-  metatags,
-  onlyDocDirective,
-  outputDir,
-  prettify,
-  printer: printerModule,
-  printTypeOptions,
-  schemaLocation,
-  skipDocDirective,
-  tmpDir,
-}: GeneratorOptions): Promise<void> => {
+export const generateDocFromSchema = async (
+  {
+    baseURL,
+    customDirective,
+    diffMethod,
+    docOptions,
+    force,
+    groupByDirective,
+    homepageLocation,
+    linkRoot,
+    loaders: loadersList,
+    loggerModule,
+    metatags,
+    onlyDocDirective,
+    outputDir,
+    prettify,
+    printer: printerModule,
+    printTypeOptions,
+    schemaLocation,
+    skipDocDirective,
+    tmpDir,
+  }: GeneratorOptions,
+  mdxParser?: PackageName,
+): Promise<void> => {
   const start = process.hrtime.bigint();
 
+  const hasMDXSupport = mdxParser ? true : false;
+
   await Logger(loggerModule);
 
   const loaders = await getDocumentLoaders(loadersList);
@@ -117,6 +123,7 @@ export const generateDocFromSchema = async ({
       printTypeOptions,
       skipDocDirectives,
     },
+    mdxParser,
   );
   const renderer = await getRenderer(
     printer,
@@ -130,6 +137,7 @@ export const generateDocFromSchema = async ({
       force,
       hierarchy: printTypeOptions?.hierarchy as TypeHierarchyObjectType,
     },
+    hasMDXSupport,
   );
 
   const pages = await Promise.all(
diff --git a/packages/core/src/printer.ts b/packages/core/src/printer.ts
index 6b35d5c2..54733ed8 100644
--- a/packages/core/src/printer.ts
+++ b/packages/core/src/printer.ts
@@ -11,6 +11,7 @@ export const getPrinter = async (
   printerModule?: Maybe<PackageName>,
   config?: Maybe<PrinterConfig>,
   options?: Maybe<PrinterOptions>,
+  mdxParser?: PackageName,
 ): Promise<Printer> => {
   if (typeof printerModule !== "string") {
     throw new Error("Invalid printer module name.");
@@ -26,7 +27,7 @@ export const getPrinter = async (
     );
 
     const { schema, baseURL, linkRoot } = config;
-    Printer.init(schema, baseURL, linkRoot, { ...options });
+    await Printer.init(schema, baseURL, linkRoot, { ...options }, mdxParser);
 
     return Printer;
   } catch {
diff --git a/packages/core/src/renderer.ts b/packages/core/src/renderer.ts
index 10984105..24dfae37 100644
--- a/packages/core/src/renderer.ts
+++ b/packages/core/src/renderer.ts
@@ -68,6 +68,7 @@ export class Renderer {
   baseURL: string;
   prettify: boolean;
   options: Maybe<RendererDocOptions>;
+  hasMDXSupport: boolean;
 
   private readonly printer: Printer;
 
@@ -78,6 +79,7 @@ export class Renderer {
     group: Maybe<SchemaEntitiesGroupMap>,
     prettify: boolean,
     docOptions: Maybe<RendererDocOptions>,
+    mdx: boolean = false,
   ) {
     this.printer = printer;
     this.group = group;
@@ -85,6 +87,7 @@ export class Renderer {
     this.baseURL = baseURL;
     this.prettify = prettify;
     this.options = docOptions;
+    this.hasMDXSupport = mdx;
   }
 
   async generateCategoryMetafile(
@@ -217,11 +220,12 @@ export class Renderer {
     type: unknown,
   ): Promise<Maybe<Category>> {
     const PageRegex =
-      /(?<category>[A-Za-z0-9-]+)[\\/]+(?<pageId>[A-Za-z0-9-]+).mdx$/;
-    const PageRegexFlat = /(?<pageId>[A-Za-z0-9-]+).mdx$/;
+      /(?<category>[A-Za-z0-9-]+)[\\/]+(?<pageId>[A-Za-z0-9-]+).mdx?$/;
+    const PageRegexFlat = /(?<pageId>[A-Za-z0-9-]+).mdx?$/;
 
+    const extension = this.hasMDXSupport ? "mdx" : "md";
     const fileName = slugify(name);
-    const filePath = join(normalize(dirPath), `${fileName}.mdx`);
+    const filePath = join(normalize(dirPath), `${fileName}.${extension}`);
 
     let content: MDXString;
     try {
@@ -292,7 +296,16 @@ export const getRenderer = async (
   group: Maybe<SchemaEntitiesGroupMap>,
   prettify: boolean,
   docOptions: Maybe<RendererDocOptions>,
+  mdx: boolean = false,
 ): Promise<InstanceType<typeof Renderer>> => {
   await ensureDir(outputDir, { forceEmpty: docOptions?.force });
-  return new Renderer(printer, outputDir, baseURL, group, prettify, docOptions);
+  return new Renderer(
+    printer,
+    outputDir,
+    baseURL,
+    group,
+    prettify,
+    docOptions,
+    mdx,
+  );
 };
diff --git a/packages/docusaurus/package.json b/packages/docusaurus/package.json
index 9191a296..9539e966 100644
--- a/packages/docusaurus/package.json
+++ b/packages/docusaurus/package.json
@@ -41,6 +41,20 @@
         "default": "./dist/index.js"
       }
     },
+    "./mdx": {
+      "require": {
+        "types": "./dist/mdx/index.d.ts",
+        "default": "./dist/mdx/index.js"
+      },
+      "import": {
+        "types": "./dist/mdx/index.d.ts",
+        "default": "./dist/mdx/index.js"
+      },
+      "default": {
+        "types": "./dist/mdx/index.d.ts",
+        "default": "./dist/mdx/index.js"
+      }
+    },
     "./package.json": "./package.json"
   },
   "scripts": {
diff --git a/packages/docusaurus/src/index.ts b/packages/docusaurus/src/index.ts
index 21f63cca..d45a69b2 100644
--- a/packages/docusaurus/src/index.ts
+++ b/packages/docusaurus/src/index.ts
@@ -12,6 +12,7 @@ import Logger from "@graphql-markdown/logger";
 
 const NAME = "docusaurus-graphql-doc-generator" as const;
 const LOGGER_MODULE = "@docusaurus/logger" as const;
+const MDX_PACKAGE = "@graphql-markdown/docusaurus/mdx" as const;
 
 export default async function pluginGraphQLDocGenerator(
   _: LoadContext,
@@ -40,6 +41,7 @@ export default async function pluginGraphQLDocGenerator(
             },
           },
           LOGGER_MODULE,
+          MDX_PACKAGE,
         ),
       );
     },
diff --git a/packages/printer-legacy/src/const/mdx.ts b/packages/docusaurus/src/mdx/components.ts
similarity index 96%
rename from packages/printer-legacy/src/const/mdx.ts
rename to packages/docusaurus/src/mdx/components.ts
index 33a52b78..584dba8d 100644
--- a/packages/printer-legacy/src/const/mdx.ts
+++ b/packages/docusaurus/src/mdx/components.ts
@@ -1,6 +1,6 @@
 import type { MDXString } from "@graphql-markdown/types";
 
-export const mdx: MDXString = `
+export const mdxDeclaration: MDXString = `
 export const Bullet = () => <><span style={{ fontWeight: 'normal', fontSize: '.5em', color: 'var(--ifm-color-secondary-darkest)' }}>&nbsp;●&nbsp;</span></>
 
 export const SpecifiedBy = (props) => <>Specification<a className="link" style={{ fontSize:'1.5em', paddingLeft:'4px' }} target="_blank" href={props.url} title={'Specified by ' + props.url}>⎘</a></>
diff --git a/packages/docusaurus/src/mdx/index.ts b/packages/docusaurus/src/mdx/index.ts
new file mode 100644
index 00000000..7625a3c2
--- /dev/null
+++ b/packages/docusaurus/src/mdx/index.ts
@@ -0,0 +1,54 @@
+import type {
+  AdmonitionType,
+  Badge,
+  Maybe,
+  MDXString,
+  MetaOptions,
+} from "@graphql-markdown/types";
+
+const MARKDOWN_EOL = "\n" as const;
+const MARKDOWN_EOP = `${MARKDOWN_EOL.repeat(2)}` as const;
+
+export { mdxDeclaration } from "./components";
+
+export const formatMDXBadge = ({ text, classname }: Badge): MDXString => {
+  return `<Badge class="badge ${classname}" text="${text as string}"/>` as MDXString;
+};
+
+export const formatMDXAdmonition = (
+  { text, title, type }: AdmonitionType,
+  meta: Maybe<MetaOptions>,
+): MDXString => {
+  const isDocusaurus = meta?.generatorFrameworkName === "docusaurus";
+  if (isDocusaurus && meta.generatorFrameworkVersion?.startsWith("2")) {
+    const oldType = type === "warning" ? "caution" : type;
+    return `${MARKDOWN_EOP}:::${oldType} ${title}${text}:::` as MDXString;
+  }
+  return `${MARKDOWN_EOP}:::${type}[${title}]${text}:::` as MDXString;
+};
+
+export const formatMDXBullet = (text: string = ""): MDXString => {
+  return `<Bullet />${text}` as MDXString;
+};
+
+export const formatMDXDetails = ({
+  dataOpen,
+  dataClose,
+}: {
+  dataOpen: Maybe<string>;
+  dataClose: Maybe<string>;
+}): MDXString => {
+  return `${MARKDOWN_EOP}<Details dataOpen={${"Hide " + dataOpen}} dataClose={${"Show " + dataClose}}>${MARKDOWN_EOP}\r${MARKDOWN_EOP}</Details>${MARKDOWN_EOP}` as MDXString;
+};
+
+export const formatMDXSpecifiedByLink = (url: string): MDXString => {
+  return `<SpecifiedBy url="${url}"/>` as MDXString;
+};
+
+export const formatMDXNameEntity = (
+  name: string,
+  parentType?: Maybe<string>,
+): MDXString => {
+  const parentName = parentType ? `${parentType}.` : "";
+  return `<code style={{ fontWeight: 'normal' }}>${parentName}<b>${name}</b></code>` as MDXString;
+};
diff --git a/packages/printer-legacy/package.json b/packages/printer-legacy/package.json
index d8f7aa10..f385e75c 100644
--- a/packages/printer-legacy/package.json
+++ b/packages/printer-legacy/package.json
@@ -57,6 +57,7 @@
   },
   "dependencies": {
     "@graphql-markdown/graphql": "^1.1.5",
+    "@graphql-markdown/logger": "^1.0.5",
     "@graphql-markdown/utils": "^1.7.1"
   },
   "devDependencies": {
diff --git a/packages/printer-legacy/src/badge.ts b/packages/printer-legacy/src/badge.ts
index ce7e8066..7b4be4df 100644
--- a/packages/printer-legacy/src/badge.ts
+++ b/packages/printer-legacy/src/badge.ts
@@ -70,10 +70,13 @@ export const getTypeBadges = (
   return badges;
 };
 
-export const printBadge = ({ text, classname }: Badge): MDXString => {
-  const textString = typeof text === "object" ? text.singular : text.toString();
+export const printBadge = (
+  { text, classname }: Badge,
+  options: PrintTypeOptions,
+): MDXString => {
+  const textString = typeof text === "object" ? text.singular : text;
   const formattedText = escapeMDX(textString);
-  return `<Badge class="badge ${classname}" text="${formattedText}"/>` as MDXString;
+  return options.formatMDXBadge!({ text: formattedText, classname });
 };
 
 export const printBadges = (
@@ -96,7 +99,7 @@ export const printBadges = (
 
   return badges
     .map((badge): MDXString => {
-      return printBadge(badge);
+      return printBadge(badge, options);
     })
     .join(" ") as MDXString;
 };
diff --git a/packages/printer-legacy/src/common.ts b/packages/printer-legacy/src/common.ts
index 2c8d7d1b..dcab550f 100644
--- a/packages/printer-legacy/src/common.ts
+++ b/packages/printer-legacy/src/common.ts
@@ -10,9 +10,8 @@ import { isEmpty, escapeMDX } from "@graphql-markdown/utils";
 
 import { isDeprecated, getConstDirectiveMap } from "@graphql-markdown/graphql";
 
-import { getCustomDirectiveResolver } from "./directive";
-
 import { DEPRECATED, MARKDOWN_EOP, NO_DESCRIPTION_TEXT } from "./const/strings";
+import { getCustomDirectiveResolver } from "./directive";
 
 export const printCustomDirectives = (
   type: unknown,
@@ -63,28 +62,23 @@ export const formatDescription = (
 };
 
 export const printWarning = (
-  text?: string,
-  title?: string,
-  options?: PrintTypeOptions,
+  { text, title }: { text?: string; title?: string },
+  options: PrintTypeOptions,
 ): string => {
   const formattedText =
     typeof text !== "string" || text.trim() === ""
       ? MARKDOWN_EOP
       : `${MARKDOWN_EOP}${text}${MARKDOWN_EOP}`;
 
-  const isDocusaurus = options?.meta?.generatorFrameworkName === "docusaurus";
-  if (
-    isDocusaurus &&
-    options.meta?.generatorFrameworkVersion?.startsWith("2")
-  ) {
-    return `${MARKDOWN_EOP}:::caution ${title}${formattedText}:::`;
-  }
-  return `${MARKDOWN_EOP}:::warning[${title}]${formattedText}:::`;
+  return options.formatMDXAdmonition!(
+    { text: formattedText, type: "warning", icon: "⚠️", title },
+    options.meta,
+  );
 };
 
 export const printDeprecation = (
   type: unknown,
-  options?: PrintTypeOptions,
+  options: PrintTypeOptions,
 ): string => {
   if (typeof type !== "object" || type === null || !isDeprecated(type)) {
     return "";
@@ -95,12 +89,15 @@ export const printDeprecation = (
       ? escapeMDX(type.deprecationReason)
       : "";
 
-  return printWarning(reason, DEPRECATED.toUpperCase(), options);
+  return printWarning(
+    { text: reason, title: DEPRECATED.toUpperCase() },
+    options,
+  );
 };
 
 export const printDescription = (
   type: unknown,
-  options?: PrintTypeOptions,
+  options: PrintTypeOptions,
   noText?: string,
 ): MDXString | string => {
   const description = formatDescription(type, noText);
diff --git a/packages/printer-legacy/src/const/options.ts b/packages/printer-legacy/src/const/options.ts
index d4141906..c20496c3 100644
--- a/packages/printer-legacy/src/const/options.ts
+++ b/packages/printer-legacy/src/const/options.ts
@@ -10,6 +10,8 @@ import type {
   SectionLevelValue,
 } from "@graphql-markdown/types";
 
+import MDXModule from "../mdx";
+
 export enum TypeHierarchy {
   API = "api",
   ENTITY = "entity",
@@ -38,6 +40,7 @@ export const PRINT_TYPE_DEFAULT_OPTIONS: Required<PrinterConfigPrintTypeOptions>
 export const DEFAULT_OPTIONS: Required<
   Omit<
     PrintTypeOptions,
+    // | keyof MDXSupportType
     | "collapsible"
     | "groups"
     | "level"
@@ -51,6 +54,7 @@ export const DEFAULT_OPTIONS: Required<
   collapsible: Maybe<CollapsibleOption>;
   groups: Maybe<SchemaEntitiesGroupMap>;
   level: Maybe<SectionLevelValue>;
+  mdxSupport: boolean;
   onlyDocDirectives: GraphQLDirective[];
   parentType: Maybe<string>;
   schema: Maybe<GraphQLSchema>;
@@ -69,4 +73,5 @@ export const DEFAULT_OPTIONS: Required<
   schema: undefined,
   skipDocDirectives: [] as const,
   withAttributes: false as const,
+  ...MDXModule,
 };
diff --git a/packages/printer-legacy/src/const/strings.ts b/packages/printer-legacy/src/const/strings.ts
index af0fe87e..0a52a344 100644
--- a/packages/printer-legacy/src/const/strings.ts
+++ b/packages/printer-legacy/src/const/strings.ts
@@ -29,8 +29,3 @@ export const MARKDOWN_EOC =
   `${MARKDOWN_EOL}${MARKDOWN_CODE_SNIPPET}${MARKDOWN_EOL}` as const;
 export const MARKDOWN_SOC =
   `${MARKDOWN_EOL}${MARKDOWN_CODE_SNIPPET}${GRAPHQL}${MARKDOWN_EOL}` as const;
-
-export const HIDE_DEPRECATED =
-  `<><span className="${DEPRECATED}">Hide ${DEPRECATED}</span></>` as const;
-export const SHOW_DEPRECATED =
-  `<><span className="${DEPRECATED}">Show ${DEPRECATED}</span></>` as const;
diff --git a/packages/printer-legacy/src/directive.ts b/packages/printer-legacy/src/directive.ts
index 81104dac..59172e7e 100644
--- a/packages/printer-legacy/src/directive.ts
+++ b/packages/printer-legacy/src/directive.ts
@@ -124,7 +124,7 @@ export const printCustomTags = (
 
   return badges
     .map((badge): MDXString => {
-      return printBadge(badge);
+      return printBadge(badge, options);
     })
     .join(" ") as MDXString;
 };
diff --git a/packages/printer-legacy/src/graphql/scalar.ts b/packages/printer-legacy/src/graphql/scalar.ts
index c7ff4ab6..05771080 100644
--- a/packages/printer-legacy/src/graphql/scalar.ts
+++ b/packages/printer-legacy/src/graphql/scalar.ts
@@ -5,7 +5,10 @@ import { getTypeName } from "@graphql-markdown/graphql";
 import { MARKDOWN_EOP } from "../const/strings";
 import { SectionLevels } from "../const/options";
 
-export const printSpecification = (type: unknown): MDXString | string => {
+export const printSpecification = (
+  type: unknown,
+  options: PrintTypeOptions,
+): MDXString | string => {
   if (
     typeof type !== "object" ||
     type === null ||
@@ -18,14 +21,14 @@ export const printSpecification = (type: unknown): MDXString | string => {
   const url = type.specifiedByURL;
 
   // Needs newline between "export const specifiedByLinkCss" and markdown header to prevent compilation error in docusaurus
-  return `${SectionLevels.LEVEL_3} <SpecifiedBy url="${url}"/>${MARKDOWN_EOP}` as MDXString;
+  return `${SectionLevels.LEVEL_3} ${options.formatMDXSpecifiedByLink!(url)}${MARKDOWN_EOP}` as MDXString;
 };
 
 export const printScalarMetadata = (
   type: unknown,
-  options?: PrintTypeOptions, // eslint-disable-line @typescript-eslint/no-unused-vars
+  options: PrintTypeOptions,
 ): MDXString | string => {
-  return printSpecification(type);
+  return printSpecification(type, options);
 };
 
 export const printCodeScalar = (
diff --git a/packages/printer-legacy/src/link.ts b/packages/printer-legacy/src/link.ts
index 856e18ff..99c25327 100644
--- a/packages/printer-legacy/src/link.ts
+++ b/packages/printer-legacy/src/link.ts
@@ -285,15 +285,16 @@ export const printLink = (type: unknown, options: PrintLinkOptions): string => {
   );
 
   if (typeof options !== "undefined" && !hasOptionWithAttributes(options)) {
-    const textWithAttribute = hasOptionParentType(options)
-      ? `<code style={{ fontWeight: 'normal' }}>${options.parentType}.<b>${link.text}</b></code>`
-      : `\`${link.text}\``;
+    const textWithAttribute = options.formatMDXNameEntity!(
+      link.text,
+      options.parentType,
+    );
     return `[${textWithAttribute}](${link.url})`;
   }
 
   const text = printLinkAttributes(type, link.text);
 
-  return `[\`${text}\`](${link.url})`;
+  return `[${options.formatMDXNameEntity!(text)}](${link.url})`;
 };
 
 export const printParentLink = (
@@ -304,8 +305,10 @@ export const printParentLink = (
     return "";
   }
 
-  return `<Bullet />${printLink(type.type, {
-    ...options,
-    withAttributes: true,
-  })}` as MDXString;
+  return options.formatMDXBullet!(
+    printLink(type.type, {
+      ...options,
+      withAttributes: true,
+    }),
+  );
 };
diff --git a/packages/printer-legacy/src/mdx/index.ts b/packages/printer-legacy/src/mdx/index.ts
new file mode 100644
index 00000000..4ffd1fd3
--- /dev/null
+++ b/packages/printer-legacy/src/mdx/index.ts
@@ -0,0 +1,97 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+import type {
+  AdmonitionType,
+  Badge,
+  Maybe,
+  MDXString,
+  MDXSupportType,
+  MetaOptions,
+  PackageName,
+} from "@graphql-markdown/types";
+
+import { MARKDOWN_EOL, MARKDOWN_EOP } from "../const/strings";
+
+import { log, LogLevel } from "@graphql-markdown/logger";
+
+const formatMDXBadge = ({ text, classname }: Badge): MDXString => {
+  return `<mark class="gqlmd-mdx-badge">${text as string}</mark>` as MDXString;
+};
+
+const formatMDXAdmonition = (
+  { text, title, type, icon }: AdmonitionType,
+  meta: Maybe<MetaOptions>,
+): MDXString => {
+  return `${MARKDOWN_EOP}<fieldset class="gqlmd-mdx-admonition-fieldset">${MARKDOWN_EOL}<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-${type.toLocaleLowerCase()}">${icon ?? type.toUpperCase()}</span> **${title}**</legend>${MARKDOWN_EOL}<span>${text}</span>${MARKDOWN_EOL}</fieldset>` as MDXString;
+};
+
+const formatMDXBullet = (text: string = ""): MDXString => {
+  return `<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>${text}` as MDXString;
+};
+
+const formatMDXDetails = ({
+  dataOpen,
+}: {
+  dataOpen: Maybe<string>;
+  dataClose: Maybe<string>;
+}): MDXString => {
+  return `${MARKDOWN_EOP}<details class="gqlmd-mdx-details">${MARKDOWN_EOL}<summary class="gqlmd-mdx-details-summary"><span className="gqlmd-mdx-details-summary-open">${dataOpen?.toUpperCase()}</span></summary>${MARKDOWN_EOP}\r${MARKDOWN_EOP}</details>${MARKDOWN_EOP}` as MDXString;
+};
+
+const formatMDXSpecifiedByLink = (url: string): MDXString => {
+  return `<span class="gqlmd-mdx-specifiedby">Specification<a class="gqlmd-mdx-specifiedby-link" target="_blank" href="${url}" title="Specified by ${url}">⎘</a></span>` as MDXString;
+};
+
+const formatMDXNameEntity = (
+  name: string,
+  parentType?: Maybe<string>,
+): MDXString => {
+  const parentName = parentType
+    ? `<code class="gqlmd-mdx-entity-parent">${parentType}.</code>`
+    : "";
+  return `<span class="gqlmd-mdx-entity">${parentName}<code class="gqlmd-mdx-entity-name">${name}</code></span>` as MDXString;
+};
+
+export const mdxDeclaration = "";
+
+const defaultModule = {
+  formatMDXAdmonition,
+  formatMDXBadge,
+  formatMDXBullet,
+  formatMDXDetails,
+  formatMDXNameEntity,
+  formatMDXSpecifiedByLink,
+  mdxDeclaration,
+  mdxSupport: false,
+} as MDXSupportType;
+
+export const mdxModule = async (
+  mdxPackage?: Maybe<PackageName>,
+): Promise<Readonly<MDXSupportType>> => {
+  if (!mdxPackage) {
+    return defaultModule;
+  }
+  return import(mdxPackage)
+    .then((_module: Record<string, unknown>) => {
+      const module = (_module.default ?? _module) as Record<string, unknown>;
+      return {
+        formatMDXAdmonition: module.formatMDXAdmonition ?? formatMDXAdmonition,
+        formatMDXBadge: module.formatMDXBadge ?? formatMDXBadge,
+        formatMDXBullet: module.formatMDXBullet ?? formatMDXBullet,
+        formatMDXDetails: module.formatMDXDetails ?? formatMDXDetails,
+        formatMDXNameEntity: module.formatMDXNameEntity ?? formatMDXNameEntity,
+        formatMDXSpecifiedByLink:
+          module.formatMDXSpecifiedByLink ?? formatMDXSpecifiedByLink,
+        mdxDeclaration: module.mdxDeclaration ?? mdxDeclaration,
+        mdxSupport: true,
+      } as MDXSupportType;
+    })
+    .catch(() => {
+      log(
+        `An error occurred while loading MDX formatter "${mdxPackage}"`,
+        LogLevel.warn,
+      );
+      return defaultModule;
+    });
+};
+
+export default defaultModule;
diff --git a/packages/printer-legacy/src/printer.ts b/packages/printer-legacy/src/printer.ts
index e6e3e405..50a934c2 100644
--- a/packages/printer-legacy/src/printer.ts
+++ b/packages/printer-legacy/src/printer.ts
@@ -5,8 +5,10 @@ import type {
   GraphQLSchema,
   IPrinter,
   MDXString,
+  MDXSupportType,
   Maybe,
   MetaOptions,
+  PackageName,
   PrintTypeOptions,
   PrinterConfigPrintTypeOptions,
   SchemaEntitiesGroupMap,
@@ -56,7 +58,7 @@ import {
   MARKDOWN_EOP,
   MARKDOWN_SOC,
 } from "./const/strings";
-import { mdx } from "./const/mdx";
+import { mdxModule } from "./mdx";
 import {
   DEFAULT_OPTIONS,
   PRINT_TYPE_DEFAULT_OPTIONS,
@@ -73,7 +75,9 @@ export class Printer implements IPrinter {
 
   static readonly printCustomTags = printCustomTags;
 
-  static init(
+  static printMDXModule: Readonly<MDXSupportType>;
+
+  static async init(
     schema: Maybe<GraphQLSchema>,
     baseURL: Maybe<string> = "schema",
     linkRoot: Maybe<string> = "/",
@@ -98,7 +102,8 @@ export class Printer implements IPrinter {
       customDirectives: undefined,
       groups: undefined,
     },
-  ): void {
+    mdxParser?: PackageName,
+  ): Promise<void> {
     if (typeof Printer.options !== "undefined") {
       return;
     }
@@ -131,6 +136,8 @@ export class Printer implements IPrinter {
         printTypeOptions?.hierarchy ?? PRINT_TYPE_DEFAULT_OPTIONS.hierarchy,
       meta: meta,
     };
+
+    Printer.printMDXModule = await mdxModule(mdxParser);
   }
 
   static readonly printHeader = (
@@ -138,6 +145,10 @@ export class Printer implements IPrinter {
     title: string,
     options: PrintTypeOptions,
   ): string => {
+    if (!options.mdxSupport) {
+      return "";
+    }
+
     const fmOptions = options.frontMatter ?? DEFAULT_OPTIONS.frontMatter;
 
     return printFrontMatter(id, title, fmOptions);
@@ -276,6 +287,7 @@ export class Printer implements IPrinter {
       ...DEFAULT_OPTIONS,
       ...Printer.options,
       ...options,
+      ...Printer.printMDXModule,
     };
 
     if (!name || !hasPrintableDirective(type, printTypeOptions)) {
@@ -302,7 +314,7 @@ export class Printer implements IPrinter {
     return [
       header,
       metatags,
-      mdx,
+      Printer.printMDXModule.mdxDeclaration,
       tags,
       description,
       code,
diff --git a/packages/printer-legacy/src/relation.ts b/packages/printer-legacy/src/relation.ts
index ec410c5f..3f14a50e 100644
--- a/packages/printer-legacy/src/relation.ts
+++ b/packages/printer-legacy/src/relation.ts
@@ -63,10 +63,13 @@ export const printRelationOf = <T>(
     }
 
     const category = getRootTypeLocaleFromString(relation)!;
-    const badge = printBadge({
-      text: category,
-      classname: DEFAULT_CSS_CLASSNAME,
-    });
+    const badge = printBadge(
+      {
+        text: category,
+        classname: DEFAULT_CSS_CLASSNAME,
+      },
+      options,
+    );
     data = data.concat(
       types.map((t: unknown): string => {
         const link = getRelationLink(category, t, options);
@@ -83,7 +86,7 @@ export const printRelationOf = <T>(
     .sort((a, b) => {
       return a.localeCompare(b);
     })
-    .join("<Bullet />") as MDXString;
+    .join(options.formatMDXBullet!()) as MDXString;
 
   return `${SectionLevels.LEVEL_3} ${section}${MARKDOWN_EOP}${content}${MARKDOWN_EOP}` as MDXString;
 };
diff --git a/packages/printer-legacy/src/section.ts b/packages/printer-legacy/src/section.ts
index 99759e00..8c39fc86 100644
--- a/packages/printer-legacy/src/section.ts
+++ b/packages/printer-legacy/src/section.ts
@@ -13,12 +13,7 @@ import { printBadges } from "./badge";
 import { hasPrintableDirective, printLink, printParentLink } from "./link";
 import { printCustomTags } from "./directive";
 
-import {
-  HIDE_DEPRECATED,
-  MARKDOWN_EOL,
-  MARKDOWN_EOP,
-  SHOW_DEPRECATED,
-} from "./const/strings";
+import { DEPRECATED, MARKDOWN_EOL, MARKDOWN_EOP } from "./const/strings";
 import { SectionLevels } from "./const/options";
 
 export const sectionLevels: SectionLevel[] = [
@@ -119,10 +114,7 @@ export const printSection = <V>(
       typeof options.collapsible?.dataOpen === "string" &&
       typeof options.collapsible.dataClose === "string"
     ) {
-      return [
-        `${MARKDOWN_EOP}<Details dataOpen={${options.collapsible.dataOpen}} dataClose={${options.collapsible.dataClose}}>${MARKDOWN_EOP}` as MDXString,
-        `${MARKDOWN_EOP}</Details>${MARKDOWN_EOP}` as MDXString,
-      ];
+      return options.formatMDXDetails!(options.collapsible).split(`\r`);
     }
     return [MARKDOWN_EOP, MARKDOWN_EOP];
   })();
@@ -181,8 +173,8 @@ export const printMetadataSection = <T, V>(
         parentType: type.name as string,
         level: SectionLevels.NONE as SectionLevelValue,
         collapsible: {
-          dataOpen: HIDE_DEPRECATED,
-          dataClose: SHOW_DEPRECATED,
+          dataOpen: DEPRECATED,
+          dataClose: DEPRECATED,
         },
       });
 
diff --git a/packages/printer-legacy/tsconfig.json b/packages/printer-legacy/tsconfig.json
index c4782d21..dc5be53d 100644
--- a/packages/printer-legacy/tsconfig.json
+++ b/packages/printer-legacy/tsconfig.json
@@ -13,5 +13,9 @@
     }
   },
 
-  "references": [{ "path": "../graphql" }, { "path": "../utils" }]
+  "references": [
+    { "path": "../graphql" },
+    { "path": "../logger" },
+    { "path": "../utils" }
+  ]
 }
diff --git a/packages/types/src/printer.d.ts b/packages/types/src/printer.d.ts
index 5b5dd1e0..93616729 100644
--- a/packages/types/src/printer.d.ts
+++ b/packages/types/src/printer.d.ts
@@ -13,6 +13,26 @@ import type {
 import type { CustomDirectiveMap } from "./helpers";
 import type { Maybe, MDXString } from "./utils";
 
+export interface MDXSupportType {
+  formatMDXAdmonition: (
+    { text, title, type, icon }: AdmonitionType,
+    meta: Maybe<MetaOptions>,
+  ) => MDXString;
+  formatMDXBadge: ({ text, classname }: Badge) => MDXString;
+  formatMDXBullet: (text?: string) => MDXString;
+  formatMDXDetails: ({
+    dataOpen,
+    dataClose,
+  }: {
+    dataOpen?: Maybe<string>;
+    dataClose?: Maybe<string>;
+  }) => MDXString;
+  formatMDXNameEntity: (name: string, parentType?: Maybe<string>) => MDXString;
+  formatMDXSpecifiedByLink: (url: string) => MDXString;
+  mdxDeclaration: string;
+  mdxSupport: boolean;
+}
+
 export type RootTypeName =
   | "DIRECTIVE"
   | "ENUM"
@@ -33,6 +53,13 @@ export interface MetaOptions {
   generatorFrameworkVersion?: Maybe<string>;
 }
 
+export interface AdmonitionType {
+  icon: Maybe<string>;
+  text: string;
+  title: Maybe<string>;
+  type: string;
+}
+
 export interface PrinterConfigPrintTypeOptions {
   codeSection?: boolean;
   deprecated?: TypeDeprecatedOption;
@@ -49,7 +76,7 @@ export interface CollapsibleOption {
   dataClose: string;
 }
 
-export interface PrintTypeOptions {
+export type PrintTypeOptions = Partial<MDXSupportType> & {
   basePath: string;
   codeSection?: Maybe<boolean>;
   collapsible?: Maybe<CollapsibleOption>;
@@ -70,7 +97,7 @@ export interface PrintTypeOptions {
   skipDocDirectives?: GraphQLDirective[];
   typeBadges?: boolean;
   withAttributes?: boolean;
-}
+};
 
 export type SectionLevelValue = string & {
   _opaque: typeof SECTION_LEVEL_VALUE;
@@ -109,12 +136,13 @@ export type PrintDirectiveOptions = Partial<PrintTypeOptions> &
  * @public
  */
 export abstract class IPrinter {
-  static init(
+  static async init(
     schema: Maybe<GraphQLSchema>,
     baseURL: string,
     linkRoot: string,
     options: Maybe<PrinterOptions>,
-  ): void;
+    mdxParser?: PackageName,
+  ): Promise<void>;
   static printHeader(
     id: string,
     title: string,


Test patch:
diff --git a/packages/core/tests/integration/__snapshots__/generator.spec.ts.snap b/packages/core/tests/integration/__snapshots__/generator.spec.ts.snap
index 5367f73a..c58b82a2 100644
--- a/packages/core/tests/integration/__snapshots__/generator.spec.ts.snap
+++ b/packages/core/tests/integration/__snapshots__/generator.spec.ts.snap
@@ -16,32 +16,32 @@ link: null
 collapsible: true
 collapsed: true
 ",
-  "operations/directives/include.mdx": "include",
-  "operations/directives/skip.mdx": "skip",
+  "operations/directives/include.md": "include",
+  "operations/directives/skip.md": "skip",
   "operations/mutations/_category_.yml": "label: Mutations
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "operations/mutations/add-course.mdx": "add-course",
-  "operations/mutations/drop-course.mdx": "drop-course",
-  "operations/mutations/update-gpa.mdx": "update-gpa",
-  "operations/mutations/update-grade.mdx": "update-grade",
+  "operations/mutations/add-course.md": "add-course",
+  "operations/mutations/drop-course.md": "drop-course",
+  "operations/mutations/update-gpa.md": "update-gpa",
+  "operations/mutations/update-grade.md": "update-grade",
   "operations/queries/_category_.yml": "label: Queries
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "operations/queries/all-courses.mdx": "all-courses",
-  "operations/queries/course.mdx": "course",
-  "operations/queries/gpa.mdx": "gpa",
-  "operations/queries/math-courses.mdx": "math-courses",
-  "operations/queries/science-courses.mdx": "science-courses",
-  "operations/queries/search-role.mdx": "search-role",
-  "operations/queries/un-weighted-gpa.mdx": "un-weighted-gpa",
-  "operations/queries/weighted-gpa.mdx": "weighted-gpa",
+  "operations/queries/all-courses.md": "all-courses",
+  "operations/queries/course.md": "course",
+  "operations/queries/gpa.md": "gpa",
+  "operations/queries/math-courses.md": "math-courses",
+  "operations/queries/science-courses.md": "science-courses",
+  "operations/queries/search-role.md": "search-role",
+  "operations/queries/un-weighted-gpa.md": "un-weighted-gpa",
+  "operations/queries/weighted-gpa.md": "weighted-gpa",
   "types/_category_.yml": "label: Types
 position: 1
 className: graphql-markdown-api-section
@@ -55,51 +55,51 @@ link: null
 collapsible: true
 collapsed: true
 ",
-  "types/directives/deprecated.mdx": "deprecated",
-  "types/directives/doc.mdx": "doc",
-  "types/directives/no-doc.mdx": "no-doc",
-  "types/directives/one-of.mdx": "one-of",
-  "types/directives/public.mdx": "public",
-  "types/directives/specified-by.mdx": "specified-by",
+  "types/directives/deprecated.md": "deprecated",
+  "types/directives/doc.md": "doc",
+  "types/directives/no-doc.md": "no-doc",
+  "types/directives/one-of.md": "one-of",
+  "types/directives/public.md": "public",
+  "types/directives/specified-by.md": "specified-by",
   "types/enums/_category_.yml": "label: Enums
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "types/enums/roles.mdx": "roles",
+  "types/enums/roles.md": "roles",
   "types/interfaces/_category_.yml": "label: Interfaces
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "types/interfaces/record.mdx": "record",
+  "types/interfaces/record.md": "record",
   "types/objects/_category_.yml": "label: Objects
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "types/objects/course.mdx": "course",
-  "types/objects/department-information.mdx": "department-information",
-  "types/objects/semester.mdx": "semester",
-  "types/objects/unused-type.mdx": "unused-type",
+  "types/objects/course.md": "course",
+  "types/objects/department-information.md": "department-information",
+  "types/objects/semester.md": "semester",
+  "types/objects/unused-type.md": "unused-type",
   "types/scalars/_category_.yml": "label: Scalars
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "types/scalars/boolean.mdx": "boolean",
-  "types/scalars/date.mdx": "date",
-  "types/scalars/email-address.mdx": "email-address",
-  "types/scalars/id.mdx": "id",
-  "types/scalars/int.mdx": "int",
-  "types/scalars/phone-number.mdx": "phone-number",
-  "types/scalars/string.mdx": "string",
-  "types/scalars/time.mdx": "time",
-  "types/scalars/url.mdx": "url",
+  "types/scalars/boolean.md": "boolean",
+  "types/scalars/date.md": "date",
+  "types/scalars/email-address.md": "email-address",
+  "types/scalars/id.md": "id",
+  "types/scalars/int.md": "int",
+  "types/scalars/phone-number.md": "phone-number",
+  "types/scalars/string.md": "string",
+  "types/scalars/time.md": "time",
+  "types/scalars/url.md": "url",
 }
 `;
 
@@ -107,41 +107,41 @@ exports[`renderer generateDocFromSchema() Markdown document structure from Graph
 
 exports[`renderer generateDocFromSchema() Markdown document structure from GraphQL schema is correct when using flat hierarchy 1`] = `
 {
-  "add-course.mdx": "add-course",
-  "all-courses.mdx": "all-courses",
-  "boolean.mdx": "boolean",
-  "course.mdx": "course",
-  "date.mdx": "date",
-  "department-information.mdx": "department-information",
-  "deprecated.mdx": "deprecated",
-  "doc.mdx": "doc",
-  "drop-course.mdx": "drop-course",
-  "email-address.mdx": "email-address",
+  "add-course.md": "add-course",
+  "all-courses.md": "all-courses",
+  "boolean.md": "boolean",
+  "course.md": "course",
+  "date.md": "date",
+  "department-information.md": "department-information",
+  "deprecated.md": "deprecated",
+  "doc.md": "doc",
+  "drop-course.md": "drop-course",
+  "email-address.md": "email-address",
   "generated.md": "Dummy homepage for tweet.graphql",
-  "gpa.mdx": "gpa",
-  "id.mdx": "id",
-  "include.mdx": "include",
-  "int.mdx": "int",
-  "math-courses.mdx": "math-courses",
-  "no-doc.mdx": "no-doc",
-  "one-of.mdx": "one-of",
-  "phone-number.mdx": "phone-number",
-  "public.mdx": "public",
-  "record.mdx": "record",
-  "roles.mdx": "roles",
-  "science-courses.mdx": "science-courses",
-  "search-role.mdx": "search-role",
-  "semester.mdx": "semester",
-  "skip.mdx": "skip",
-  "specified-by.mdx": "specified-by",
-  "string.mdx": "string",
-  "time.mdx": "time",
-  "un-weighted-gpa.mdx": "un-weighted-gpa",
-  "unused-type.mdx": "unused-type",
-  "update-gpa.mdx": "update-gpa",
-  "update-grade.mdx": "update-grade",
-  "url.mdx": "url",
-  "weighted-gpa.mdx": "weighted-gpa",
+  "gpa.md": "gpa",
+  "id.md": "id",
+  "include.md": "include",
+  "int.md": "int",
+  "math-courses.md": "math-courses",
+  "no-doc.md": "no-doc",
+  "one-of.md": "one-of",
+  "phone-number.md": "phone-number",
+  "public.md": "public",
+  "record.md": "record",
+  "roles.md": "roles",
+  "science-courses.md": "science-courses",
+  "search-role.md": "search-role",
+  "semester.md": "semester",
+  "skip.md": "skip",
+  "specified-by.md": "specified-by",
+  "string.md": "string",
+  "time.md": "time",
+  "un-weighted-gpa.md": "un-weighted-gpa",
+  "unused-type.md": "unused-type",
+  "update-gpa.md": "update-gpa",
+  "update-grade.md": "update-grade",
+  "url.md": "url",
+  "weighted-gpa.md": "weighted-gpa",
 }
 `;
 
@@ -161,18 +161,18 @@ link: null
 collapsible: true
 collapsed: true
 ",
-  "course/mutations/add-course.mdx": "add-course",
-  "course/mutations/drop-course.mdx": "drop-course",
+  "course/mutations/add-course.md": "add-course",
+  "course/mutations/drop-course.md": "drop-course",
   "course/queries/_category_.yml": "label: Queries
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "course/queries/all-courses.mdx": "all-courses",
-  "course/queries/course.mdx": "course",
-  "course/queries/math-courses.mdx": "math-courses",
-  "course/queries/science-courses.mdx": "science-courses",
+  "course/queries/all-courses.md": "all-courses",
+  "course/queries/course.md": "course",
+  "course/queries/math-courses.md": "math-courses",
+  "course/queries/science-courses.md": "science-courses",
   "generated.md": "Dummy homepage for tweet.graphql",
   "grade/_category_.yml": "label: Grade
 position: 1
@@ -186,17 +186,17 @@ link: null
 collapsible: true
 collapsed: true
 ",
-  "grade/mutations/update-gpa.mdx": "update-gpa",
-  "grade/mutations/update-grade.mdx": "update-grade",
+  "grade/mutations/update-gpa.md": "update-gpa",
+  "grade/mutations/update-grade.md": "update-grade",
   "grade/queries/_category_.yml": "label: Queries
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "grade/queries/gpa.mdx": "gpa",
-  "grade/queries/un-weighted-gpa.mdx": "un-weighted-gpa",
-  "grade/queries/weighted-gpa.mdx": "weighted-gpa",
+  "grade/queries/gpa.md": "gpa",
+  "grade/queries/un-weighted-gpa.md": "un-weighted-gpa",
+  "grade/queries/weighted-gpa.md": "weighted-gpa",
   "misc/_category_.yml": "label: Misc
 position: 1
 link: null
@@ -209,60 +209,60 @@ link: null
 collapsible: true
 collapsed: true
 ",
-  "misc/directives/deprecated.mdx": "deprecated",
-  "misc/directives/doc.mdx": "doc",
-  "misc/directives/include.mdx": "include",
-  "misc/directives/no-doc.mdx": "no-doc",
-  "misc/directives/one-of.mdx": "one-of",
-  "misc/directives/public.mdx": "public",
-  "misc/directives/skip.mdx": "skip",
-  "misc/directives/specified-by.mdx": "specified-by",
+  "misc/directives/deprecated.md": "deprecated",
+  "misc/directives/doc.md": "doc",
+  "misc/directives/include.md": "include",
+  "misc/directives/no-doc.md": "no-doc",
+  "misc/directives/one-of.md": "one-of",
+  "misc/directives/public.md": "public",
+  "misc/directives/skip.md": "skip",
+  "misc/directives/specified-by.md": "specified-by",
   "misc/enums/_category_.yml": "label: Enums
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "misc/enums/roles.mdx": "roles",
+  "misc/enums/roles.md": "roles",
   "misc/interfaces/_category_.yml": "label: Interfaces
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "misc/interfaces/record.mdx": "record",
+  "misc/interfaces/record.md": "record",
   "misc/objects/_category_.yml": "label: Objects
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "misc/objects/course.mdx": "course",
-  "misc/objects/department-information.mdx": "department-information",
-  "misc/objects/semester.mdx": "semester",
-  "misc/objects/unused-type.mdx": "unused-type",
+  "misc/objects/course.md": "course",
+  "misc/objects/department-information.md": "department-information",
+  "misc/objects/semester.md": "semester",
+  "misc/objects/unused-type.md": "unused-type",
   "misc/queries/_category_.yml": "label: Queries
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "misc/queries/search-role.mdx": "search-role",
+  "misc/queries/search-role.md": "search-role",
   "misc/scalars/_category_.yml": "label: Scalars
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "misc/scalars/boolean.mdx": "boolean",
-  "misc/scalars/date.mdx": "date",
-  "misc/scalars/email-address.mdx": "email-address",
-  "misc/scalars/id.mdx": "id",
-  "misc/scalars/int.mdx": "int",
-  "misc/scalars/phone-number.mdx": "phone-number",
-  "misc/scalars/string.mdx": "string",
-  "misc/scalars/time.mdx": "time",
-  "misc/scalars/url.mdx": "url",
+  "misc/scalars/boolean.md": "boolean",
+  "misc/scalars/date.md": "date",
+  "misc/scalars/email-address.md": "email-address",
+  "misc/scalars/id.md": "id",
+  "misc/scalars/int.md": "int",
+  "misc/scalars/phone-number.md": "phone-number",
+  "misc/scalars/string.md": "string",
+  "misc/scalars/time.md": "time",
+  "misc/scalars/url.md": "url",
 }
 `;
 
@@ -276,18 +276,18 @@ link: null
 collapsible: true
 collapsed: true
 ",
-  "directives/deprecated.mdx": "deprecated",
-  "directives/include.mdx": "include",
-  "directives/one-of.mdx": "one-of",
-  "directives/skip.mdx": "skip",
-  "directives/specified-by.mdx": "specified-by",
+  "directives/deprecated.md": "deprecated",
+  "directives/include.md": "include",
+  "directives/one-of.md": "one-of",
+  "directives/skip.md": "skip",
+  "directives/specified-by.md": "specified-by",
   "enums/_category_.yml": "label: Enums
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "enums/media-type.mdx": "media-type",
+  "enums/media-type.md": "media-type",
   "generated.md": "Dummy homepage for tweet.graphql",
   "inputs/_category_.yml": "label: Inputs
 position: 1
@@ -295,66 +295,66 @@ link: null
 collapsible: true
 collapsed: true
 ",
-  "inputs/tweet-content.mdx": "tweet-content",
+  "inputs/tweet-content.md": "tweet-content",
   "interfaces/_category_.yml": "label: Interfaces
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "interfaces/node.mdx": "node",
+  "interfaces/node.md": "node",
   "mutations/_category_.yml": "label: Mutations
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "mutations/create-tweet.mdx": "create-tweet",
-  "mutations/delete-tweet.mdx": "delete-tweet",
-  "mutations/mark-tweet-read.mdx": "mark-tweet-read",
+  "mutations/create-tweet.md": "create-tweet",
+  "mutations/delete-tweet.md": "delete-tweet",
+  "mutations/mark-tweet-read.md": "mark-tweet-read",
   "objects/_category_.yml": "label: Objects
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "objects/media.mdx": "media",
-  "objects/meta.mdx": "meta",
-  "objects/notification.mdx": "notification",
-  "objects/stat.mdx": "stat",
-  "objects/tweet.mdx": "tweet",
-  "objects/user.mdx": "user",
+  "objects/media.md": "media",
+  "objects/meta.md": "meta",
+  "objects/notification.md": "notification",
+  "objects/stat.md": "stat",
+  "objects/tweet.md": "tweet",
+  "objects/user.md": "user",
   "queries/_category_.yml": "label: Queries
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "queries/notifications-meta.mdx": "notifications-meta",
-  "queries/tweet.mdx": "tweet",
-  "queries/tweets-meta.mdx": "tweets-meta",
-  "queries/tweets.mdx": "tweets",
-  "queries/user.mdx": "user",
-  "queries/users.mdx": "users",
+  "queries/notifications-meta.md": "notifications-meta",
+  "queries/tweet.md": "tweet",
+  "queries/tweets-meta.md": "tweets-meta",
+  "queries/tweets.md": "tweets",
+  "queries/user.md": "user",
+  "queries/users.md": "users",
   "scalars/_category_.yml": "label: Scalars
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "scalars/boolean.mdx": "boolean",
-  "scalars/date.mdx": "date",
-  "scalars/id.mdx": "id",
-  "scalars/int.mdx": "int",
-  "scalars/sri.mdx": "sri",
-  "scalars/string.mdx": "string",
-  "scalars/url.mdx": "url",
+  "scalars/boolean.md": "boolean",
+  "scalars/date.md": "date",
+  "scalars/id.md": "id",
+  "scalars/int.md": "int",
+  "scalars/sri.md": "sri",
+  "scalars/string.md": "string",
+  "scalars/url.md": "url",
   "subscriptions/_category_.yml": "label: Subscriptions
 position: 1
 link: null
 collapsible: true
 collapsed: true
 ",
-  "subscriptions/notifications.mdx": "notifications",
+  "subscriptions/notifications.md": "notifications",
 }
 `;
diff --git a/packages/core/tests/unit/generator.test.ts b/packages/core/tests/unit/generator.test.ts
index 437bff50..788b92b1 100644
--- a/packages/core/tests/unit/generator.test.ts
+++ b/packages/core/tests/unit/generator.test.ts
@@ -93,64 +93,74 @@ describe("generator", () => {
       return new GraphQLDirective({ name, locations: [] });
     };
 
-    test("passes options to Printer and Renderer", async () => {
-      jest.spyOn(CoreDiff, "hasChanges").mockResolvedValueOnce(true);
-      jest
-        .spyOn(GraphQL, "getDocumentLoaders")
-        .mockResolvedValueOnce({} as LoadSchemaOptions);
-      jest.spyOn(GraphQL, "loadSchema").mockResolvedValueOnce({
-        getDirective,
-      } as unknown as GraphQLSchema);
-      jest
-        .spyOn(GraphQL, "getSchemaMap")
-        .mockReturnValueOnce({ objects: {} } as SchemaMap);
-      jest.spyOn(GraphQL, "getGroups").mockReturnValueOnce(undefined);
-      jest.spyOn(GraphQL, "getCustomDirectives").mockReturnValueOnce(undefined);
-
-      const getPrinterSpy = jest
-        .spyOn(CorePrinter, "getPrinter")
-        .mockResolvedValueOnce({} as unknown as typeof IPrinter);
-      const rendererSpy = jest
-        .spyOn(CoreRenderer, "getRenderer")
-        .mockResolvedValueOnce(mockRenderer);
-
-      await generateDocFromSchema(options);
-
-      expect(getPrinterSpy).toHaveBeenCalledWith(
-        options.printer,
-        {
-          baseURL: options.baseURL,
-          linkRoot: options.linkRoot,
-          schema: { getDirective },
-        },
-        {
-          customDirectives: undefined,
-          groups: undefined,
-          meta: {
-            generatorFrameworkName: undefined,
-            generatorFrameworkVersion: undefined,
+    test.each([
+      [undefined, false],
+      ["custom-mdx", true],
+    ])(
+      "passes options to Printer and Renderer with mdxParser set to %s",
+      async (mdxParser, hasMDXSupport) => {
+        jest.spyOn(CoreDiff, "hasChanges").mockResolvedValueOnce(true);
+        jest
+          .spyOn(GraphQL, "getDocumentLoaders")
+          .mockResolvedValueOnce({} as LoadSchemaOptions);
+        jest.spyOn(GraphQL, "loadSchema").mockResolvedValueOnce({
+          getDirective,
+        } as unknown as GraphQLSchema);
+        jest
+          .spyOn(GraphQL, "getSchemaMap")
+          .mockReturnValueOnce({ objects: {} } as SchemaMap);
+        jest.spyOn(GraphQL, "getGroups").mockReturnValueOnce(undefined);
+        jest
+          .spyOn(GraphQL, "getCustomDirectives")
+          .mockReturnValueOnce(undefined);
+
+        const getPrinterSpy = jest
+          .spyOn(CorePrinter, "getPrinter")
+          .mockResolvedValueOnce({} as unknown as typeof IPrinter);
+        const rendererSpy = jest
+          .spyOn(CoreRenderer, "getRenderer")
+          .mockResolvedValueOnce(mockRenderer);
+
+        await generateDocFromSchema(options, mdxParser as PackageName);
+
+        expect(getPrinterSpy).toHaveBeenCalledWith(
+          options.printer,
+          {
+            baseURL: options.baseURL,
+            linkRoot: options.linkRoot,
+            schema: { getDirective },
           },
-          metatags: [],
-          printTypeOptions: options.printTypeOptions,
-          onlyDocDirectives: [],
-          skipDocDirectives: [
-            expect.objectContaining({ name: "docDirective" }),
-          ],
-        },
-      );
-      expect(rendererSpy).toHaveBeenCalledWith(
-        {},
-        options.outputDir,
-        options.baseURL,
-        undefined,
-        options.prettify,
-        {
-          ...options.docOptions,
-          deprecated: options.printTypeOptions!.deprecated,
-          hierarchy: options.printTypeOptions!.hierarchy,
-        },
-      );
-    });
+          {
+            customDirectives: undefined,
+            groups: undefined,
+            meta: {
+              generatorFrameworkName: undefined,
+              generatorFrameworkVersion: undefined,
+            },
+            metatags: [],
+            printTypeOptions: options.printTypeOptions,
+            onlyDocDirectives: [],
+            skipDocDirectives: [
+              expect.objectContaining({ name: "docDirective" }),
+            ],
+          },
+          mdxParser,
+        );
+        expect(rendererSpy).toHaveBeenCalledWith(
+          {},
+          options.outputDir,
+          options.baseURL,
+          undefined,
+          options.prettify,
+          {
+            ...options.docOptions,
+            deprecated: options.printTypeOptions!.deprecated,
+            hierarchy: options.printTypeOptions!.hierarchy,
+          },
+          hasMDXSupport,
+        );
+      },
+    );
 
     test("prints summary when completed", async () => {
       expect.assertions(1);
diff --git a/packages/core/tests/unit/printer.test.ts b/packages/core/tests/unit/printer.test.ts
index ed4942af..b3182b95 100644
--- a/packages/core/tests/unit/printer.test.ts
+++ b/packages/core/tests/unit/printer.test.ts
@@ -27,6 +27,7 @@ describe("generator", () => {
         "@graphql-markdown/printer-legacy" as PackageName,
         printerConfig,
         printerOptions,
+        undefined,
       );
 
       expect(printer).toBeDefined();
@@ -37,6 +38,7 @@ describe("generator", () => {
         printerConfig.baseURL,
         printerConfig.linkRoot,
         printerOptions,
+        undefined,
       );
     });
 
diff --git a/packages/core/tests/unit/renderer.test.ts b/packages/core/tests/unit/renderer.test.ts
index 1ccad407..7101ef82 100644
--- a/packages/core/tests/unit/renderer.test.ts
+++ b/packages/core/tests/unit/renderer.test.ts
@@ -98,7 +98,7 @@ describe("renderer", () => {
 
         expect(meta).toEqual({ category: "Foobar", slug: "foobar/foo-bar" });
         expect(spy).toHaveBeenCalledWith(
-          `${output}/foo-bar.mdx`,
+          `${output}/foo-bar.md`,
           "Lorem ipsum",
           undefined,
         );
@@ -126,7 +126,7 @@ describe("renderer", () => {
 
         expect(meta).toEqual({ category: "schema", slug: "foo-bar" });
         expect(spy).toHaveBeenCalledWith(
-          `${output}/foo-bar.mdx`,
+          `${output}/foo-bar.md`,
           "Lorem ipsum",
           undefined,
         );
@@ -186,7 +186,7 @@ describe("renderer", () => {
 
         expect(meta).toBeUndefined();
         expect(spy).toHaveBeenCalledWith(
-          `An error occurred while processing file test/foo-bar.mdx for type "TestType"`,
+          `An error occurred while processing file test/foo-bar.md for type "TestType"`,
         );
       });
     });
@@ -236,13 +236,13 @@ describe("renderer", () => {
 
         expect(spy).toHaveBeenNthCalledWith(
           1,
-          "/output/types/objects/foo.mdx",
+          "/output/types/objects/foo.md",
           "content",
           undefined,
         );
         expect(spy).toHaveBeenNthCalledWith(
           2,
-          "/output/types/objects/bar.mdx",
+          "/output/types/objects/bar.md",
           "content",
           undefined,
         );
diff --git a/packages/printer-legacy/tests/__mocks__/custom-mdx.ts b/packages/printer-legacy/tests/__mocks__/custom-mdx.ts
new file mode 100644
index 00000000..8ee2aa65
--- /dev/null
+++ b/packages/printer-legacy/tests/__mocks__/custom-mdx.ts
@@ -0,0 +1,10 @@
+export default {
+  formatMDXAdmonition: jest.fn(),
+  formatMDXBadge: jest.fn(),
+  formatMDXBullet: jest.fn(),
+  formatMDXDetails: jest.fn(),
+  formatMDXNameEntity: jest.fn(),
+  formatMDXSpecifiedByLink: jest.fn(),
+  mdxDeclaration: jest.fn(),
+  mdxSupport: true,
+};
diff --git a/packages/printer-legacy/tests/unit/badge.test.ts b/packages/printer-legacy/tests/unit/badge.test.ts
index 67f9f886..55608e32 100644
--- a/packages/printer-legacy/tests/unit/badge.test.ts
+++ b/packages/printer-legacy/tests/unit/badge.test.ts
@@ -69,9 +69,7 @@ describe("badge", () => {
         { ...DEFAULT_OPTIONS, typeBadges: true },
       );
 
-      expect(badges).toBe(
-        '<Badge class="badge badge--secondary" text="non-null"/>',
-      );
+      expect(badges).toBe('<mark class="gqlmd-mdx-badge">non-null</mark>');
     });
 
     test("returns an empty string if typeBadges is not enabled", () => {
diff --git a/packages/printer-legacy/tests/unit/common.test.ts b/packages/printer-legacy/tests/unit/common.test.ts
index 66ed2757..ad6c0eb5 100644
--- a/packages/printer-legacy/tests/unit/common.test.ts
+++ b/packages/printer-legacy/tests/unit/common.test.ts
@@ -41,7 +41,7 @@ describe("common", () => {
         locations: [],
         description: "Lorem ipsum",
       });
-      const description = printDescription(type);
+      const description = printDescription(type, DEFAULT_OPTIONS);
 
       expect(description).toMatchInlineSnapshot(`
         "
@@ -57,7 +57,7 @@ describe("common", () => {
         name: "TestDirective",
         locations: [],
       });
-      const description = printDescription(type);
+      const description = printDescription(type, DEFAULT_OPTIONS);
 
       expect(description).toMatchInlineSnapshot(`
         "
@@ -73,7 +73,7 @@ describe("common", () => {
         name: "TestDirective",
         locations: [],
       });
-      const description = printDescription(type, undefined, "");
+      const description = printDescription(type, DEFAULT_OPTIONS, "");
 
       expect(description).toMatchInlineSnapshot(`
         "
@@ -90,7 +90,7 @@ describe("common", () => {
         locations: [],
         description: undefined,
       });
-      const description = printDescription(type);
+      const description = printDescription(type, DEFAULT_OPTIONS);
 
       expect(description).toMatchInlineSnapshot(`
         "
@@ -107,7 +107,7 @@ describe("common", () => {
         locations: [],
         description: undefined,
       });
-      const description = printDescription(type);
+      const description = printDescription(type, DEFAULT_OPTIONS);
 
       expect(description).toMatchInlineSnapshot(`
         "
@@ -119,11 +119,6 @@ describe("common", () => {
     test("return DEPRECATED tag if deprecated", () => {
       expect.hasAssertions();
 
-      const meta: MetaOptions = {
-        generatorFrameworkName: "docusaurus",
-        generatorFrameworkVersion: "3.0.0",
-      };
-
       mockGraphQL.isDeprecated.mockReturnValue(true);
 
       const type = {
@@ -131,21 +126,22 @@ describe("common", () => {
         isDeprecated: true,
         deprecationReason: "{ Foobar }",
       };
-      const description = printDescription(type, {
-        meta,
-      } as unknown as PrintTypeOptions);
+      const description = printDescription(type, DEFAULT_OPTIONS);
 
       expect(description).toMatchInlineSnapshot(`
-        "
+"
 
-        :::warning[DEPRECATED]
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
 
-        &#x007B; Foobar &#x007D;
+&#x007B; Foobar &#x007D;
 
-        :::
+</span>
+</fieldset>
 
-        Lorem ipsum"
-      `);
+Lorem ipsum"
+`);
     });
 
     test("return custom directive description if applied", () => {
@@ -198,25 +194,24 @@ describe("common", () => {
     test("prints deprecated badge if type is deprecated", () => {
       expect.hasAssertions();
 
-      const meta: MetaOptions = {};
-
       mockGraphQL.isDeprecated.mockReturnValue(true);
 
       const type = {
         name: "EntityTypeName",
         isDeprecated: true,
       };
-      const deprecation = printDeprecation(type, {
-        meta,
-      } as unknown as PrintTypeOptions);
+      const deprecation = printDeprecation(type, DEFAULT_OPTIONS);
 
       expect(deprecation).toMatchInlineSnapshot(`
-        "
+"
 
-        :::warning[DEPRECATED]
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
 
-        :::"
-      `);
+</span>
+</fieldset>"
+`);
     });
 
     test("prints deprecation reason if type is deprecated with reason", () => {
@@ -229,17 +224,20 @@ describe("common", () => {
         isDeprecated: true,
         deprecationReason: "{ foobar }",
       };
-      const deprecation = printDeprecation(type);
+      const deprecation = printDeprecation(type, DEFAULT_OPTIONS);
 
       expect(deprecation).toMatchInlineSnapshot(`
-        "
+"
 
-        :::warning[DEPRECATED]
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
 
-        &#x007B; foobar &#x007D;
-        
-        :::"
-      `);
+&#x007B; foobar &#x007D;
+
+</span>
+</fieldset>"
+`);
     });
 
     test("does not print deprecated badge if type is not deprecated", () => {
@@ -251,7 +249,7 @@ describe("common", () => {
         specifiedByURL: "https://lorem.ipsum",
       });
 
-      const deprecation = printDeprecation(type);
+      const deprecation = printDeprecation(type, DEFAULT_OPTIONS);
 
       expect(deprecation).toBe("");
     });
@@ -309,7 +307,26 @@ Test testDirective"
   });
 
   describe("printWarning()", () => {
-    test("prints admonition caution for Docusaurus v2", () => {
+    test("prints admonition warning", () => {
+      expect.assertions(1);
+
+      expect(
+        printWarning({ text: "test", title: "DEPRECATED" }, DEFAULT_OPTIONS),
+      ).toMatchInlineSnapshot(`
+"
+
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
+
+test
+
+</span>
+</fieldset>"
+`);
+    });
+    // eslint-disable-next-line jest/no-disabled-tests
+    test.skip("prints admonition caution for Docusaurus v2", () => {
       expect.assertions(1);
 
       const meta: MetaOptions = {
@@ -318,7 +335,7 @@ Test testDirective"
       };
 
       expect(
-        printWarning("test", "DEPRECATED", {
+        printWarning({ text: "test", title: "DEPRECATED" }, {
           meta,
         } as unknown as PrintTypeOptions),
       ).toMatchInlineSnapshot(`
@@ -331,7 +348,8 @@ Test testDirective"
         :::"
       `);
     });
-    test("prints admonition warning for Docusaurus v3", () => {
+    // eslint-disable-next-line jest/no-disabled-tests
+    test.skip("prints admonition warning for Docusaurus v3", () => {
       expect.assertions(1);
 
       const meta: MetaOptions = {
@@ -340,7 +358,7 @@ Test testDirective"
       };
 
       expect(
-        printWarning("test", "DEPRECATED", {
+        printWarning({ text: "test", title: "DEPRECATED" }, {
           meta,
         } as unknown as PrintTypeOptions),
       ).toMatchInlineSnapshot(`
diff --git a/packages/printer-legacy/tests/unit/directive.test.ts b/packages/printer-legacy/tests/unit/directive.test.ts
index 6fc88fce..9d178b70 100644
--- a/packages/printer-legacy/tests/unit/directive.test.ts
+++ b/packages/printer-legacy/tests/unit/directive.test.ts
@@ -247,7 +247,7 @@ describe("directive", () => {
 
       const tags = printCustomTags(type, options);
 
-      expect(tags).toBe(`<Badge class="badge warning" text="@testA"/>`);
+      expect(tags).toBe('<mark class="gqlmd-mdx-badge">@testA</mark>');
     });
   });
 });
diff --git a/packages/printer-legacy/tests/unit/graphql/directive.test.ts b/packages/printer-legacy/tests/unit/graphql/directive.test.ts
index ccee6804..084b46c7 100644
--- a/packages/printer-legacy/tests/unit/graphql/directive.test.ts
+++ b/packages/printer-legacy/tests/unit/graphql/directive.test.ts
@@ -41,7 +41,7 @@ describe("directive", () => {
       expect(code).toMatchInlineSnapshot(`
 "### Arguments
 
-#### [<code style={{ fontWeight: 'normal' }}>FooBar.<b>ArgFooBar</b></code>](#)<Bullet />[\`Boolean\`](/types/scalars/boolean.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">FooBar.</code><code class="gqlmd-mdx-entity-name">ArgFooBar</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Boolean</code></span>](/types/scalars/boolean.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
@@ -74,23 +74,27 @@ describe("directive", () => {
       expect(code).toMatchInlineSnapshot(`
 "### Arguments
 
-#### [<code style={{ fontWeight: 'normal' }}>FooBar.<b>Foo</b></code>](#)<Bullet />[\`Boolean\`](/types/scalars/boolean.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">FooBar.</code><code class="gqlmd-mdx-entity-name">Foo</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Boolean</code></span>](/types/scalars/boolean.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
  
 
-<Details dataOpen={<><span className="deprecated">Hide deprecated</span></>} dataClose={<><span className="deprecated">Show deprecated</span></>}>
+<details class="gqlmd-mdx-details">
+<summary class="gqlmd-mdx-details-summary"><span className="gqlmd-mdx-details-summary-open">DEPRECATED</span></summary>
 
-#### [<code style={{ fontWeight: 'normal' }}>FooBar.<b>Bar</b></code>](#)<Bullet />[\`Boolean\`](/types/scalars/boolean.mdx) <Badge class="badge badge--deprecated badge--secondary" text="deprecated"/> <Badge class="badge badge--secondary" text="scalar"/> 
-:::warning[DEPRECATED]
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">FooBar.</code><code class="gqlmd-mdx-entity-name">Bar</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Boolean</code></span>](/types/scalars/boolean.mdx) <mark class="gqlmd-mdx-badge">deprecated</mark> <mark class="gqlmd-mdx-badge">scalar</mark> 
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
 
 Deprecated
 
-:::
+</span>
+</fieldset>
 
 
-</Details>
+</details>
 
 "
 `);
diff --git a/packages/printer-legacy/tests/unit/graphql/enum.test.ts b/packages/printer-legacy/tests/unit/graphql/enum.test.ts
index 253a9829..7d2ab5b0 100644
--- a/packages/printer-legacy/tests/unit/graphql/enum.test.ts
+++ b/packages/printer-legacy/tests/unit/graphql/enum.test.ts
@@ -22,16 +22,19 @@ describe("enum", () => {
       expect(metadata).toMatchInlineSnapshot(`
 "### Values
 
-#### [<code style={{ fontWeight: 'normal' }}>EnumTypeName.<b>one</b></code>](#)  
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">EnumTypeName.</code><code class="gqlmd-mdx-entity-name">one</code></span>](#)  
 
 
 
-#### [<code style={{ fontWeight: 'normal' }}>EnumTypeName.<b>two</b></code>](#) <Badge class="badge badge--deprecated badge--secondary" text="deprecated"/> 
-:::warning[DEPRECATED]
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">EnumTypeName.</code><code class="gqlmd-mdx-entity-name">two</code></span>](#) <mark class="gqlmd-mdx-badge">deprecated</mark> 
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
 
 Deprecated
 
-:::
+</span>
+</fieldset>
 
 
 "
@@ -49,23 +52,27 @@ Deprecated
       expect(metadata).toMatchInlineSnapshot(`
 "### Values
 
-#### [<code style={{ fontWeight: 'normal' }}>EnumTypeName.<b>one</b></code>](#)  
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">EnumTypeName.</code><code class="gqlmd-mdx-entity-name">one</code></span>](#)  
 
 
 
  
 
-<Details dataOpen={<><span className="deprecated">Hide deprecated</span></>} dataClose={<><span className="deprecated">Show deprecated</span></>}>
+<details class="gqlmd-mdx-details">
+<summary class="gqlmd-mdx-details-summary"><span className="gqlmd-mdx-details-summary-open">DEPRECATED</span></summary>
 
-#### [<code style={{ fontWeight: 'normal' }}>EnumTypeName.<b>two</b></code>](#) <Badge class="badge badge--deprecated badge--secondary" text="deprecated"/> 
-:::warning[DEPRECATED]
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">EnumTypeName.</code><code class="gqlmd-mdx-entity-name">two</code></span>](#) <mark class="gqlmd-mdx-badge">deprecated</mark> 
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
 
 Deprecated
 
-:::
+</span>
+</fieldset>
 
 
-</Details>
+</details>
 
 "
 `);
diff --git a/packages/printer-legacy/tests/unit/graphql/input.test.ts b/packages/printer-legacy/tests/unit/graphql/input.test.ts
index 687ca7dc..6bc506f5 100644
--- a/packages/printer-legacy/tests/unit/graphql/input.test.ts
+++ b/packages/printer-legacy/tests/unit/graphql/input.test.ts
@@ -26,11 +26,11 @@ describe("input", () => {
       expect(metadata).toMatchInlineSnapshot(`
 "### Fields
 
-#### [<code style={{ fontWeight: 'normal' }}>TestName.<b>one</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestName.</code><code class="gqlmd-mdx-entity-name">one</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
-#### [<code style={{ fontWeight: 'normal' }}>TestName.<b>two</b></code>](#)<Bullet />[\`Boolean\`](/types/scalars/boolean.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestName.</code><code class="gqlmd-mdx-entity-name">two</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Boolean</code></span>](/types/scalars/boolean.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
diff --git a/packages/printer-legacy/tests/unit/graphql/interface.test.ts b/packages/printer-legacy/tests/unit/graphql/interface.test.ts
index c2c8b451..a923e1d8 100644
--- a/packages/printer-legacy/tests/unit/graphql/interface.test.ts
+++ b/packages/printer-legacy/tests/unit/graphql/interface.test.ts
@@ -37,17 +37,17 @@ describe("interface", () => {
       expect(metadata).toMatchInlineSnapshot(`
 "### Fields
 
-#### [<code style={{ fontWeight: 'normal' }}>TestInterfaceName.<b>one</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestInterfaceName.</code><code class="gqlmd-mdx-entity-name">one</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
-#### [<code style={{ fontWeight: 'normal' }}>TestInterfaceName.<b>two</b></code>](#)<Bullet />[\`Boolean\`](/types/scalars/boolean.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestInterfaceName.</code><code class="gqlmd-mdx-entity-name">two</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Boolean</code></span>](/types/scalars/boolean.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
-#### [<code style={{ fontWeight: 'normal' }}>TestInterfaceName.<b>three</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestInterfaceName.</code><code class="gqlmd-mdx-entity-name">three</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
-##### [<code style={{ fontWeight: 'normal' }}>TestInterfaceName.three.<b>four</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+##### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestInterfaceName.three.</code><code class="gqlmd-mdx-entity-name">four</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
diff --git a/packages/printer-legacy/tests/unit/graphql/object.test.ts b/packages/printer-legacy/tests/unit/graphql/object.test.ts
index 7d04d054..4162a474 100644
--- a/packages/printer-legacy/tests/unit/graphql/object.test.ts
+++ b/packages/printer-legacy/tests/unit/graphql/object.test.ts
@@ -43,27 +43,30 @@ describe("object", () => {
       expect(metadata).toMatchInlineSnapshot(`
 "### Fields
 
-#### [<code style={{ fontWeight: 'normal' }}>TestName.<b>one</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestName.</code><code class="gqlmd-mdx-entity-name">one</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
-#### [<code style={{ fontWeight: 'normal' }}>TestName.<b>two</b></code>](#)<Bullet />[\`Boolean\`](/types/scalars/boolean.mdx) <Badge class="badge badge--deprecated badge--secondary" text="deprecated"/> <Badge class="badge badge--secondary" text="scalar"/> 
-:::warning[DEPRECATED]
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestName.</code><code class="gqlmd-mdx-entity-name">two</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Boolean</code></span>](/types/scalars/boolean.mdx) <mark class="gqlmd-mdx-badge">deprecated</mark> <mark class="gqlmd-mdx-badge">scalar</mark> 
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
 
 Deprecated
 
-:::
+</span>
+</fieldset>
 
 
-#### [<code style={{ fontWeight: 'normal' }}>TestName.<b>three</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestName.</code><code class="gqlmd-mdx-entity-name">three</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
-##### [<code style={{ fontWeight: 'normal' }}>TestName.three.<b>four</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+##### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestName.three.</code><code class="gqlmd-mdx-entity-name">four</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
 ### Interfaces
 
-#### [\`TestInterfaceName\`](/types/interfaces/test-interface-name.mdx) <Badge class="badge badge--secondary" text="interface"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">TestInterfaceName</code></span>](/types/interfaces/test-interface-name.mdx) <mark class="gqlmd-mdx-badge">interface</mark> 
 
 
 
@@ -82,33 +85,37 @@ Deprecated
       expect(metadata).toMatchInlineSnapshot(`
 "### Fields
 
-#### [<code style={{ fontWeight: 'normal' }}>TestName.<b>one</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestName.</code><code class="gqlmd-mdx-entity-name">one</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
-#### [<code style={{ fontWeight: 'normal' }}>TestName.<b>three</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestName.</code><code class="gqlmd-mdx-entity-name">three</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
-##### [<code style={{ fontWeight: 'normal' }}>TestName.three.<b>four</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+##### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestName.three.</code><code class="gqlmd-mdx-entity-name">four</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
  
 
-<Details dataOpen={<><span className="deprecated">Hide deprecated</span></>} dataClose={<><span className="deprecated">Show deprecated</span></>}>
+<details class="gqlmd-mdx-details">
+<summary class="gqlmd-mdx-details-summary"><span className="gqlmd-mdx-details-summary-open">DEPRECATED</span></summary>
 
-#### [<code style={{ fontWeight: 'normal' }}>TestName.<b>two</b></code>](#)<Bullet />[\`Boolean\`](/types/scalars/boolean.mdx) <Badge class="badge badge--deprecated badge--secondary" text="deprecated"/> <Badge class="badge badge--secondary" text="scalar"/> 
-:::warning[DEPRECATED]
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestName.</code><code class="gqlmd-mdx-entity-name">two</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Boolean</code></span>](/types/scalars/boolean.mdx) <mark class="gqlmd-mdx-badge">deprecated</mark> <mark class="gqlmd-mdx-badge">scalar</mark> 
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
 
 Deprecated
 
-:::
+</span>
+</fieldset>
 
 
-</Details>
+</details>
 
 ### Interfaces
 
-#### [\`TestInterfaceName\`](/types/interfaces/test-interface-name.mdx) <Badge class="badge badge--secondary" text="interface"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">TestInterfaceName</code></span>](/types/interfaces/test-interface-name.mdx) <mark class="gqlmd-mdx-badge">interface</mark> 
 
 
 
diff --git a/packages/printer-legacy/tests/unit/graphql/operation.test.ts b/packages/printer-legacy/tests/unit/graphql/operation.test.ts
index 3090b5c6..64c9947c 100644
--- a/packages/printer-legacy/tests/unit/graphql/operation.test.ts
+++ b/packages/printer-legacy/tests/unit/graphql/operation.test.ts
@@ -45,7 +45,7 @@ describe("operation", () => {
       expect(metadata).toMatchInlineSnapshot(`
 "### Type
 
-#### [\`Test\`](/types/objects/test.mdx) <Badge class="badge badge--secondary" text="object"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Test</code></span>](/types/objects/test.mdx) <mark class="gqlmd-mdx-badge">object</mark> 
 
 
 
@@ -82,13 +82,13 @@ describe("operation", () => {
       expect(metadata).toMatchInlineSnapshot(`
 "### Arguments
 
-#### [<code style={{ fontWeight: 'normal' }}>TestQuery.<b>ArgFooBar</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestQuery.</code><code class="gqlmd-mdx-entity-name">ArgFooBar</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
 ### Type
 
-#### [\`Test\`](/types/objects/test.mdx) <Badge class="badge badge--secondary" text="object"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Test</code></span>](/types/objects/test.mdx) <mark class="gqlmd-mdx-badge">object</mark> 
 
 
 
@@ -131,27 +131,31 @@ describe("operation", () => {
       expect(metadata).toMatchInlineSnapshot(`
 "### Arguments
 
-#### [<code style={{ fontWeight: 'normal' }}>TestQuery.<b>Foo</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestQuery.</code><code class="gqlmd-mdx-entity-name">Foo</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 
 
  
 
-<Details dataOpen={<><span className="deprecated">Hide deprecated</span></>} dataClose={<><span className="deprecated">Show deprecated</span></>}>
+<details class="gqlmd-mdx-details">
+<summary class="gqlmd-mdx-details-summary"><span className="gqlmd-mdx-details-summary-open">DEPRECATED</span></summary>
 
-#### [<code style={{ fontWeight: 'normal' }}>TestQuery.<b>Bar</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--deprecated badge--secondary" text="deprecated"/> <Badge class="badge badge--secondary" text="scalar"/> 
-:::warning[DEPRECATED]
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">TestQuery.</code><code class="gqlmd-mdx-entity-name">Bar</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">deprecated</mark> <mark class="gqlmd-mdx-badge">scalar</mark> 
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
 
 Deprecated
 
-:::
+</span>
+</fieldset>
 
 
-</Details>
+</details>
 
 ### Type
 
-#### [\`Test\`](/types/objects/test.mdx) <Badge class="badge badge--secondary" text="object"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Test</code></span>](/types/objects/test.mdx) <mark class="gqlmd-mdx-badge">object</mark> 
 
 
 
diff --git a/packages/printer-legacy/tests/unit/graphql/scalar.test.ts b/packages/printer-legacy/tests/unit/graphql/scalar.test.ts
index ac578e29..1a26d8af 100644
--- a/packages/printer-legacy/tests/unit/graphql/scalar.test.ts
+++ b/packages/printer-legacy/tests/unit/graphql/scalar.test.ts
@@ -5,6 +5,7 @@ import {
   printScalarMetadata,
   printSpecification,
 } from "../../../src/graphql/scalar";
+import { DEFAULT_OPTIONS } from "../../../src/const/options";
 
 describe("scalar", () => {
   const type = new GraphQLScalarType<number>({
@@ -21,13 +22,13 @@ describe("scalar", () => {
         specifiedByURL: "https://lorem.ipsum",
       });
 
-      const deprecation = printSpecification(type);
+      const deprecation = printSpecification(type, DEFAULT_OPTIONS);
 
       expect(deprecation).toMatchInlineSnapshot(`
-            "### <SpecifiedBy url="https://lorem.ipsum"/>
+"### <span class="gqlmd-mdx-specifiedby">Specification<a class="gqlmd-mdx-specifiedby-link" target="_blank" href="https://lorem.ipsum" title="Specified by https://lorem.ipsum">⎘</a></span>
 
-            "
-          `);
+"
+`);
     });
 
     test("does not print specification link if directive specified by is not present", () => {
@@ -38,7 +39,7 @@ describe("scalar", () => {
         description: "Lorem Ipsum",
       });
 
-      const deprecation = printSpecification(type);
+      const deprecation = printSpecification(type, DEFAULT_OPTIONS);
 
       expect(deprecation).toBe("");
     });
@@ -48,7 +49,7 @@ describe("scalar", () => {
     test("returns empty if not specifiedByUrl", () => {
       expect.hasAssertions();
 
-      const metadata = printScalarMetadata(type);
+      const metadata = printScalarMetadata(type, DEFAULT_OPTIONS);
 
       expect(metadata).toBe("");
     });
@@ -61,13 +62,13 @@ describe("scalar", () => {
         specifiedByURL: "https://graphql-markdown.dev/",
       });
 
-      const metadata = printScalarMetadata(typeSpecifiedBy);
+      const metadata = printScalarMetadata(typeSpecifiedBy, DEFAULT_OPTIONS);
 
       expect(metadata).toMatchInlineSnapshot(`
-        "### <SpecifiedBy url="https://graphql-markdown.dev/"/>
+"### <span class="gqlmd-mdx-specifiedby">Specification<a class="gqlmd-mdx-specifiedby-link" target="_blank" href="https://graphql-markdown.dev/" title="Specified by https://graphql-markdown.dev/">⎘</a></span>
 
-        "
-      `);
+"
+`);
     });
   });
 
diff --git a/packages/printer-legacy/tests/unit/graphql/union.test.ts b/packages/printer-legacy/tests/unit/graphql/union.test.ts
index 64b06d6b..206e5393 100644
--- a/packages/printer-legacy/tests/unit/graphql/union.test.ts
+++ b/packages/printer-legacy/tests/unit/graphql/union.test.ts
@@ -25,11 +25,11 @@ describe("union", () => {
 
       expect(code).toBe(`### Possible types
 
-#### [<code style={{ fontWeight: 'normal' }}>UnionTypeName.<b>one</b></code>](/types/objects/one.mdx) <Badge class="badge badge--secondary" text="object"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">UnionTypeName.</code><code class="gqlmd-mdx-entity-name">one</code></span>](/types/objects/one.mdx) <mark class="gqlmd-mdx-badge">object</mark> 
 
 
 
-#### [<code style={{ fontWeight: 'normal' }}>UnionTypeName.<b>two</b></code>](/types/objects/two.mdx) <Badge class="badge badge--secondary" text="object"/> 
+#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">UnionTypeName.</code><code class="gqlmd-mdx-entity-name">two</code></span>](/types/objects/two.mdx) <mark class="gqlmd-mdx-badge">object</mark> 
 
 
 
diff --git a/packages/printer-legacy/tests/unit/link.test.ts b/packages/printer-legacy/tests/unit/link.test.ts
index b73a7f91..e78805cd 100644
--- a/packages/printer-legacy/tests/unit/link.test.ts
+++ b/packages/printer-legacy/tests/unit/link.test.ts
@@ -6,7 +6,8 @@ import {
   GraphQLScalarType,
 } from "graphql/type";
 
-import { ConstDirectiveNode, DirectiveLocation, Kind } from "graphql/language";
+import type { ConstDirectiveNode } from "graphql/language";
+import { DirectiveLocation, Kind } from "graphql/language";
 
 import type {
   PrintLinkOptions,
@@ -457,7 +458,9 @@ describe("link", () => {
 
       const result = Link.printLink({}, DEFAULT_OPTIONS);
 
-      expect(result).toBe("[`foo`](/bar)");
+      expect(result).toBe(
+        '[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">foo</code></span>](/bar)',
+      );
     });
 
     test("returns formatted markdown link parentType", () => {
@@ -473,7 +476,7 @@ describe("link", () => {
       );
 
       expect(result).toBe(
-        "[<code style={{ fontWeight: 'normal' }}>baz.<b>foo</b></code>](/bar)",
+        '[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">baz.</code><code class="gqlmd-mdx-entity-name">foo</code></span>](/bar)',
       );
     });
 
@@ -489,7 +492,9 @@ describe("link", () => {
         { ...DEFAULT_OPTIONS, withAttributes: true },
       );
 
-      expect(result).toBe("[`barfoo`](/bar)");
+      expect(result).toBe(
+        '[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">barfoo</code></span>](/bar)',
+      );
     });
   });
 
@@ -589,7 +594,9 @@ describe("link", () => {
 
       expect(
         Link.printParentLink({ type: "foo" }, DEFAULT_OPTIONS),
-      ).toMatchInlineSnapshot(`"<Bullet />[\`foo\`](/bar)"`);
+      ).toMatchInlineSnapshot(
+        `"<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[\`foo\`](/bar)"`,
+      );
     });
 
     test("returns an empty string if parent link undefined", () => {
diff --git a/packages/printer-legacy/tests/unit/mdx/mdx.test.ts b/packages/printer-legacy/tests/unit/mdx/mdx.test.ts
new file mode 100644
index 00000000..32b0ad15
--- /dev/null
+++ b/packages/printer-legacy/tests/unit/mdx/mdx.test.ts
@@ -0,0 +1,109 @@
+import type { PackageName } from "@graphql-markdown/types";
+
+import MDX, { mdxModule } from "../../../src/mdx";
+
+jest.mock("custom-mdx");
+
+describe("mdx", () => {
+  beforeAll(() => {
+    Object.assign(global, { logger: global.console });
+  });
+
+  beforeEach(() => {
+    // silent console
+    jest.spyOn(global.console, "warn").mockImplementation(() => {});
+  });
+
+  afterEach(() => {
+    jest.clearAllMocks();
+  });
+
+  afterAll(() => {
+    delete global.logger;
+  });
+
+  describe("formatMDXBadge", () => {
+    test("returns a formatted badge using standard markdown", () => {
+      expect(MDX.formatMDXBadge({ text: "Test badge", classname: "" })).toBe(
+        `<mark class="gqlmd-mdx-badge">Test badge</mark>`,
+      );
+    });
+  });
+
+  describe("formatMDXAdmonition", () => {
+    test("returns a formatted admonition using standard markdown", () => {
+      expect(
+        MDX.formatMDXAdmonition(
+          {
+            text: "Test admonition",
+            title: "Warning",
+            type: "warning",
+            icon: undefined,
+          },
+          undefined,
+        ),
+      ).toMatchInlineSnapshot(`
+"
+
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">WARNING</span> **Warning**</legend>
+<span>Test admonition</span>
+</fieldset>"
+`);
+    });
+  });
+
+  describe("formatMDXDetails", () => {
+    test("returns a formatted details section using standard markdown", () => {
+      expect(MDX.formatMDXDetails({ dataOpen: "This is a summary" }))
+        .toMatchInlineSnapshot(`
+"
+
+<details class="gqlmd-mdx-details">
+<summary class="gqlmd-mdx-details-summary"><span className="gqlmd-mdx-details-summary-open">THIS IS A SUMMARY</span></summary>
+
+
+
+</details>
+
+"
+`);
+    });
+  });
+
+  describe("formatMDXNameEntity", () => {
+    test("returns a formatted named entity", () => {
+      expect(MDX.formatMDXNameEntity("Test Entity")).toBe(
+        '<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">Test Entity</code></span>',
+      );
+    });
+
+    test("returns a formatted named entity with parent prefix", () => {
+      expect(MDX.formatMDXNameEntity("Entity", "Parent")).toBe(
+        '<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">Parent.</code><code class="gqlmd-mdx-entity-name">Entity</code></span>',
+      );
+    });
+  });
+
+  describe("mdxModule", () => {
+    test("returns default markdown formatters", async () => {
+      await expect(mdxModule()).resolves.toBe(MDX);
+    });
+
+    test("returns default markdown formatters if module loading error", async () => {
+      const loggerSpy = jest.spyOn(global.console, "warn");
+      await expect(mdxModule("not-a-module" as PackageName)).resolves.toBe(MDX);
+      expect(loggerSpy.mock.lastCall).toMatchInlineSnapshot(`
+[
+  "An error occurred while loading MDX formatter "not-a-module"",
+]
+`);
+    });
+
+    test("returns custom markdown formatters if module defined", async () => {
+      await expect(mdxModule("custom-mdx" as PackageName)).resolves.not.toBe(
+        MDX,
+      );
+    });
+  });
+});
diff --git a/packages/printer-legacy/tests/unit/printer.test.ts b/packages/printer-legacy/tests/unit/printer.test.ts
index 12c5d901..68b16160 100644
--- a/packages/printer-legacy/tests/unit/printer.test.ts
+++ b/packages/printer-legacy/tests/unit/printer.test.ts
@@ -52,6 +52,8 @@ import * as Link from "../../src/link";
 import { Printer } from "../../src/printer";
 import { DEFAULT_OPTIONS, TypeHierarchy } from "../../src/const/options";
 
+import mdxModule from "../../src/mdx";
+
 describe("Printer", () => {
   enum TypeGuard {
     DIRECTIVE = "isDirectiveType",
@@ -149,6 +151,7 @@ describe("Printer", () => {
 
   beforeEach(() => {
     Printer.options = undefined;
+    Printer.printMDXModule = mdxModule;
     jest.spyOn(GraphQL, "getTypeName").mockImplementation((value) => {
       return value as string;
     });
@@ -160,52 +163,60 @@ describe("Printer", () => {
   });
 
   describe("init()", () => {
-    test("sets Printer instance with default options", () => {
+    test("sets Printer instance with default options", async () => {
       expect.hasAssertions();
 
       expect(Printer.options).toBeUndefined();
 
-      Printer.init(undefined);
+      await Printer.init(undefined, undefined, undefined, undefined, undefined);
 
       expect(Printer.options).toMatchInlineSnapshot(`
-        {
-          "basePath": "/schema",
-          "codeSection": true,
-          "collapsible": undefined,
-          "customDirectives": undefined,
-          "deprecated": "default",
-          "exampleSection": false,
-          "frontMatter": {},
-          "groups": undefined,
-          "hierarchy": {
-            "api": {},
-          },
-          "level": undefined,
-          "meta": undefined,
-          "metatags": [],
-          "onlyDocDirectives": [],
-          "parentType": undefined,
-          "parentTypePrefix": true,
-          "relatedTypeSection": true,
-          "schema": undefined,
-          "skipDocDirectives": [],
-          "typeBadges": true,
-          "withAttributes": false,
-        }
-      `);
+{
+  "basePath": "/schema",
+  "codeSection": true,
+  "collapsible": undefined,
+  "customDirectives": undefined,
+  "deprecated": "default",
+  "exampleSection": false,
+  "formatMDXAdmonition": [Function],
+  "formatMDXBadge": [Function],
+  "formatMDXBullet": [Function],
+  "formatMDXDetails": [Function],
+  "formatMDXNameEntity": [Function],
+  "formatMDXSpecifiedByLink": [Function],
+  "frontMatter": {},
+  "groups": undefined,
+  "hierarchy": {
+    "api": {},
+  },
+  "level": undefined,
+  "mdxDeclaration": "",
+  "mdxSupport": false,
+  "meta": undefined,
+  "metatags": [],
+  "onlyDocDirectives": [],
+  "parentType": undefined,
+  "parentTypePrefix": true,
+  "relatedTypeSection": true,
+  "schema": undefined,
+  "skipDocDirectives": [],
+  "typeBadges": true,
+  "withAttributes": false,
+}
+`);
     });
 
-    test("does nothing is options is defined", () => {
+    test("does nothing is options is defined", async () => {
       expect.hasAssertions();
 
       Printer.options = {} as PrintTypeOptions;
 
-      Printer.init(undefined);
+      await Printer.init(undefined);
 
       expect(Printer.options).toMatchInlineSnapshot(`{}`);
     });
 
-    test("override values on init when options is undefined", () => {
+    test("override values on init when options is undefined", async () => {
       expect.hasAssertions();
 
       const testDirective = new GraphQLDirective({
@@ -215,7 +226,7 @@ describe("Printer", () => {
 
       Printer.options = undefined;
 
-      Printer.init(new GraphQLSchema({}), "test", "/", {
+      await Printer.init(new GraphQLSchema({}), "test", "/", {
         groups: {},
         printTypeOptions: {
           codeSection: false,
@@ -229,68 +240,76 @@ describe("Printer", () => {
       });
 
       expect(Printer.options).toMatchInlineSnapshot(`
-        {
-          "basePath": "/test",
-          "codeSection": false,
-          "collapsible": undefined,
-          "customDirectives": undefined,
-          "deprecated": "default",
-          "exampleSection": true,
-          "frontMatter": {},
-          "groups": {},
-          "hierarchy": {
-            "entity": {},
-          },
-          "level": undefined,
-          "meta": undefined,
-          "metatags": [],
-          "onlyDocDirectives": [],
-          "parentType": undefined,
-          "parentTypePrefix": false,
-          "relatedTypeSection": false,
-          "schema": GraphQLSchema {
-            "__validationErrors": undefined,
-            "_directives": [
-              "@include",
-              "@skip",
-              "@deprecated",
-              "@specifiedBy",
-              "@oneOf",
-            ],
-            "_implementationsMap": {},
-            "_mutationType": undefined,
-            "_queryType": undefined,
-            "_subTypeMap": {},
-            "_subscriptionType": undefined,
-            "_typeMap": {
-              "Boolean": "Boolean",
-              "String": "String",
-              "__Directive": "__Directive",
-              "__DirectiveLocation": "__DirectiveLocation",
-              "__EnumValue": "__EnumValue",
-              "__Field": "__Field",
-              "__InputValue": "__InputValue",
-              "__Schema": "__Schema",
-              "__Type": "__Type",
-              "__TypeKind": "__TypeKind",
-            },
-            "astNode": undefined,
-            "description": undefined,
-            "extensionASTNodes": [],
-            "extensions": {},
-          },
-          "skipDocDirectives": [
-            "@test",
-          ],
-          "typeBadges": false,
-          "withAttributes": false,
-        }
-      `);
+{
+  "basePath": "/test",
+  "codeSection": false,
+  "collapsible": undefined,
+  "customDirectives": undefined,
+  "deprecated": "default",
+  "exampleSection": true,
+  "formatMDXAdmonition": [Function],
+  "formatMDXBadge": [Function],
+  "formatMDXBullet": [Function],
+  "formatMDXDetails": [Function],
+  "formatMDXNameEntity": [Function],
+  "formatMDXSpecifiedByLink": [Function],
+  "frontMatter": {},
+  "groups": {},
+  "hierarchy": {
+    "entity": {},
+  },
+  "level": undefined,
+  "mdxDeclaration": "",
+  "mdxSupport": false,
+  "meta": undefined,
+  "metatags": [],
+  "onlyDocDirectives": [],
+  "parentType": undefined,
+  "parentTypePrefix": false,
+  "relatedTypeSection": false,
+  "schema": GraphQLSchema {
+    "__validationErrors": undefined,
+    "_directives": [
+      "@include",
+      "@skip",
+      "@deprecated",
+      "@specifiedBy",
+      "@oneOf",
+    ],
+    "_implementationsMap": {},
+    "_mutationType": undefined,
+    "_queryType": undefined,
+    "_subTypeMap": {},
+    "_subscriptionType": undefined,
+    "_typeMap": {
+      "Boolean": "Boolean",
+      "String": "String",
+      "__Directive": "__Directive",
+      "__DirectiveLocation": "__DirectiveLocation",
+      "__EnumValue": "__EnumValue",
+      "__Field": "__Field",
+      "__InputValue": "__InputValue",
+      "__Schema": "__Schema",
+      "__Type": "__Type",
+      "__TypeKind": "__TypeKind",
+    },
+    "astNode": undefined,
+    "description": undefined,
+    "extensionASTNodes": [],
+    "extensions": {},
+  },
+  "skipDocDirectives": [
+    "@test",
+  ],
+  "typeBadges": false,
+  "withAttributes": false,
+}
+`);
     });
   });
 
   describe("printHeader()", () => {
-    test("returns a Docusaurus document header", () => {
+    test("returns a empty string if no mdxSupport", () => {
       expect.hasAssertions();
 
       const header = Printer.printHeader(
@@ -299,6 +318,18 @@ describe("Printer", () => {
         DEFAULT_OPTIONS,
       );
 
+      expect(header).toBe("");
+    });
+
+    test("returns a MDX frontmatter document header", () => {
+      expect.hasAssertions();
+
+      const header = Printer.printHeader(
+        "an-object-type-name",
+        "An Object Type Name",
+        { ...DEFAULT_OPTIONS, mdxSupport: true },
+      );
+
       expect(header).toMatchInlineSnapshot(`
             "---
             id: an-object-type-name
@@ -307,7 +338,7 @@ describe("Printer", () => {
           `);
     });
 
-    test("returns a Docusaurus document header with custom frontmatter", () => {
+    test("returns a MDX frontmatter document header with custom info", () => {
       expect.hasAssertions();
 
       const header = Printer.printHeader(
@@ -316,6 +347,7 @@ describe("Printer", () => {
         {
           ...DEFAULT_OPTIONS,
           frontMatter: { draft: true, hide_table_of_contents: null },
+          mdxSupport: true,
         },
       );
 
@@ -407,7 +439,7 @@ describe("Printer", () => {
     ] as const;
 
     test.each(types)(
-      "returns a Markdown formatted Docusaurus content for type $name",
+      "returns a Markdown formatted content for type $name",
       ({ name, type }) => {
         expect.hasAssertions();
 
diff --git a/packages/printer-legacy/tests/unit/relation.test.ts b/packages/printer-legacy/tests/unit/relation.test.ts
index 471b5896..0ff35d05 100644
--- a/packages/printer-legacy/tests/unit/relation.test.ts
+++ b/packages/printer-legacy/tests/unit/relation.test.ts
@@ -204,12 +204,12 @@ describe("relation", () => {
       );
 
       expect(relation).toMatchInlineSnapshot(`
-            "### RelationOf
+"### RelationOf
 
-            [\`Bar\`](#)  <Badge class="badge badge--secondary" text="interface"/><Bullet />[\`Baz\`](#)  <Badge class="badge badge--secondary" text="subscription"/><Bullet />[\`Foo\`](#)  <Badge class="badge badge--secondary" text="query"/>
+[\`Bar\`](#)  <mark class="gqlmd-mdx-badge">interface</mark><span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[\`Baz\`](#)  <mark class="gqlmd-mdx-badge">subscription</mark><span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[\`Foo\`](#)  <mark class="gqlmd-mdx-badge">query</mark>
 
-            "
-          `);
+"
+`);
     });
   });
 
diff --git a/packages/printer-legacy/tests/unit/section.test.ts b/packages/printer-legacy/tests/unit/section.test.ts
index ad102a8c..698ad1c6 100644
--- a/packages/printer-legacy/tests/unit/section.test.ts
+++ b/packages/printer-legacy/tests/unit/section.test.ts
@@ -16,7 +16,7 @@ import {
   printSectionItems,
 } from "../../src/section";
 
-import { HIDE_DEPRECATED, SHOW_DEPRECATED } from "../../src/const/strings";
+import { DEPRECATED } from "../../src/const/strings";
 
 import { DEFAULT_OPTIONS, SectionLevels } from "../../src/const/options";
 
@@ -50,21 +50,22 @@ describe("section", () => {
         ...DEFAULT_OPTIONS,
         level: SectionLevels.NONE as SectionLevelValue,
         collapsible: {
-          dataOpen: HIDE_DEPRECATED,
-          dataClose: SHOW_DEPRECATED,
+          dataOpen: DEPRECATED,
+          dataClose: DEPRECATED,
         },
       });
 
       expect(section).toMatchInlineSnapshot(`
 " 
 
-<Details dataOpen={<><span className="deprecated">Hide deprecated</span></>} dataClose={<><span className="deprecated">Show deprecated</span></>}>
+<details class="gqlmd-mdx-details">
+<summary class="gqlmd-mdx-details-summary"><span className="gqlmd-mdx-details-summary-open">DEPRECATED</span></summary>
 
 ####   
 
 
 
-</Details>
+</details>
 
 "
 `);
@@ -156,7 +157,7 @@ describe("section", () => {
       const section = printSectionItem(type, DEFAULT_OPTIONS);
 
       expect(section).toMatchInlineSnapshot(`
-"#### [\`EntityTypeName\`](/types/objects/entity-type-name.mdx) <Badge class="badge badge--secondary" text="object"/> 
+"#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">EntityTypeName</code></span>](/types/objects/entity-type-name.mdx) <mark class="gqlmd-mdx-badge">object</mark> 
 Lorem ipsum
 "
 `);
@@ -183,7 +184,7 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.`,
       const section = printSectionItem(type, DEFAULT_OPTIONS);
 
       expect(section).toMatchInlineSnapshot(`
-"#### [\`EntityTypeName\`](/types/objects/entity-type-name.mdx) <Badge class="badge badge--secondary" text="object"/> 
+"#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">EntityTypeName</code></span>](/types/objects/entity-type-name.mdx) <mark class="gqlmd-mdx-badge">object</mark> 
 Lorem ipsum dolor sit amet, 
 consectetur adipiscing elit, 
 sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
@@ -214,7 +215,7 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.
       const section = printSectionItem(type, DEFAULT_OPTIONS);
 
       expect(section).toMatchInlineSnapshot(`
-"#### [\`EntityTypeName\`](#)<Bullet />[\`NonNullableObjectType!\`](/types/objects/non-nullable-object-type.mdx) <Badge class="badge badge--secondary" text="non-null"/> <Badge class="badge badge--secondary" text="object"/> 
+"#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">EntityTypeName</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">NonNullableObjectType!</code></span>](/types/objects/non-nullable-object-type.mdx) <mark class="gqlmd-mdx-badge">non-null</mark> <mark class="gqlmd-mdx-badge">object</mark> 
 
 "
 `);
@@ -238,7 +239,7 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.
       const section = printSectionItem(type, DEFAULT_OPTIONS);
 
       expect(section).toMatchInlineSnapshot(`
-"#### [\`EntityTypeName\`](#)<Bullet />[\`[NonNullableObjectType]!\`](/types/objects/non-nullable-object-type.mdx) <Badge class="badge badge--secondary" text="non-null"/> <Badge class="badge badge--secondary" text="object"/> 
+"#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">EntityTypeName</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">[NonNullableObjectType]!</code></span>](/types/objects/non-nullable-object-type.mdx) <mark class="gqlmd-mdx-badge">non-null</mark> <mark class="gqlmd-mdx-badge">object</mark> 
 
 "
 `);
@@ -257,7 +258,7 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.
       });
 
       expect(section).toMatchInlineSnapshot(`
-"#### [<code style={{ fontWeight: 'normal' }}>parentTypePrefix.<b>EntityTypeName</b></code>](#)  
+"#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">parentTypePrefix.</code><code class="gqlmd-mdx-entity-name">EntityTypeName</code></span>](#)  
 
 "
 `);
@@ -278,9 +279,9 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.
       const section = printSectionItem(type, DEFAULT_OPTIONS);
 
       expect(section).toMatchInlineSnapshot(`
-"#### [\`EntityTypeName\`](#)  
+"#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">EntityTypeName</code></span>](#)  
 
-##### [<code style={{ fontWeight: 'normal' }}>EntityTypeName.<b>ParameterTypeName</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+##### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">EntityTypeName.</code><code class="gqlmd-mdx-entity-name">ParameterTypeName</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 "
 `);
@@ -297,7 +298,7 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.
       const section = printSectionItem(type, DEFAULT_OPTIONS);
 
       expect(section).toMatchInlineSnapshot(`
-"#### [\`EntityTypeNameList\`](#)<Bullet />[\`[Int!]\`](/types/scalars/int.mdx) <Badge class="badge badge--secondary" text="list"/> <Badge class="badge badge--secondary" text="scalar"/> 
+"#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">EntityTypeNameList</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">[Int!]</code></span>](/types/scalars/int.mdx) <mark class="gqlmd-mdx-badge">list</mark> <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 "
 `);
@@ -316,7 +317,7 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.
       const section = printSectionItem(type, DEFAULT_OPTIONS);
 
       expect(section).toMatchInlineSnapshot(`
-"#### [\`EntityTypeNameList\`](#)<Bullet />[\`[Int!]!\`](/types/scalars/int.mdx) <Badge class="badge badge--secondary" text="non-null"/> <Badge class="badge badge--secondary" text="scalar"/> 
+"#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">EntityTypeNameList</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">[Int!]!</code></span>](/types/scalars/int.mdx) <mark class="gqlmd-mdx-badge">non-null</mark> <mark class="gqlmd-mdx-badge">scalar</mark> 
 
 "
 `);
@@ -396,11 +397,14 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.
       });
 
       expect(section).toMatchInlineSnapshot(`
-"#### [\`EntityTypeName\`](#) <Badge class="badge badge--deprecated badge--secondary" text="deprecated"/> 
-:::warning[DEPRECATED]
-
-:::
-##### [<code style={{ fontWeight: 'normal' }}>EntityTypeName.<b>ParameterTypeName</b></code>](#)<Bullet />[\`String\`](/types/scalars/string.mdx) <Badge class="badge badge--secondary" text="scalar"/> 
+"#### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">EntityTypeName</code></span>](#) <mark class="gqlmd-mdx-badge">deprecated</mark> 
+<fieldset class="gqlmd-mdx-admonition-fieldset">
+<legend class="gqlmd-mdx-admonition-legend"><span class="gqlmd-mdx-admonition-legend-type gqlmd-mdx-admonition-legend-type-warning">⚠️</span> **DEPRECATED**</legend>
+<span>
+
+</span>
+</fieldset>
+##### [<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-parent">EntityTypeName.</code><code class="gqlmd-mdx-entity-name">ParameterTypeName</code></span>](#)<span class="gqlmd-mdx-bullet">&nbsp;●&nbsp;</span>[<span class="gqlmd-mdx-entity"><code class="gqlmd-mdx-entity-name">String</code></span>](/types/scalars/string.mdx) <mark class="gqlmd-mdx-badge">scalar</mark>