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.4.0.tar.gz (139.4 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.4.0-cp314-cp314-win_amd64.whl (749.0 kB view details)

Uploaded CPython 3.14Windows x86-64

prosemirror_rs-0.4.0-cp314-cp314-macosx_11_0_arm64.whl (855.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

prosemirror_rs-0.4.0-cp314-cp314-macosx_10_12_x86_64.whl (885.8 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

prosemirror_rs-0.4.0-cp310-abi3-manylinux_2_28_x86_64.whl (953.2 kB view details)

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

prosemirror_rs-0.4.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (934.4 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

File details

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

File metadata

  • Download URL: prosemirror_rs-0.4.0.tar.gz
  • Upload date:
  • Size: 139.4 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.4.0.tar.gz
Algorithm Hash digest
SHA256 3e2fe4fda8b2c4de99e8d77e0ee620e79acc857fc79475febdfa0fbba02ac76d
MD5 75e67c5401c8088ef773d3e7d7314764
BLAKE2b-256 c220b8d1f5e081fc44597bb80c43a4be15404dbcb8e4a6e2e0d8a1f527f8d507

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.4.0.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.4.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for prosemirror_rs-0.4.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1c7422b279015fe0574115c94d92c05681baf07e23099d8d6de1c6c9ff3ac3bc
MD5 060e34df8b3f60479d8d1057f1cd8909
BLAKE2b-256 b2180ff9241e58086f6ebb522ae6003975cdd7f1a03d6c1b15bd748e8a2d2a39

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.4.0-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.4.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for prosemirror_rs-0.4.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ce41e078957ed1f3a53fe1c7a5fca6fbf949ba18234db6cb404afd505a48cfb
MD5 68ffa80cb3d7597a23e729171c62183d
BLAKE2b-256 9fcd56a262a9bffd2b63ec42f2bd6e56c7a03fe1c62ee50bc8b925f66ee05088

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.4.0-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.4.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for prosemirror_rs-0.4.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0710bce0c54135654b49d21b86ea672002849638933568c1bdb819e88bb3b94c
MD5 0ca8e694541d9189f94530d6968c709b
BLAKE2b-256 0af64bfe8ae016087d49c2818f57b0fce7d311ac540d541223dee2e11df24a39

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.4.0-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.4.0-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for prosemirror_rs-0.4.0-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3367a2a1b28be5e5210c95ea69fb937b892843539b54294f2acdb3cb719359ec
MD5 403864b8661dfccc9269c6d0d523b4b5
BLAKE2b-256 879c6a9994d1ddfe5d5660ed829328566108713ddef1063c7288dab213111722

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.4.0-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.4.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for prosemirror_rs-0.4.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 362c3d68d9facd76bc2340a8c91a222ed1a0c206aa8b3cf512371e23b2a8b723
MD5 3490a349f590ed62e881883f333d8088
BLAKE2b-256 89ab6a98a54acb91aa6d5ac192c288f030a066159108657029050337a83d9935

See more details on using hashes here.

Provenance

The following attestation bundles were made for prosemirror_rs-0.4.0-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