{
  "_id": "6a63ae51a0832cf944e3d714",
  "Package": "shinychat",
  "Title": "Chat UI Component for 'shiny'",
  "Version": "0.4.0.9000",
  "Authors@R": "c(\nperson(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\nperson(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = \"aut\"),\nperson(\"Garrick\", \"Aden-Buie\", , \"garrick@adenbuie.com\", role = c(\"aut\", \"cre\"),\ncomment = c(ORCID = \"0000-0002-7111-0077\")),\nperson(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\",\ncomment = c(ORCID = \"0000-0001-9986-114X\")),\nperson(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"),\ncomment = c(ROR = \"03wc8by49\"))\n)",
  "Description": "Provides a scrolling chat interface with multiline input,\nsuitable for creating chatbot apps based on Large Language\nModels (LLMs). Designed to work particularly well with the\n'ellmer' R package for calling LLMs.",
  "License": "MIT + file LICENSE",
  "URL": "https://posit-dev.github.io/shinychat/r/,\nhttps://github.com/posit-dev/shinychat",
  "BugReports": "https://github.com/posit-dev/shinychat/issues",
  "Config/Needs/website": "tidyverse/tidytemplate, rmarkdown, weathR, gt,\nglue, bsicons",
  "Config/roxygen2/version": "8.0.0",
  "Config/testthat/edition": "3",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "Config/pak/sysreqs": "cmake make libuv1-dev libssl-dev zlib1g-dev",
  "Repository": "https://posit-dev.r-universe.dev",
  "Date/Publication": "2026-07-24 18:04:48 UTC",
  "RemoteUrl": "https://github.com/posit-dev/shinychat",
  "RemoteRef": "HEAD",
  "RemoteSha": "ad7d568bdb77540e33bbe0d1b76d76b6b6457914",
  "RemoteSubdir": "pkg-r",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-07-24 18:22:45 UTC",
    "User": "root"
  },
  "Author": "Joe Cheng [aut],\nCarson Sievert [aut],\nGarrick Aden-Buie [aut, cre] (ORCID:\n<https://orcid.org/0000-0002-7111-0077>),\nBarret Schloerke [aut] (ORCID: <https://orcid.org/0000-0001-9986-114X>),\nPosit Software, PBC [cph, fnd] (ROR: <https://ror.org/03wc8by49>)",
  "Maintainer": "Garrick Aden-Buie <garrick@adenbuie.com>",
  "_user": "posit-dev",
  "_type": "src",
  "_file": "shinychat_0.4.0.9000.tar.gz",
  "_fileid": "https://r2.ropensci.org/4a53c10d533c22d068f177a16f05b5e79b00564436af2b2ed6320e226bf35560",
  "_filesize": 1055541,
  "_sha256": "4a53c10d533c22d068f177a16f05b5e79b00564436af2b2ed6320e226bf35560",
  "_expires": "2026-11-01T18:26:23.000Z",
  "_created": "2026-07-24T18:22:45.000Z",
  "_published": "2026-07-24T18:26:25.188Z",
  "_jobs": [
    {
      "job": 89559027242,
      "time": 149,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "NOTE",
      "artifact": "8605754039"
    },
    {
      "job": 89559027168,
      "time": 149,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "NOTE",
      "artifact": "8605753807"
    },
    {
      "job": 89559027232,
      "time": 93,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "NOTE",
      "artifact": "8605745585"
    },
    {
      "job": 89559027205,
      "time": 120,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "NOTE",
      "artifact": "8605766454"
    },
    {
      "job": 89558220531,
      "time": 226,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "8605693960"
    },
    {
      "job": 89559027217,
      "time": 126,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "8605745860"
    },
    {
      "job": 89559027212,
      "time": 104,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "NOTE",
      "artifact": "8605736839"
    },
    {
      "job": 89559027208,
      "time": 110,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "NOTE",
      "artifact": "8605739190"
    },
    {
      "job": 89559027277,
      "time": 113,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "NOTE",
      "artifact": "8605741767"
    }
  ],
  "_host": "GitHub-Actions",
  "_buildurl": "https://github.com/r-universe/posit-dev/actions/runs/30116433952",
  "_status": "success",
  "_upstream": "https://github.com/posit-dev/shinychat",
  "_commit": {
    "id": "ad7d568bdb77540e33bbe0d1b76d76b6b6457914",
    "author": "Carson Sievert <cpsievert1@gmail.com>",
    "committer": "GitHub <noreply@github.com>",
    "message": "feat: make the browser the source of truth for chat messages (#272)\n\n* feat(js): report client-side message state at settle points and on submit\n\nRebuilds js/dist and copies to pkg-py/pkg-r asset directories.\n\n* feat(pkg-py): make client-reported message snapshot the source of truth for .messages()\n\n* feat(r): mirror client-authoritative UI state (FileConversationStore, HistoryController)\n\n* `air format` (GitHub Actions)\n\n* fix(test): wait for a new bookmark state id, not just any state id\n\ntest_bookmark_restore_preserves_user_messages raced: the bookmark URL\nupdate lags behind the reply becoming visible (it round-trips through a\nclient -> server messages snapshot), so wait_for_url could grab the\nfirst response's bookmark URL before the second one landed, flaking in\nCI on py 3.10/3.11/3.13.\n\n* fix(pkg-r): drive history save off client message report, not stream completion\n\nThe save was chained onto the stream-completion promise and isolate-read\nthe last-reported `_messages` snapshot, which the browser hasn't yet\nupdated with the just-finished assistant reply. That reply's node was\nrecorded with no UI and fell back to turn-derived markdown on restore,\nlosing any display-only transformation.\n\nReplace `chat_history_on_response` with an `observeEvent` on the\n`_messages` input (mirroring Python's `@reactive.event(chat.messages)`)\nthat saves only once the browser reports a settled transcript ending in an\nassistant message. Add a regression test that drives the save purely\nthrough the `_messages` echo and asserts the displayed (transformed) UI\nis stored, not the fallback.\n\n* docs(pkg-r): explain why R keeps replay-suppression flags alongside the count guard\n\nThe count guard is steady-state idempotency; the is_replaying /\nsuppress_next_save flags guard the restore transaction, which the count\ncheck does not. Python can drop its flags because it does not re-send UI\nto the client on restore the way R does.\n\n* fix(pkg-py): raise on malformed reported messages instead of silent",
    "time": 1784916288
  },
  "_maintainer": {
    "name": "Garrick Aden-Buie",
    "email": "garrick@adenbuie.com",
    "login": "gadenbuie",
    "mastodon": "@grrrck@fosstodon.org",
    "bluesky": "@grrrck.xyz",
    "description": "Software engineer for Shiny at @posit-pbc",
    "uuid": 5420529,
    "orcid": "0000-0002-7111-0077"
  },
  "_distro": "resolute",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "base64enc",
      "role": "Imports"
    },
    {
      "package": "bslib",
      "role": "Imports"
    },
    {
      "package": "cli",
      "role": "Imports"
    },
    {
      "package": "coro",
      "role": "Imports"
    },
    {
      "package": "ellmer",
      "version": ">= 0.4.1",
      "role": "Imports"
    },
    {
      "package": "fastmap",
      "role": "Imports"
    },
    {
      "package": "htmltools",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "lifecycle",
      "role": "Imports"
    },
    {
      "package": "promises",
      "version": ">= 1.3.2",
      "role": "Imports"
    },
    {
      "package": "R6",
      "version": ">= 2.5.0",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "S7",
      "role": "Imports"
    },
    {
      "package": "shiny",
      "version": ">= 1.10.0",
      "role": "Imports"
    },
    {
      "package": "covr",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "later",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    }
  ],
  "_owner": "posit-dev",
  "_selfowned": true,
  "_usedby": 4,
  "_updates": [
    {
      "week": "2025-31",
      "n": 1
    },
    {
      "week": "2025-32",
      "n": 11
    },
    {
      "week": "2025-33",
      "n": 2
    },
    {
      "week": "2025-34",
      "n": 4
    },
    {
      "week": "2025-36",
      "n": 9
    },
    {
      "week": "2025-37",
      "n": 29
    },
    {
      "week": "2025-40",
      "n": 3
    },
    {
      "week": "2025-42",
      "n": 1
    },
    {
      "week": "2025-45",
      "n": 1
    },
    {
      "week": "2025-46",
      "n": 1
    },
    {
      "week": "2025-47",
      "n": 7
    },
    {
      "week": "2025-48",
      "n": 3
    },
    {
      "week": "2025-49",
      "n": 1
    },
    {
      "week": "2026-02",
      "n": 1
    },
    {
      "week": "2026-03",
      "n": 1
    },
    {
      "week": "2026-07",
      "n": 1
    },
    {
      "week": "2026-10",
      "n": 2
    },
    {
      "week": "2026-11",
      "n": 1
    },
    {
      "week": "2026-12",
      "n": 4
    },
    {
      "week": "2026-14",
      "n": 5
    },
    {
      "week": "2026-15",
      "n": 1
    },
    {
      "week": "2026-16",
      "n": 3
    },
    {
      "week": "2026-17",
      "n": 2
    },
    {
      "week": "2026-18",
      "n": 5
    },
    {
      "week": "2026-19",
      "n": 3
    },
    {
      "week": "2026-20",
      "n": 6
    },
    {
      "week": "2026-21",
      "n": 9
    },
    {
      "week": "2026-22",
      "n": 8
    },
    {
      "week": "2026-23",
      "n": 3
    },
    {
      "week": "2026-24",
      "n": 6
    },
    {
      "week": "2026-25",
      "n": 5
    },
    {
      "week": "2026-26",
      "n": 7
    },
    {
      "week": "2026-27",
      "n": 6
    },
    {
      "week": "2026-28",
      "n": 1
    },
    {
      "week": "2026-30",
      "n": 1
    }
  ],
  "_tags": [
    {
      "name": "py/v0.1.0",
      "date": "2025-08-07"
    },
    {
      "name": "py/v0.2.0",
      "date": "2025-09-10"
    },
    {
      "name": "py/v0.2.1",
      "date": "2025-09-10"
    },
    {
      "name": "py/v0.2.2",
      "date": "2025-09-10"
    },
    {
      "name": "py/v0.2.3",
      "date": "2025-09-10"
    },
    {
      "name": "py/v0.2.4",
      "date": "2025-09-10"
    },
    {
      "name": "py/v0.2.5",
      "date": "2025-09-11"
    },
    {
      "name": "py/v0.2.6",
      "date": "2025-09-11"
    },
    {
      "name": "py/v0.2.7",
      "date": "2025-09-11"
    },
    {
      "name": "py/v0.2.8",
      "date": "2025-09-11"
    },
    {
      "name": "r/v0.3.0",
      "date": "2025-11-21"
    },
    {
      "name": "py/v0.2.9",
      "date": "2026-02-09"
    },
    {
      "name": "py/v0.3.0",
      "date": "2026-04-30"
    },
    {
      "name": "py/v0.3.1",
      "date": "2026-05-01"
    },
    {
      "name": "py/v0.3.2",
      "date": "2026-05-21"
    },
    {
      "name": "py/v0.4.0",
      "date": "2026-05-27"
    },
    {
      "name": "r/v0.4.0",
      "date": "2026-06-01"
    },
    {
      "name": "py/v0.5.0",
      "date": "2026-06-15"
    },
    {
      "name": "py/v0.5.1",
      "date": "2026-06-15"
    },
    {
      "name": "py/v0.6.0",
      "date": "2026-07-06"
    }
  ],
  "_stars": 134,
  "_contributors": [
    {
      "user": "gadenbuie",
      "count": 98,
      "uuid": 5420529
    },
    {
      "user": "cpsievert",
      "count": 94,
      "uuid": 1365941
    },
    {
      "user": "jcheng5",
      "count": 38,
      "uuid": 129551
    },
    {
      "user": "schloerke",
      "count": 8,
      "uuid": 93231
    },
    {
      "user": "deepanshkhurana",
      "count": 1,
      "uuid": 26517718
    },
    {
      "user": "elnelson575",
      "count": 1,
      "uuid": 16469084
    },
    {
      "user": "harshit28j",
      "count": 1,
      "uuid": 48647625
    },
    {
      "user": "karangattu",
      "count": 1,
      "uuid": 4220325
    },
    {
      "user": "markmcd",
      "count": 1,
      "uuid": 109308
    },
    {
      "user": "thisisnic",
      "count": 1,
      "uuid": 13715823
    },
    {
      "user": "skaltman",
      "count": 1,
      "uuid": 18153457
    },
    {
      "user": "simonpcouch",
      "count": 1,
      "uuid": 35748691
    }
  ],
  "_userbio": {
    "uuid": 107264312,
    "type": "organization",
    "name": "posit-dev",
    "followers": 996
  },
  "_downloads": {
    "count": 2983,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/shinychat"
  },
  "_devurl": "https://github.com/posit-dev/shinychat",
  "_pkgdown": "https://posit-dev.github.io/shinychat/r/",
  "_searchresults": 352,
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "extra/shinychat.html",
    "LICENSE",
    "manual.pdf"
  ],
  "_homeurl": "https://github.com/posit-dev/shinychat",
  "_realowner": "posit-dev",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.1.1",
      "date": "2024-12-18"
    },
    {
      "version": "0.2.0",
      "date": "2025-05-16"
    },
    {
      "version": "0.3.0",
      "date": "2025-11-20"
    },
    {
      "version": "0.4.0",
      "date": "2026-06-01"
    }
  ],
  "_exports": [
    "chat_app",
    "chat_append",
    "chat_append_message",
    "chat_attachment",
    "chat_clear",
    "chat_enable_history",
    "chat_get_greeting",
    "chat_greeting",
    "chat_mod_server",
    "chat_mod_ui",
    "chat_restore",
    "chat_server",
    "chat_set_greeting",
    "chat_ui",
    "contents_shinychat",
    "ContentSlashCommand",
    "ConversationStore",
    "FileConversationStore",
    "history_options",
    "markdown_stream",
    "output_markdown_stream",
    "update_chat_user_input"
  ],
  "_help": [
    {
      "page": "chat_app",
      "title": "Open a live chat application in the browser",
      "topics": [
        "chat_app",
        "chat_server"
      ]
    },
    {
      "page": "chat_append",
      "title": "Append an assistant response (or user message) to a chat control",
      "topics": [
        "chat_append"
      ]
    },
    {
      "page": "chat_append_message",
      "title": "Low-level function to append a message to a chat control",
      "topics": [
        "chat_append_message"
      ]
    },
    {
      "page": "chat_attachment",
      "title": "Create an attachment from a local file path",
      "topics": [
        "chat_attachment"
      ]
    },
    {
      "page": "chat_clear",
      "title": "Clear all messages from a chat control",
      "topics": [
        "chat_clear"
      ]
    },
    {
      "page": "chat_enable_history",
      "title": "Enable conversation history for a chat",
      "topics": [
        "chat_enable_history"
      ]
    },
    {
      "page": "chat_get_greeting",
      "title": "Get the current greeting content",
      "topics": [
        "chat_get_greeting"
      ]
    },
    {
      "page": "chat_greeting",
      "title": "Create a greeting for a chat UI",
      "topics": [
        "chat_greeting"
      ]
    },
    {
      "page": "chat_restore",
      "title": "Add Shiny bookmarking for shinychat",
      "topics": [
        "chat_restore"
      ]
    },
    {
      "page": "chat_set_greeting",
      "title": "Set the greeting for a chat UI",
      "topics": [
        "chat_set_greeting"
      ]
    },
    {
      "page": "chat_ui",
      "title": "Create a chat UI element",
      "topics": [
        "chat_ui"
      ]
    },
    {
      "page": "contents_shinychat",
      "title": "Format ellmer content for shinychat",
      "topics": [
        "contents_shinychat"
      ]
    },
    {
      "page": "ContentSlashCommand",
      "title": "Slash command content",
      "topics": [
        "ContentSlashCommand"
      ]
    },
    {
      "page": "ConversationStore",
      "title": "Abstract base class for conversation storage backends",
      "topics": [
        "ConversationStore"
      ]
    },
    {
      "page": "FileConversationStore",
      "title": "File-based conversation storage backend",
      "topics": [
        "FileConversationStore"
      ]
    },
    {
      "page": "history_options",
      "title": "Configure chat history options",
      "topics": [
        "history_options"
      ]
    },
    {
      "page": "markdown_stream",
      "title": "Stream markdown content",
      "topics": [
        "markdown_stream"
      ]
    },
    {
      "page": "output_markdown_stream",
      "title": "Create a UI element for a markdown stream.",
      "topics": [
        "output_markdown_stream"
      ]
    },
    {
      "page": "update_chat_user_input",
      "title": "Update the user input of a chat control",
      "topics": [
        "update_chat_user_input"
      ]
    }
  ],
  "_pkglogo": "https://github.com/posit-dev/shinychat/raw/HEAD/pkg-r/man/figures/logo.svg",
  "_readme": "https://github.com/posit-dev/shinychat/raw/HEAD/pkg-r/README.md",
  "_rundeps": [
    "askpass",
    "base64enc",
    "bslib",
    "cachem",
    "cli",
    "commonmark",
    "coro",
    "curl",
    "digest",
    "ellmer",
    "fastmap",
    "fontawesome",
    "fs",
    "glue",
    "htmltools",
    "httpuv",
    "httr2",
    "jquerylib",
    "jsonlite",
    "later",
    "lifecycle",
    "magrittr",
    "memoise",
    "mime",
    "openssl",
    "otel",
    "pillar",
    "pkgconfig",
    "promises",
    "R6",
    "rappdirs",
    "Rcpp",
    "rlang",
    "S7",
    "sass",
    "shiny",
    "sourcetools",
    "sys",
    "tibble",
    "utf8",
    "vctrs",
    "withr",
    "xtable"
  ],
  "_score": 10.511912695097145,
  "_indexed": true,
  "_nocasepkg": "shinychat",
  "_universes": [
    "posit-dev",
    "gadenbuie"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.4.0.9000",
      "date": "2026-07-24T18:25:07.000Z",
      "distro": "resolute",
      "commit": "ad7d568bdb77540e33bbe0d1b76d76b6b6457914",
      "fileid": "https://r2.ropensci.org/1acd32a092c4b3e71fae4f61d9e582e461cd967824bc5b44324c05eb872ce8bf",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/30116433952"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.4.0.9000",
      "date": "2026-07-24T18:25:03.000Z",
      "distro": "resolute",
      "commit": "ad7d568bdb77540e33bbe0d1b76d76b6b6457914",
      "fileid": "https://r2.ropensci.org/6f3b14fcc67a2b19ecf61ef9b4f154a7e5626e514bda0ca2519fd3ec02604586",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/30116433952"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.4.0.9000",
      "date": "2026-07-24T18:24:47.000Z",
      "commit": "ad7d568bdb77540e33bbe0d1b76d76b6b6457914",
      "fileid": "https://r2.ropensci.org/baa3146205168189193aafef576eea966078156e4bf106149463738829c8b215",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/30116433952"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.4.0.9000",
      "date": "2026-07-24T18:25:32.000Z",
      "commit": "ad7d568bdb77540e33bbe0d1b76d76b6b6457914",
      "fileid": "https://r2.ropensci.org/9ef067dff0cb0df97a5ee24b3a720f91c1e211a6fd911c72f6d1d00d776410f7",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/30116433952"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.4.0.9000",
      "date": "2026-07-24T18:25:11.000Z",
      "commit": "ad7d568bdb77540e33bbe0d1b76d76b6b6457914",
      "fileid": "https://r2.ropensci.org/b5188661eb80ff9e96421973bd80bc83218b843454eb85cd633639b40e41e58d",
      "status": "success",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/30116433952"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.4.0.9000",
      "date": "2026-07-24T18:23:59.000Z",
      "commit": "ad7d568bdb77540e33bbe0d1b76d76b6b6457914",
      "fileid": "https://r2.ropensci.org/2390697cbb63a58be4c236107c8b3c1d33f915141cfddbf5d84bd2302801b716",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/30116433952"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.4.0.9000",
      "date": "2026-07-24T18:24:12.000Z",
      "commit": "ad7d568bdb77540e33bbe0d1b76d76b6b6457914",
      "fileid": "https://r2.ropensci.org/7fee9009b79d4f5795683544d0a2190af6d90bf6be43d758a5ad7efec1477ec8",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/30116433952"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "0.4.0.9000",
      "date": "2026-07-24T18:24:11.000Z",
      "commit": "ad7d568bdb77540e33bbe0d1b76d76b6b6457914",
      "fileid": "https://r2.ropensci.org/505583110100e0c6964b0d86840ea09f0a17616958dd386f438e93a6db443810",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/30116433952"
    }
  ]
}