{
  "_id": "6a49b372dbd0482285eb5b01",
  "Package": "mx.client",
  "Type": "Package",
  "Title": "Stateful Matrix Client Helpers",
  "Version": "0.1.1",
  "Date": "2026-06-13",
  "Authors@R": "c(\nperson(\"Troy\", \"Hernandez\", role = c(\"aut\", \"cre\"),\nemail = \"troy@cornball.ai\",\ncomment = c(ORCID = \"0009-0005-4248-604X\")),\nperson(\"cornball.ai\", role = \"cph\"))",
  "Description": "Stateful helpers for building 'Matrix'\n(<https://matrix.org>) chat clients in R. Builds on the\nlow-level 'mx.api' Client-Server API bindings, adding local\nconfiguration persistence, room resolution, sync cursor\nhandling, sync-event extraction, invite acceptance, a\nconservative Markdown-to-HTML converter for formatted messages,\nand 'Olm'/'Megolm' end-to-end encryption orchestration over the\noptional 'mx.crypto' package.",
  "License": "Apache License (>= 2)",
  "URL": "https://github.com/cornball-ai/mx.client",
  "BugReports": "https://github.com/cornball-ai/mx.client/issues",
  "VignetteBuilder": "simplermarkdown",
  "Encoding": "UTF-8",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-06-19 18:39:14 UTC",
    "User": "root"
  },
  "Author": "Troy Hernandez [aut, cre] (ORCID:\n<https://orcid.org/0009-0005-4248-604X>), cornball.ai [cph]",
  "Maintainer": "Troy Hernandez <troy@cornball.ai>",
  "Repository": "https://cran.r-universe.dev",
  "Date/Publication": "2026-06-19 15:50:07 UTC",
  "RemoteUrl": "https://github.com/cran/mx.client",
  "RemoteRef": "HEAD",
  "RemoteSha": "f65dd1f9988e54ed78770f49b93f0334f54ab273",
  "_user": "cran",
  "_type": "src",
  "_file": "mx.client_0.1.1.tar.gz",
  "_fileid": "https://r2.ropensci.org/8280a564fee93bcc25257cc4359a6a99d412bf1b54ab4fb3af1ac03b8d50155d",
  "_filesize": 205015,
  "_sha256": "8280a564fee93bcc25257cc4359a6a99d412bf1b54ab4fb3af1ac03b8d50155d",
  "_expires": "2026-10-13T01:29:20.000Z",
  "_created": "2026-06-19T18:39:14.000Z",
  "_published": "2026-07-05T01:29:22.162Z",
  "_jobs": [
    {
      "job": 85182559960,
      "time": 95,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7756413945"
    },
    {
      "job": 85182559859,
      "time": 100,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7756414885"
    },
    {
      "job": 85182559645,
      "time": 147,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7756390281"
    },
    {
      "job": 85182559749,
      "time": 93,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7756412889"
    }
  ],
  "_host": "GitHub-Actions",
  "_buildurl": "https://github.com/r-universe/cran/actions/runs/27842629258",
  "_status": "success",
  "_upstream": "https://github.com/cran/mx.client",
  "_commit": {
    "id": "f65dd1f9988e54ed78770f49b93f0334f54ab273",
    "author": "Troy Hernandez <troy@cornball.ai>",
    "committer": "cran-robot <csardi.gabor+cran@gmail.com>",
    "message": "version 0.1.1\n",
    "time": 1781884207
  },
  "_maintainer": {
    "name": "Troy Hernandez",
    "email": "troy@cornball.ai",
    "login": "troyhernandez",
    "description": "",
    "uuid": 5670773
  },
  "_distro": "noble",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.0",
      "role": "Depends"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "mx.api",
      "version": ">= 0.3.0",
      "role": "Imports"
    },
    {
      "package": "stats",
      "role": "Imports"
    },
    {
      "package": "tools",
      "role": "Imports"
    },
    {
      "package": "utils",
      "role": "Imports"
    },
    {
      "package": "mx.crypto",
      "role": "Suggests"
    },
    {
      "package": "simplermarkdown",
      "role": "Suggests"
    },
    {
      "package": "tinytest",
      "role": "Suggests"
    }
  ],
  "_owner": "cran",
  "_selfowned": false,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-25",
      "n": 1
    }
  ],
  "_tags": [
    {
      "name": "0.1.1",
      "date": "2026-06-19"
    }
  ],
  "_stars": 0,
  "_contributors": [
    {
      "user": "troyhernandez",
      "count": 1,
      "uuid": 5670773
    }
  ],
  "_userbio": {
    "uuid": 6899542,
    "type": "organization",
    "name": "cran",
    "followers": 610,
    "description": "Unofficial read-only mirror of all CRAN R packages"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/mx.client"
  },
  "_devurl": "https://github.com/cornball-ai/mx.client",
  "_searchresults": 0,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/mx.client.html",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_cranurl": false,
  "_releases": [
    {
      "version": "0.1.1",
      "date": "2026-06-19"
    }
  ],
  "_exports": [
    "mx_accept_invites",
    "mx_client_config_path",
    "mx_client_configure",
    "mx_client_from_config",
    "mx_client_legacy_config_path",
    "mx_client_load",
    "mx_client_relogin",
    "mx_client_save",
    "mx_client_session",
    "mx_crypto_account",
    "mx_crypto_account_save",
    "mx_crypto_claim_otks",
    "mx_crypto_decrypt_event",
    "mx_crypto_device_keys",
    "mx_crypto_encrypt_event",
    "mx_crypto_encrypt_for_devices",
    "mx_crypto_handle_to_device",
    "mx_crypto_inbound_session",
    "mx_crypto_known_devices",
    "mx_crypto_process_sync",
    "mx_crypto_publish_keys",
    "mx_crypto_room_key_payload",
    "mx_crypto_sessions_load",
    "mx_crypto_sessions_new",
    "mx_crypto_sessions_save",
    "mx_crypto_store_dir",
    "mx_extract_invites",
    "mx_extract_reaction_verdict",
    "mx_extract_text_events",
    "mx_markdown_to_html",
    "mx_pill_mentions",
    "mx_resolve_room",
    "mx_room_encrypted",
    "mx_room_lookup_by_name",
    "mx_send_encrypted",
    "mx_send_media",
    "mx_send_text",
    "mx_sync_update",
    "mx_with_relogin"
  ],
  "_help": [
    {
      "page": "mx.client-package",
      "title": "Stateful Matrix Client Helpers",
      "topics": [
        "mx.client-package",
        "mx.client"
      ]
    },
    {
      "page": "mx_accept_invites",
      "title": "Accept pending Matrix room invites",
      "topics": [
        "mx_accept_invites"
      ]
    },
    {
      "page": "mx_client_config_path",
      "title": "Path to a Matrix client config file",
      "topics": [
        "mx_client_config_path"
      ]
    },
    {
      "page": "mx_client_configure",
      "title": "Configure and save a Matrix client",
      "topics": [
        "mx_client_configure"
      ]
    },
    {
      "page": "mx_client_from_config",
      "title": "Wrap a list as an mx.client config",
      "topics": [
        "mx_client_from_config"
      ]
    },
    {
      "page": "mx_client_legacy_config_path",
      "title": "Legacy Matrix config path for an application",
      "topics": [
        "mx_client_legacy_config_path"
      ]
    },
    {
      "page": "mx_client_load",
      "title": "Load a Matrix client config",
      "topics": [
        "mx_client_load"
      ]
    },
    {
      "page": "mx_client_relogin",
      "title": "Re-login with stored credentials and refresh the saved token",
      "topics": [
        "mx_client_relogin"
      ]
    },
    {
      "page": "mx_client_save",
      "title": "Save a Matrix client config",
      "topics": [
        "mx_client_save"
      ]
    },
    {
      "page": "mx_client_session",
      "title": "Build an mx.api session from a client config",
      "topics": [
        "mx_client_session"
      ]
    },
    {
      "page": "mx_crypto_account",
      "title": "Load or create this client's Olm account",
      "topics": [
        "mx_crypto_account"
      ]
    },
    {
      "page": "mx_crypto_account_save",
      "title": "Persist an Olm account to the store",
      "topics": [
        "mx_crypto_account_save"
      ]
    },
    {
      "page": "mx_crypto_claim_otks",
      "title": "Claim a one-time key for each device",
      "topics": [
        "mx_crypto_claim_otks"
      ]
    },
    {
      "page": "mx_crypto_decrypt_event",
      "title": "Decrypt an m.room.encrypted event (Megolm)",
      "topics": [
        "mx_crypto_decrypt_event"
      ]
    },
    {
      "page": "mx_crypto_device_keys",
      "title": "Build a signed device_keys object for upload",
      "topics": [
        "mx_crypto_device_keys"
      ]
    },
    {
      "page": "mx_crypto_encrypt_event",
      "title": "Encrypt event content for a room (Megolm)",
      "topics": [
        "mx_crypto_encrypt_event"
      ]
    },
    {
      "page": "mx_crypto_encrypt_for_devices",
      "title": "Encrypt an event for an encrypted room's devices",
      "topics": [
        "mx_crypto_encrypt_for_devices"
      ]
    },
    {
      "page": "mx_crypto_handle_to_device",
      "title": "Decrypt an inbound Olm to-device payload",
      "topics": [
        "mx_crypto_handle_to_device"
      ]
    },
    {
      "page": "mx_crypto_inbound_session",
      "title": "Build an inbound Megolm session from a shared room key",
      "topics": [
        "mx_crypto_inbound_session"
      ]
    },
    {
      "page": "mx_crypto_known_devices",
      "title": "List the devices (and identity keys) of some users",
      "topics": [
        "mx_crypto_known_devices"
      ]
    },
    {
      "page": "mx_crypto_process_sync",
      "title": "Process a sync response: store room keys, decrypt room events",
      "topics": [
        "mx_crypto_process_sync"
      ]
    },
    {
      "page": "mx_crypto_publish_keys",
      "title": "Publish this device's identity and one-time keys",
      "topics": [
        "mx_crypto_publish_keys"
      ]
    },
    {
      "page": "mx_crypto_room_key_payload",
      "title": "Encrypt a Megolm room key to one device as a to-device payload",
      "topics": [
        "mx_crypto_room_key_payload"
      ]
    },
    {
      "page": "mx_crypto_sessions_load",
      "title": "Load a session set from the crypto store",
      "topics": [
        "mx_crypto_sessions_load"
      ]
    },
    {
      "page": "mx_crypto_sessions_new",
      "title": "Create an empty E2EE session set",
      "topics": [
        "mx_crypto_sessions_new"
      ]
    },
    {
      "page": "mx_crypto_sessions_save",
      "title": "Persist a session set to the crypto store",
      "topics": [
        "mx_crypto_sessions_save"
      ]
    },
    {
      "page": "mx_crypto_store_dir",
      "title": "Directory holding this client's encryption state",
      "topics": [
        "mx_crypto_store_dir"
      ]
    },
    {
      "page": "mx_extract_invites",
      "title": "Extract pending invite room ids from a sync response",
      "topics": [
        "mx_extract_invites"
      ]
    },
    {
      "page": "mx_extract_reaction_verdict",
      "title": "Extract a reaction approval verdict from sync events",
      "topics": [
        "mx_extract_reaction_verdict"
      ]
    },
    {
      "page": "mx_extract_text_events",
      "title": "Extract text message events from a sync response",
      "topics": [
        "mx_extract_text_events"
      ]
    },
    {
      "page": "mx_markdown_to_html",
      "title": "Convert a conservative markdown subset to Matrix custom HTML",
      "topics": [
        "mx_markdown_to_html"
      ]
    },
    {
      "page": "mx_pill_mentions",
      "title": "Turn textual @mentions into matrix.to pills",
      "topics": [
        "mx_pill_mentions"
      ]
    },
    {
      "page": "mx_resolve_room",
      "title": "Resolve a room id, name, or default room",
      "topics": [
        "mx_resolve_room"
      ]
    },
    {
      "page": "mx_room_encrypted",
      "title": "Is a room end-to-end encrypted?",
      "topics": [
        "mx_room_encrypted"
      ]
    },
    {
      "page": "mx_room_lookup_by_name",
      "title": "Look up a joined room by display name",
      "topics": [
        "mx_room_lookup_by_name"
      ]
    },
    {
      "page": "mx_send_encrypted",
      "title": "Send an end-to-end encrypted message to a room",
      "topics": [
        "mx_send_encrypted"
      ]
    },
    {
      "page": "mx_send_media",
      "title": "Send a media file to a Matrix room",
      "topics": [
        "mx_send_media"
      ]
    },
    {
      "page": "mx_send_text",
      "title": "Send plain text to a Matrix room",
      "topics": [
        "mx_send_text"
      ]
    },
    {
      "page": "mx_sync_update",
      "title": "Sync once and update the stored cursor",
      "topics": [
        "mx_sync_update"
      ]
    },
    {
      "page": "mx_with_relogin",
      "title": "Run a client operation, re-logging in once on an expired token",
      "topics": [
        "mx_with_relogin"
      ]
    }
  ],
  "_readme": "https://github.com/cran/mx.client/raw/HEAD/README.md",
  "_rundeps": [
    "curl",
    "jsonlite",
    "mx.api"
  ],
  "_vignettes": [
    {
      "source": "e2ee.md",
      "filename": "e2ee.html",
      "title": "End-to-end encryption",
      "engine": "simplermarkdown::mdweave_to_html",
      "headings": [
        "title: \"End-to-end encryption\"",
        "End-to-end encryption",
        "Security model",
        "The pieces",
        "Setup: a device with published keys",
        "Sending",
        "Receiving",
        "Persistence",
        "Marking a room encrypted"
      ],
      "created": "2026-06-19 15:50:07",
      "modified": "2026-06-19 15:50:07",
      "commits": 1
    }
  ],
  "_score": 2.6989700043360187,
  "_indexed": true,
  "_nocasepkg": "mx.client",
  "_universes": [
    "cran",
    "troyhernandez",
    "cornball-ai"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.1.1",
      "date": "2026-06-19T18:40:55.000Z",
      "distro": "noble",
      "commit": "f65dd1f9988e54ed78770f49b93f0334f54ab273",
      "fileid": "https://r2.ropensci.org/6245a36de2f43bba2e39be18450d90c81cf6d8ebc0f401a7bf8918748054da63",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/27842629258"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.1.1",
      "date": "2026-06-19T18:40:57.000Z",
      "distro": "noble",
      "commit": "f65dd1f9988e54ed78770f49b93f0334f54ab273",
      "fileid": "https://r2.ropensci.org/a627a544d2307a2e466026b684684226e7700ac27120ceb9d0ea794159d59b58",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/27842629258"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.1.1",
      "date": "2026-06-19T18:41:01.000Z",
      "commit": "f65dd1f9988e54ed78770f49b93f0334f54ab273",
      "fileid": "https://r2.ropensci.org/e73c58285e87634b47633993acad5fb1ed2fa457635066375c17b67f6c93ce8a",
      "status": "success",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/27842629258"
    }
  ]
}