Skip to main content

OxydeMark

CI codecov License: MIT prek

Extensible Markdown pipelines powered by Rust.

Documentation | API reference

Overview

OxydeMark is a Markdown processing engine built around an AST pipeline architecture. It combines a high-performance Rust core for parsing and rendering with Python bindings (via PyO3) for a flexible plugin system.

Markdown Input
    -> Preprocessing Plugins (Python, text-level)
    -> Rust Parser / rushdown (AST generation)
    -> AST exposed to Python (AstNode tree)
    -> AST Transformation Plugins (Python, AST-level)
    -> Rust Renderer (HTML generation)
    -> Postprocessing Plugins (Python, HTML-level)
    -> Final Output

Installation

Note: OxydeMark is in early development (pre-alpha). Installation from source is currently the only option.

# Clone the repository
git clone https://github.com/noirbizarre/oxydemark.git
cd oxydemark

# Install tools and build
mise install
maturin develop

Quick Start

from oxydemark import OxydeEngine

engine = OxydeEngine()

md = """
# Hello OxydeMark

This is **extensible Markdown**.
"""

html = engine.render(md)
print(html)

Plugins

A plugin is any object implementing one or more of the preprocess, transform and postprocess hooks. No base class, no registration:

from oxydemark import OxydeEngine
from oxydemark.contrib import AdmonitionPlugin, MentionPlugin


class Shouty:
    def postprocess(self, html: str) -> str:
        return html.upper()


engine = OxydeEngine(plugins=[AdmonitionPlugin(), MentionPlugin(), Shouty()])
print(engine.render("> [!NOTE]\n> Ping @alice\n"))

oxydemark.contrib ships four worked examples (admonitions, shortcodes, mentions, lazy images). See the plugin guide for the full authoring documentation, including the AST value-semantics rules.

Development

See CONTRIBUTING.md for the full development guide.

# Set up tools and hooks
mise install
mise run setup

# Common tasks
mise run build        # Build the Rust crate
mise run test         # Run tests
mise run lint         # Run clippy
mise run fmt          # Format code
mise run ci           # Run all checks
mise run docs         # Build the documentation site

Project Structure

oxydemark/
├── src/                    # Rust core
│   ├── lib.rs              # PyO3 module, parser/renderer wiring
│   ├── ast.rs              # AstNode definition, arena-to-tree conversion
│   ├── extensions.rs       # Comark parser/renderer extensions
│   └── html_render.rs      # AST-to-HTML renderer
├── python/oxydemark/       # Python package
│   ├── __init__.py         # Re-exports from native module
│   ├── api.py              # OxydeEngine, plugin protocol
│   └── contrib/            # Example plugins (provisional surface)
├── docs/                   # Documentation site sources
│   ├── plugins.md          # Plugin authoring guide
│   ├── api/                # API reference pages
│   └── specs/              # OMEPs (design decisions)
├── .github/workflows/      # CI pipeline
├── Cargo.toml              # Rust crate configuration
├── pyproject.toml          # Python build config (maturin)
├── mise.toml               # Task runner and tool versions
├── zensical.toml           # Documentation site configuration
├── cliff.toml              # Changelog generation
├── prek.toml               # Pre-commit hooks
├── CONTRIBUTING.md         # Contribution guidelines
└── LICENSE                 # MIT License

Design Decisions

Architectural and tooling decisions are documented as OMEPs (OxydeMark Enhancement Proposals) in docs/specs/. See the OMEP index for the full list.

License

MIT

Download files

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

Source Distribution

oxydemark-0.2.1.tar.gz (60.3 kB view details)

Uploaded Source

Built Distributions

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

oxydemark-0.2.1-cp312-abi3-win_amd64.whl (763.3 kB view details)

Uploaded CPython 3.12+Windows x86-64

oxydemark-0.2.1-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ x86-64

oxydemark-0.2.1-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.17+ ARM64

oxydemark-0.2.1-cp312-abi3-macosx_11_0_arm64.whl (892.6 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

oxydemark-0.2.1-cp312-abi3-macosx_10_12_x86_64.whl (872.0 kB view details)

Uploaded CPython 3.12+macOS 10.12+ x86-64

File details

Details for the file oxydemark-0.2.1.tar.gz.

File metadata

  • Download URL: oxydemark-0.2.1.tar.gz
  • Upload date:
  • Size: 60.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for oxydemark-0.2.1.tar.gz
Algorithm Hash digest
SHA256 bfc7e3dd798c8e771fb92483497565aebc4a6574fa8b8bead52ce3b71310e63e
MD5 e30c4e2f570b282176439878768efacc
BLAKE2b-256 0df2a9e524d7046065d6d4b9f84b35f665bb4291cd6e4483f45d7e2167f96044

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.1.tar.gz:

Publisher: release.yml on noirbizarre/oxydemark

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

File details

Details for the file oxydemark-0.2.1-cp312-abi3-win_amd64.whl.

File metadata

  • Download URL: oxydemark-0.2.1-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 763.3 kB
  • Tags: CPython 3.12+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for oxydemark-0.2.1-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2aee5505f9a9035415c5b38c7538a2837ad821c6b04f325ee7b41b6189f51233
MD5 72e4703265fd41b8619bfa7b0856f397
BLAKE2b-256 e74bb3ac2c0c38df7cccf0578fa0875be751a573e32a8b32631b284d5b08c3e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.1-cp312-abi3-win_amd64.whl:

Publisher: release.yml on noirbizarre/oxydemark

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

File details

Details for the file oxydemark-0.2.1-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxydemark-0.2.1-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f6677fb22c2c1a0f86ac76c7708a1e89dc200556de50c81b7e586996ff4e4ba0
MD5 7d80fb6a10f31977dd2905ed6b45705e
BLAKE2b-256 9a5011884bccd286934359917601dc0c63d0d7650b93cacb6e72573475507ca5

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.1-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on noirbizarre/oxydemark

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

File details

Details for the file oxydemark-0.2.1-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxydemark-0.2.1-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 22826baaa9ddc72e51d3e8500bdf91fd8a57425310b6441598463640fb9a940e
MD5 cd45fb8ac3cd606e37c132984fdaa794
BLAKE2b-256 e2f741c5b6a2c7beff9eb9f28707cfd2040da24d8da6d9409f572c231273d7ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.1-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on noirbizarre/oxydemark

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

File details

Details for the file oxydemark-0.2.1-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for oxydemark-0.2.1-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e379022f08bf6582cf9baff05eccf2c754b1df54a98165922a892dea9465dbf1
MD5 33e20b1b315acb12614d83eaeeb13fea
BLAKE2b-256 92d9260f448abe9228f976dcafb299596ed6b60b9bb9213e69c5919bfc0d1b94

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.1-cp312-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on noirbizarre/oxydemark

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

File details

Details for the file oxydemark-0.2.1-cp312-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for oxydemark-0.2.1-cp312-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 18178e6b30c1a6f8335fbe2b101d2e1aabec37351c6dae9225e7b57f425b4c78
MD5 05760b8ccd187bb210841e22a5caac05
BLAKE2b-256 f587730b5e9e0a303e1251f0c9385b11d8c6a7c977111051dda45b2b16dfb145

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.1-cp312-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on noirbizarre/oxydemark

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