Skip to main content

OxydeMark

CI 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.0.tar.gz (57.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.0-cp312-abi3-win_amd64.whl (751.7 kB view details)

Uploaded CPython 3.12+Windows x86-64

oxydemark-0.2.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (988.1 kB view details)

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

oxydemark-0.2.0-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.0-cp312-abi3-macosx_11_0_arm64.whl (887.8 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

oxydemark-0.2.0-cp312-abi3-macosx_10_12_x86_64.whl (887.5 kB view details)

Uploaded CPython 3.12+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: oxydemark-0.2.0.tar.gz
  • Upload date:
  • Size: 57.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.0.tar.gz
Algorithm Hash digest
SHA256 365a97e027ba2c80551b71bff90c9f8cf9a9a5aa4295216da2fa694b5aae82a5
MD5 adee8a646824d686497b313635af704c
BLAKE2b-256 869d38c6cbfccce4e882de5af06ec5d6f7da0d31f6630dc47ceaf43b95a8b270

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.0.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.0-cp312-abi3-win_amd64.whl.

File metadata

  • Download URL: oxydemark-0.2.0-cp312-abi3-win_amd64.whl
  • Upload date:
  • Size: 751.7 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.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d8839bb6054c369d79541664a8c8aca8b91720b1d00c68cba337bcb3d9caab1f
MD5 c7ea35a167b619fa401f68fc04241073
BLAKE2b-256 2c18f97914fc0a52fb9cbc64d92da61c1bc6f39c40b970b384b609335fcfd1c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.0-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.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for oxydemark-0.2.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e2a20230d222bfcbe295a69bb724fac234349d3ca5b48c8e60f43289990458e7
MD5 33d075eba92b9937a984370f65d8049a
BLAKE2b-256 9aa5534e2abae9d970b3fb45648455f9a47fdebe228199655b01964642486d9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.0-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.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for oxydemark-0.2.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0a7985dcf0b78da07161b01e5b2758f0dcd1553e2cfbdadea4666d4b1b192e52
MD5 9502db57d9c3a861b2cb805398ac5e44
BLAKE2b-256 a0f9f42012d7087d4b7d43b67fc63c1a5d51e50c4994fa434349e33457ef3f6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.0-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.0-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for oxydemark-0.2.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cfea45adbdc52e58f7a99217723f86b3b832ab7b6afb3db823c831988301e322
MD5 294d5188121e1e16a685314a25178fd8
BLAKE2b-256 91145d6b828fc8ae99cb2d3a249e15301afd01ce063b43eb1e4c0936214e0f9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.0-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.0-cp312-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for oxydemark-0.2.0-cp312-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 14eb50321a0359fa1324002a33c7ab7f12ee7e56c87c5f4940f01b5ad1628362
MD5 2ee056aceca668f31c91ec9b54b544af
BLAKE2b-256 ff529c21b6da7a56e40dc55310c1e07eecd660e6ddca7c8413d1b178a8b65d13

See more details on using hashes here.

Provenance

The following attestation bundles were made for oxydemark-0.2.0-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