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-cp313-cp313-win_amd64.whl (641.2 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: omni_mdx-1.1.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 641.2 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for omni_mdx-1.1.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7d4b134f666caa72cac51e89bbab5c58752629860ff0b8ab2d4900705e9be502
MD5 a049c141b00290e7ecde80bffedbe397
BLAKE2b-256 05a8fe95b5fa1d92ea687def31963d7dbd14ac365d7690170c09ed3c3377ed1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for omni_mdx-1.1.1-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-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for omni_mdx-1.1.1-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 7bffd0df8d61d47e99438995c1070e78795e50bd339073bfdf288c8a1dabf833
MD5 73a670a0f2cc189eb6464b1efdab8724
BLAKE2b-256 183263b871531468f8292ab2fd8c6c2899c4cbe0e8835e1dfc4f027412fe946c

See more details on using hashes here.

Provenance

The following attestation bundles were made for omni_mdx-1.1.1-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-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for omni_mdx-1.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b5e02e84b233b337ac543dd0febc977d478306cca12457809b48f1b2959066e1
MD5 647d397143388d3db3f130ed9f06da03
BLAKE2b-256 0335060e594f990937a0954aa271c82aeb1b27113c9db2c69787f3fb303856a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for omni_mdx-1.1.1-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