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.2.tar.gz (61.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.2-cp312-abi3-win_amd64.whl (763.3 kB view details)

Uploaded CPython 3.12+Windows x86-64

oxydemark-0.2.2-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.2-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.2-cp312-abi3-macosx_11_0_arm64.whl (892.6 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

oxydemark-0.2.2-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.2.tar.gz.

File metadata

  • Download URL: oxydemark-0.2.2.tar.gz
  • Upload date:
  • Size: 61.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.2.tar.gz
Algorithm Hash digest
SHA256 142023ec9c4e9e94242cf7bee3631fc5d0c1d92527ba5359641bb6ac914d6f39
MD5 d3c20f7550fbb56f6c31f578e9aa63b7
BLAKE2b-256 f292de32050db70de4fb6cbcda061b0aa527820dd51a6db4c5ef9ef1fc19900e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: oxydemark-0.2.2-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.2-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 bc9f411f64c411461a2d2af1d471c1260ce4e1525686035f5c1785ee020c34f4
MD5 43dd2a943c704588ff6f2da4edf05d48
BLAKE2b-256 5c3bbc5f9509266f297a7c5773eb9238cf3d6adfec518f69542317218ec18077

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for oxydemark-0.2.2-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6ba0bc9604c0364c71d236101dfee67ecc10332c7d97a8e8dadf0a740b90c2e3
MD5 85ace8aae99fa0d468bdf44fb986cd3c
BLAKE2b-256 21f14dee9d2bbc9a0cd61b85b3ad440e83865235535c36c062eaac008bd1860f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for oxydemark-0.2.2-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 19361d1598045ce7e6cee29dfdd2ded5c9bb8b7c0c8997c25db25efae87e1fe6
MD5 e1528d124345d58101870f3a2817d459
BLAKE2b-256 68d9455350d1bb242a385f07041543b3e605bbef50a8e928a5b0e4a2502e0fbf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for oxydemark-0.2.2-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db8cc5dcb78b933a68e14d186aee0953a180ecff683b58bbd32563dbb0941134
MD5 5d9020a1e2c3f3493462086950047f09
BLAKE2b-256 b898a6579c067a3d8ecac4db90621401fa80662f58e97cc34b0ed476ffc39f59

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for oxydemark-0.2.2-cp312-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6d958ed1edf427fab52e204b0e0b0774741809b5d07f115c30acfa259ef449e4
MD5 bd741040ed4cb3046dd27d2e1e2ac32b
BLAKE2b-256 22f262aab21cc38fe300115d7c0bba86b0e59344338691c238a06322886a5e19

See more details on using hashes here.

Provenance

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