{"library":"pycrdt","title":"PyCRDT","description":"Pycrdt is a Python library providing bindings for Yrs, the Rust port of the Yjs framework. It enables the creation of Conflict-free Replicated Data Types (CRDTs), allowing shared documents to automatically merge concurrent changes from different replicas, ensuring eventual consistency. The library is actively maintained, with frequent releases, and is currently at version 0.12.50.","language":"python","status":"active","last_verified":"Thu May 14","install":{"commands":["pip install pycrdt"],"cli":null},"imports":["from pycrdt import Doc","from pycrdt import Text","from pycrdt import Array","from pycrdt import Map"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from pycrdt import Doc, Text, Array, Map\n\n# Create a shared document\ndoc0 = Doc()\n\n# Get or create root types for collaborative data\ntext0 = doc0.get(\"text\", type=Text)\narray0 = doc0.get(\"array\", type=Array)\nmap0 = doc0.get(\"map\", type=Map)\n\n# Make changes to the document within a transaction\nwith doc0.transaction():\n    text0.insert(0, \"hello\")\n    array0.append()\n    map0[\"key1\"] = \"value1\"\n\n# Get the updates from doc0\nupdates = doc0.get_update()\n\n# Simulate another client or replica\ndoc1 = Doc()\n\n# Apply updates from doc0 to doc1\ndoc1.apply_update(updates)\n\n# Verify the state of doc1\ntext1 = doc1.get(\"text\", type=Text)\narray1 = doc1.get(\"array\", type=Array)\nmap1 = doc1.get(\"map\", type=Map)\n\nprint(f\"Doc1 Text: {text1}\")\nprint(f\"Doc1 Array: {array1}\")\nprint(f\"Doc1 Map: {map1}\")\n\n# Make further changes on doc1 concurrently\nwith doc1.transaction():\n    text1.insert(5, \" world\")\n    array1.append()\n    map1[\"key2\"] = \"value2\"\n\n# Get updates from doc1, relative to doc0's initial state for merging\nupdates_from_doc1 = doc1.get_update(doc0.get_state())\n\n# Apply updates from doc1 back to doc0\ndoc0.apply_update(updates_from_doc1)\n\n# Verify doc0 has the merged state\nprint(f\"Doc0 Text (merged): {doc0.get('text', type=Text)}\")\nprint(f\"Doc0 Array (merged): {doc0.get('array', type=Array)}\")\nprint(f\"Doc0 Map (merged): {doc0.get('map', type=Map)}\")","lang":"python","description":"This quickstart demonstrates how to initialize a `pycrdt.Doc`, interact with its shared data types (`Text`, `Array`, `Map`), and synchronize changes between two document replicas by exchanging updates.","tag":null,"tag_description":null,"last_tested":"2026-04-25","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-14","installed_version":"0.12.36","pypi_latest":"0.13.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":90,"avg_install_s":2.5,"avg_import_s":0.37,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pycrdt","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.3,"mem_mb":9.1,"disk_size":"23.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pycrdt","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.28,"mem_mb":9.1,"disk_size":"23.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pycrdt","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.7,"import_time_s":0.19,"mem_mb":9.1,"disk_size":"23M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pycrdt","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.2,"mem_mb":9.1,"disk_size":"23M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pycrdt","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.37,"mem_mb":9.9,"disk_size":"25.3M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pycrdt","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.42,"mem_mb":9.9,"disk_size":"25.3M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pycrdt","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.3,"import_time_s":0.33,"mem_mb":9.9,"disk_size":"25M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pycrdt","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.36,"mem_mb":9.9,"disk_size":"25M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pycrdt","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.57,"mem_mb":10.2,"disk_size":"17.1M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pycrdt","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.66,"mem_mb":10.2,"disk_size":"17.0M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pycrdt","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.57,"mem_mb":10.2,"disk_size":"17M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pycrdt","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.69,"mem_mb":10.2,"disk_size":"17M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pycrdt","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.27,"mem_mb":8.3,"disk_size":"16.4M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pycrdt","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.29,"mem_mb":8.3,"disk_size":"16.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pycrdt","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.27,"mem_mb":8.3,"disk_size":"16M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pycrdt","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.31,"mem_mb":8.3,"disk_size":"16M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pycrdt","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pycrdt","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pycrdt","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.2,"import_time_s":0.26,"mem_mb":8.7,"disk_size":"23M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pycrdt","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.27,"mem_mb":8.7,"disk_size":"23M"}]}}