Skip to main content

Ultra-fast MDX rendering engine powered by Rust.

Project description

omni-mdx

Build Coverage Downloads Version License

The high-performance MDX engine for Python, powered by a native Rust core.

pip install omni-mdx

Contents

What is this?

omni-mdx provides a high-performance bridge between the pulldown-cmark Rust parser and native Python applications. It parses MDX (Markdown + JSX) into a deeply manipulable Abstract Syntax Tree (AST) and offers zero-dependency native rendering solutions for both the Web (HTML/KaTeX) and Desktop (PyQt5/Matplotlib).

When should I use this?

  • Extreme Performance: You need to parse large amounts of MDX content without blocking the Python GIL, thanks to the native Rust core.
  • Data Mining & AI: You want to extract structured data (formulas, metadata, components) from MDX for LLM ingestion or indexing.
  • Native Desktop Apps: You are building a PyQt5 or PySide application and need to render rich Markdown and Math equations without the overhead of a heavy WebEngine/Chromium component.
  • Scientific Publishing: You need robust, built-in support for GFM Tables and KaTeX/LaTeX math.

Install

The package is distributed as a Fat Wheel, meaning the Rust binary is bundled directly. No Rust toolchain is required for installation.

pip install omni-mdx

# Optional: Required for high-quality Desktop math rendering
pip install matplotlib PyQt5

Use

1. Parsing to AST

Transform raw text into a structured, searchable tree.

import omni_mdx

mdx_content = r"""
# Physics 101
The kinetic energy is defined as:
$$\zeta(s) = \sum_{n=1}^\infty \frac{1}{n^s}$$

<Note type="warning">Check your units!</Note>
"""

# Parse returns an MdxAstRoot object
ast = omni_mdx.parse(mdx_content)

# Nodes are accessible via ast.nodes
for node in ast.nodes:
    if node.node_type == "BlockMath":
        print(f"Formula found: {node.attributes.get('data-math')}")

2. Web Rendering (HTML)

Generate clean, standards-compliant HTML.

from omni_mdx import render_html, parse

nodes = parse("<Speaker name='Leon'>Welcome to the show.</Speaker>").nodes

# Register custom rendering logic for JSX components
def render_speaker(node, ctx):
    name = node.attributes.get("name")
    return f'<div class="speaker-tag"><b>{name}:</b> {node.text_content()}</div>'

html_output = render_html(nodes, components={"Speaker": render_speaker})

3. Native Desktop Rendering (PyQt5)

Render MDX content directly into native Qt Widgets.

from PyQt5.QtWidgets import QScrollArea
from omni_mdx.qt_renderer import QtRenderer
import omni_mdx

# 1. Parse and render
nodes = omni_mdx.parse("# Hello Native!").nodes
renderer = QtRenderer()
content_widget = renderer.render(nodes)

# 2. Add to your UI
scroll = QScrollArea()
scroll.setWidget(content_widget)
scroll.setWidgetResizable(True)

API

omni_mdx.parse(source: str) -> MdxAstRoot

Parses the MDX source string into an AST root.

  • Returns: An MdxAstRoot containing a list of MdxNode objects.

MdxNode Properties

  • node_type: The type of the node (e.g., "h1", "text", "BlockMath").
  • content: The raw content of the node.
  • attributes: A dictionary of JSX props or math metadata.
  • children: A list of child MdxNode objects.
  • is_component: Boolean indicating if the node is a JSX component.

Architecture

Omni-MDX utilizes a "Bridge" architecture. The heavy parsing is performed in Rust, producing a high-performance tree. This tree is then wrapped in a Python layer that provides a familiar, typed API for manipulation and rendering.

Compatibility

  • Python: 3.11+.
  • Operating Systems: Linux (x86_64, aarch64), macOS (Intel, Apple Silicon), Windows (x86_64).
  • GUI Frameworks: Optimized for PyQt5 but compatible with any logic that can ingest the AST.

Security

The Rust core provides a safety layer against common regex-based DoS attacks found in many pure-Python parsers. For HTML rendering, ensure your custom components properly sanitize any raw user input if necessary.

Contribute

This package is part of the TOAQ open-source ecosystem. Current Status:

  • Python Layer Coverage: 88.10%.
  • Core Rust Coverage: 81.29%.

See the Contribution Guide to get started with local development and maturin.

License

MIT © TOAQ-oss

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

omni_mdx-1.1.1.dev1776371676-cp313-cp313-win_amd64.whl (641.4 kB view details)

Uploaded CPython 3.13Windows x86-64

omni_mdx-1.1.1.dev1776371676-cp313-cp313-manylinux_2_34_x86_64.whl (826.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

omni_mdx-1.1.1.dev1776371676-cp313-cp313-macosx_11_0_arm64.whl (720.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

File details

Details for the file omni_mdx-1.1.1.dev1776371676-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for omni_mdx-1.1.1.dev1776371676-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ec49b3c0660901c60b47755c63cb693ac4ebc17699b38f3330801ea8b4bfc412
MD5 79e678eff180ace6a32d30acf12ffb65
BLAKE2b-256 4b95b3bcc398f2843a8ca4496ce7876ae0c2f92cf2c0827a7079b3620f2e78f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for omni_mdx-1.1.1.dev1776371676-cp313-cp313-win_amd64.whl:

Publisher: publish-python.yml on TOAQ-oss/omni-mdx-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omni_mdx-1.1.1.dev1776371676-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for omni_mdx-1.1.1.dev1776371676-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 f6c63083d61c5c6b914d313975a61d51db6e382bb414f1492cdbe5627e9e8d43
MD5 d0b83e2ddf6f69732058eb1a8aeedfd4
BLAKE2b-256 4899a356c172ccf76cc4ab145fd948756fd5a626219db8febac38b788dc45d2a

See more details on using hashes here.

Provenance

The following attestation bundles were made for omni_mdx-1.1.1.dev1776371676-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: publish-python.yml on TOAQ-oss/omni-mdx-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omni_mdx-1.1.1.dev1776371676-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for omni_mdx-1.1.1.dev1776371676-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 61b749577d576533d89610790ed81c6865e921d861dfc484f68d498c1aa5d23b
MD5 3669f2279060ae1b4b2c5532d5c12138
BLAKE2b-256 8990372f269b0cb4b168e2f50dca4ca816d9b062c97e2c1f7fe18a18b9318d06

See more details on using hashes here.

Provenance

The following attestation bundles were made for omni_mdx-1.1.1.dev1776371676-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish-python.yml on TOAQ-oss/omni-mdx-core

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page