zero-md

3.0.0 • Public • Published

version license stars downloads old

<zero-md>

Ridiculously simple zero-config markdown displayer

A vanilla markdown-to-html web component based on Custom Elements V1 specs to load and display an external MD file. Under the hood, it uses marked for super-fast markdown transformation, and highlight.js for lightning-quick syntax highlighting - automagically rendering into its own self-contained shadow DOM container, while encapsulating implementation details into one embarassingly easy-to-use package.

Featuring:

  • [x] Math rendering via KaTeX
  • [x] Mermaid diagrams
  • [x] Syntax highlighting via highlight.js
  • [x] Language detection for unhinted code blocks
  • [x] Hash-link scroll handling
  • [x] FOUC prevention
  • [x] Auto re-render on input changes
  • [x] Light and dark themes
  • [x] Spec-compliant extensibility

[!IMPORTANT]
Your markdown file(s) must be hosted! Browsers restrict local file access in javascript because security. Standard CORS rules apply.

[!NOTE]
This is the V3 branch. If you're looking for the older version, see the V2 branch. If you are upgrading from V2, read the migration guide.

Read the docs: https://zerodevx.github.com/zero-md/

Installation

Load via CDN (recommended)

zero-md is designed to be zero-config with good defaults. For most use-cases, just importing the script from CDN and consuming the component directly should suffice.

<head>
  ...
  <!-- Import element definition and auto-register -->
  <script type="module" src="https://cdn.jsdelivr.net/npm/zero-md@3?register"></script>
</head>
<body>
  ...
  <!-- Profit! -->
  <zero-md src="example.md"></zero-md>
</body>

Use in web projects

Install the package.

$ npm i zero-md

Import the class, register the element, and use anywhere.

// Import the element definition
import ZeroMd from 'zero-md'

// Register the custom element
customElements.define('zero-md', ZeroMd)

// Render anywhere
app.render(`<zero-md src=${src}></zero-md>`, target)

Basic usage

<!-- Simply set the `src` attribute and win -->
<zero-md src="https://example.com/markdown.md"></zero-md>

<!-- Or write markdown inline -->
<zero-md>
  <!-- Write your markdown inside a `<script type="text/markdown">` tag -->
  <script type="text/markdown">
    # **This** is my [markdown](https://example.com)
  </script>
</zero-md>

<!-- Or update the style -->
<zero-md src="https://example.com/markdown.md">
  <!-- Wrap `style` tags inside `template` -->
  <template data-append>
    <style>
      p {
        color: red;
      }
    </style>
  </template>
</zero-md>

Read the docs: https://zerodevx.github.com/zero-md/

Contributing

Noticed a bug? Have a feature request?

Open a new issue in the Github repo, or raise a PR! I'd be stoked to accept any contributions!

Development

Standard Github contribution workflow applies.

Run the dev server

$ npm run dev

We use Vite for tooling. Point your browser to http://localhost:5173 and you should see the test page. Library code is at src/lib/.

Testing

$ npm test

Tests are through Playwright. Add tests in src/index.spec.js. Be sure tests pass in your PR.

Updating docs

Documentation is in the /docs folder. Submit PRs onto the .md files directly and the changes will automatically be published when merged. The public docs setup is based on zero-md-docs, where one can instantly publish markdown docs from the Github docs/ folder.

Changelog

Check out the releases page.

License

ISC

Acknowledgement

A big thank you to the following contributors and sponsors! 🙏

Contributors

Sponsors

Package Sidebar

Install

npm i zero-md

Weekly Downloads

1,126

Version

3.0.0

License

ISC

Unpacked Size

47.7 kB

Total Files

14

Last publish

Collaborators

  • zerodevx