Skip to main content

Python bindings for prosemirror-rs: a Rust implementation of ProseMirror's document model and transform pipeline

Project description

prosemirror-rs — Python bindings

Python bindings for prosemirror, a Rust implementation of ProseMirror's document model and transform pipeline.

Installation

pip install prosemirror-rs

Design goals

  • Zero unnecessary copies. The schema and document live entirely in Rust memory. Only JSON strings cross the Python/Rust boundary.
  • Wire-efficient. Steps arriving as JSON (e.g. from a WebSocket) can be passed directly to apply_steps_json() without any Python-level parsing.
  • Database-efficient. doc_json() serializes the document in Rust and returns a plain Python str, ready to write to a database with no intermediate Python objects.

Quick start

from prosemirror_rs import Editor
import json

schema_json = json.dumps({
    "nodes": {
        "doc":       {"content": "paragraph+"},
        "paragraph": {"content": "text*", "group": "block"},
        "text":      {"group": "inline"},
    },
    "marks": {"strong": {}, "em": {}},
})

doc_json = json.dumps({
    "type": "doc",
    "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Hello"}]}],
})

editor = Editor(schema_json, doc_json)
print(editor.version)   # 0

# Typical server loop: steps arrive as raw JSON from a client
async def on_message(raw: str):
    data = json.loads(raw)                          # parse envelope only
    results = editor.apply_steps_json(              # steps stay as JSON string
        json.dumps(data["steps"])
    )
    if all(results):
        doc = editor.doc_json()                     # serialised in Rust
        await db.execute("UPDATE docs SET body = $1", doc)

API reference

Editor(schema_json, doc_json)

Create an editor. Both arguments are JSON strings (schema spec and initial document). Raises ValueError on malformed input.

editor.apply_step(step_json) -> bool

Apply one step supplied as a JSON string. Returns True on success, False if the step cannot be applied (document is left unchanged). Raises ValueError on invalid JSON.

editor.apply_steps_json(steps_json, *, stop_on_failure=True) -> list[bool]

Preferred method for incoming network data. Accepts a JSON array of steps as a single string — passed directly to Rust and parsed there, so nothing touches Python's JSON machinery. Returns one bool per step.

editor.apply_steps(steps, *, stop_on_failure=True) -> list[bool]

Convenience method for when steps are constructed or modified in Python. Each element of steps is a JSON string for one step. All steps are parsed before any are applied, so a bad JSON string raises ValueError without mutating the document. Returns one bool per step.

editor.doc_json() -> str

Return the current document as a compact JSON string. Serialized entirely in Rust; only the final string is handed to Python — suitable for direct database writes with no intermediate objects.

editor.version (int, read-only property)

Number of steps successfully applied since construction. Use as a document version counter in collaborative-editing protocols.

Credits

The underlying Rust library was originally written by Daniel Seiler (Xiphoseer, me@dseiler.eu), who designed and implemented the document model, transform pipeline, and runtime schema system. Mustafa J (mustafa.0x@gmail.com) has made substantial contributions to the core Rust implementation. Currently maintained by Johannes Wilm (FidusWriter, johannes@fiduswriter.org).

ProseMirror is by Marijn Haverbeke and contributors — see prosemirror.net.

The Python test suite used for cross-implementation validation is taken from prosemirror-py, a Python port of ProseMirror originally created by Shen Li and maintained by Samuel Cormier-Iijima, Patrick Gingras, and others at Fellow Insights Inc.

License

MIT — see LICENSE.

Copyright 2026 Johannes Wilm Copyright 2025–2026 Mustafa J Copyright 2020 Daniel Seiler Copyright 2019 Fellow Insights Inc. (prosemirror-py Python port) Copyright 2015–2026 Marijn Haverbeke and others

Project details


Download files

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

Source Distribution

prosemirror_rs-0.5.2.tar.gz (186.1 kB view details)

Uploaded Source

Built Distributions

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

prosemirror_rs-0.5.2-cp314-cp314-win_amd64.whl (827.8 kB view details)

Uploaded CPython 3.14Windows x86-64

prosemirror_rs-0.5.2-cp314-cp314-macosx_11_0_arm64.whl (931.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

prosemirror_rs-0.5.2-cp314-cp314-macosx_10_12_x86_64.whl (966.2 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

prosemirror_rs-0.5.2-cp310-abi3-manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

prosemirror_rs-0.5.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

File details

Details for the file prosemirror_rs-0.5.2.tar.gz.

File metadata

  • Download URL: prosemirror_rs-0.5.2.tar.gz
  • Upload date:
  • Size: 186.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for prosemirror_rs-0.5.2.tar.gz
Algorithm Hash digest
SHA256 1977c535fde8ef45222387400af3253d432522b2561575756b394ec5d94d9d42
MD5 83057abc14e243c622d8aef830eca469
BLAKE2b-256 c19035471de90499803d1a7def76be558724e250f420f104f4646caf130e1e5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.5.2.tar.gz:

Publisher: publish.yml on fiduswriter/prosemirror-rs

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

File details

Details for the file prosemirror_rs-0.5.2-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for prosemirror_rs-0.5.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 583ecbdb6874dd18e81d13a2a87eb939c5bf59fe8bcb167689b3a94a8e6c2c17
MD5 3c883fe26193b97bd81e1863a49eff12
BLAKE2b-256 c6bb19a7f053c82969be02b6163f7fd2b01a1eafbc13e6fca23fd4e2c58c0822

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.5.2-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on fiduswriter/prosemirror-rs

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

File details

Details for the file prosemirror_rs-0.5.2-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for prosemirror_rs-0.5.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3b59c803358376569ab7143072c77727f89dd32075582cb70f91550e942f6660
MD5 683470be59a324d9752a9c1549a79efe
BLAKE2b-256 b5f31c5fa57b75dd6b859c39148f74e3e42c74647856023cc01d77e3be606e30

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.5.2-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on fiduswriter/prosemirror-rs

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

File details

Details for the file prosemirror_rs-0.5.2-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for prosemirror_rs-0.5.2-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 597a0ba130ebd96fa0d152af8da6da8ec6e0aea85e020744d3280ac08a2520b3
MD5 5fe4fcb15d4efb099c50ebd9f452430a
BLAKE2b-256 44b4211e97ca27f3d352a01b20210a52580440a3069e11791919bb1eb6058f7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.5.2-cp314-cp314-macosx_10_12_x86_64.whl:

Publisher: publish.yml on fiduswriter/prosemirror-rs

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

File details

Details for the file prosemirror_rs-0.5.2-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for prosemirror_rs-0.5.2-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 44ff65c9c2dbc4ad5baf576b02c66811509dae44b6e512f5a11e4f95fd26a6bd
MD5 3eeefc2cde508c53d733184ee8c55bbb
BLAKE2b-256 62eb1295239d7b456a88042f80420b8a8596aa619531d2b26808403519eb9ed9

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.5.2-cp310-abi3-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on fiduswriter/prosemirror-rs

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

File details

Details for the file prosemirror_rs-0.5.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for prosemirror_rs-0.5.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 211a8a305bb34acffedd6f9fa210f3a17e0e121d808e5309c03efdb858b8b198
MD5 c44b947ba9d36b559a95b275f010e20b
BLAKE2b-256 5ae96e6dd8857f5f368ba4e5252cd55a17ed907c6ad73bd799919fcda14be061

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.5.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on fiduswriter/prosemirror-rs

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