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.1.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.1-cp314-cp314-win_amd64.whl (827.9 kB view details)

Uploaded CPython 3.14Windows x86-64

prosemirror_rs-0.5.1-cp314-cp314-macosx_11_0_arm64.whl (932.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

prosemirror_rs-0.5.1-cp314-cp314-macosx_10_12_x86_64.whl (965.9 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

prosemirror_rs-0.5.1-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.1-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.1.tar.gz.

File metadata

  • Download URL: prosemirror_rs-0.5.1.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.1.tar.gz
Algorithm Hash digest
SHA256 ed74648e465833a1f1f905caceb7798548fe6aedff5ecbbbfd2820bfd821eb7b
MD5 c3a9d17622be6f4a9fd339fa008643b5
BLAKE2b-256 6da53969b7d6443347442aa248e2e3195edec6804712a2e9b61c8735a8db85ca

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for prosemirror_rs-0.5.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ab3e94f0be55a57a550004a5a72623082a6e0e024a98c6fab7b8de0ffc9d0245
MD5 6f481362b916d232f8ab1c74c752934b
BLAKE2b-256 5379f4091b192174e326b281f1cc1c076d24e760a23245b727ad353e4304f28f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for prosemirror_rs-0.5.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7733496c2b2f5439d83844400010627be4299170bce302e07e51c995cacf8d25
MD5 cb43a070dc31f86f07894e369a605c04
BLAKE2b-256 48b3b175e27352a1cd2ebfed4e79ed3197568a4751645e6db47e6c6e2e9e3d39

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for prosemirror_rs-0.5.1-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b060ae17d7a09764f2ec2d2027b93588d16f34b5546a383eed352fc76a81829d
MD5 a01e53261f89ca2d004bd4f9ce898683
BLAKE2b-256 149dd53d82932b09cff4c06f8b2115a869f809c17ddea9de491c8c29de413169

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for prosemirror_rs-0.5.1-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ce0839a818c2452e2403fa0a401d4b3ca1589c2a53e2830e092f4f6404153be1
MD5 f3b0bf212741b11fdea79851d334d1b4
BLAKE2b-256 d1b41374e3693738be907caade4917097af87ba9486bc6408480d969ff0104a8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for prosemirror_rs-0.5.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fa2cff866749d655f9eddc9d004b275a5188a1fb75d7eb51d741b10af2f60886
MD5 c6637725ebba0bf8da7863f466472ab7
BLAKE2b-256 8354a15e865e00fb9bb1f578b8d902d7e85f208ea205d662bcd2f79636646a6c

See more details on using hashes here.

Provenance

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