{
  "_id": "6a10183cacfb0bcc41c8559c",
  "Package": "jgd",
  "Title": "JSON Graphics Device",
  "Version": "0.1.0.99",
  "Authors@R": "c(\nperson(\"Grant\", \"McDermott\", role = c(\"aut\", \"cre\"),\nemail = \"contact@grantmcdermott.com\"),\nperson(\"Tatsuya\", \"Shima\", role = \"aut\",\nemail = \"ts1s1andn@gmail.com\"),\nperson(\"Dave\", \"Gamble\", role = \"cph\",\ncomment = \"cJSON library in src/cjson/\"),\nperson(\"cJSON contributors\", role = \"cph\",\ncomment = \"cJSON library in src/cjson/\")\n)",
  "Description": "A graphics device that translates R plotting operations\ninto JSON and streams them over a local connection to an\nexternal display application. The device acts as a pure\nrecorder with no rendering dependencies; all rendering occurs\nin that application (e.g. a 'VS Code' extension or a web\nbrowser). Official display applications are available from the\nproject homepage.",
  "License": "MIT + file LICENSE",
  "Copyright": "file inst/COPYRIGHTS",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "RoxygenNote": "7.3.3",
  "NeedsCompilation": "yes",
  "URL": "https://github.com/grantmcdermott/jgd",
  "BugReports": "https://github.com/grantmcdermott/jgd/issues",
  "Config/testthat/edition": "3",
  "Repository": "https://grantmcdermott.r-universe.dev",
  "Date/Publication": "2026-05-15 00:55:24 UTC",
  "RemoteUrl": "https://github.com/grantmcdermott/jgd",
  "RemoteRef": "HEAD",
  "RemoteSha": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
  "RemoteSubdir": "r-pkg",
  "Packaged": {
    "Date": "2026-05-15 02:36:43 UTC",
    "User": "root"
  },
  "Author": "Grant McDermott [aut, cre],\nTatsuya Shima [aut],\nDave Gamble [cph] (cJSON library in src/cjson/),\ncJSON contributors [cph] (cJSON library in src/cjson/)",
  "Maintainer": "Grant McDermott <contact@grantmcdermott.com>",
  "MD5sum": "87ba39876b7b483cbe5a7ad5f51e6fcd",
  "_user": "grantmcdermott",
  "_type": "src",
  "_file": "jgd_0.1.0.99.tar.gz",
  "_fileid": "cf7cecdce2d6621646d723aa12cc165d46e9949d16192d9c4fdb0e7cb7e90bd3",
  "_filesize": 245315,
  "_sha256": "cf7cecdce2d6621646d723aa12cc165d46e9949d16192d9c4fdb0e7cb7e90bd3",
  "_created": "2026-05-15T02:36:43.000Z",
  "_published": "2026-05-22T08:47:56.292Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 77346638123,
      "time": 245,
      "config": "linux-devel-arm64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7009084902"
    },
    {
      "job": 77346637899,
      "time": 237,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7009083764"
    },
    {
      "job": 77346638381,
      "time": 242,
      "config": "linux-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7009084560"
    },
    {
      "job": 77346638248,
      "time": 266,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7009089200"
    },
    {
      "job": 77346638461,
      "time": 201,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7009077982"
    },
    {
      "job": 77346638314,
      "time": 286,
      "config": "macos-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7009091520"
    },
    {
      "job": 77346638230,
      "time": 225,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7009081830"
    },
    {
      "job": 77346638049,
      "time": 291,
      "config": "macos-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7009092133"
    },
    {
      "job": 77346637460,
      "time": 150,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7009046140"
    },
    {
      "job": 77346637386,
      "time": 90,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7156500575"
    },
    {
      "job": 77346638274,
      "time": 211,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7009079611"
    },
    {
      "job": 77346638165,
      "time": 155,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7009071069"
    },
    {
      "job": 77346638365,
      "time": 160,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7009071731"
    }
  ],
  "_buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/grantmcdermott/jgd",
  "_commit": {
    "id": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
    "author": "eitsupi <50911393+eitsupi@users.noreply.github.com>",
    "committer": "GitHub <noreply@github.com>",
    "message": "tests: Use headless arf for E2E tests and retire Rscript based harness (#62)\n\n## Why\nThe previous E2E suite drove R through `runR`/`startR` (one-shot or spawn-and-pipe Rscript helpers). That batch-style harness made browser↔R round-trip flows hard to express: each step has to know its position in a pre-baked Rscript, and resize/history regressions ended up depending on fixed sleeps to align browser and R.\n\nThis PR moves the E2E tests to an `arf ipc`-driven session model so a single test can explicitly interleave:\n\n1. an R-side draw or `library(jgd); jgd(...)` call,\n2. a browser action (resize, plotIndex resize, navigation),\n3. an R-side `.Call(jgd:::C_jgd_poll_resize)` / replay step,\n4. an assertion against the WebSocket frame or canvas.\n\nIt also adds dedicated regression coverage for historical-plot resize and a few previously-flaky scenarios that the new harness can finally express cleanly.\n\n## What changed\n\n### Harness\n- **`tests/helpers/arf_session.ts`** — new `ArfSession` class wrapping `arf headless` + `arf ipc eval/shutdown` with explicit startup, eval, and shutdown lifecycle. Failures during startup (timeout, invalid ready JSON, spawn errors) tear the child down rather than leak it, and shutdown still kills the headless process even when `arf ipc shutdown` cannot be spawned.\n- **`tests/helpers/arf_e2e.ts`** — shared `startArfBrowserTest` / `startArfPageTest` setup contexts, `sendResizeAndPoll` / `sendPlotIndexResizeAndPoll` helpers, and `assertNoExtraFrameBeforePong` for negative assertions. Cleanup runs even when setup fails partway through.\n- **`tests/helpers/arf_poll.ts`** — small `pollResize(arf, iterations)` helper so tests don't duplicate the same `for (i in 1:N) { .Call(jgd:::C_jgd_poll_resize); Sys.sleep(0.005) }` loop.\n- **`tests/helpers/r_process.ts`** — `runR`/`startR` removed. Only the socket-address helper and the R-availability check remain.\n\n### Deterministic resize synchronization\n- Resize tests no longer rely on `await delay(100)` before `po",
    "time": 1778806524
  },
  "_maintainer": {
    "name": "Grant McDermott",
    "email": "contact@grantmcdermott.com"
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "callr",
      "role": "Suggests"
    },
    {
      "package": "ggplot2",
      "role": "Suggests"
    },
    {
      "package": "jsonlite",
      "role": "Suggests"
    },
    {
      "package": "processx",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    }
  ],
  "_owner": "grantmcdermott",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-06",
      "n": 24
    },
    {
      "week": "2026-07",
      "n": 31
    },
    {
      "week": "2026-08",
      "n": 5
    },
    {
      "week": "2026-09",
      "n": 14
    },
    {
      "week": "2026-10",
      "n": 2
    },
    {
      "week": "2026-12",
      "n": 7
    },
    {
      "week": "2026-13",
      "n": 6
    },
    {
      "week": "2026-14",
      "n": 3
    },
    {
      "week": "2026-17",
      "n": 3
    },
    {
      "week": "2026-18",
      "n": 5
    },
    {
      "week": "2026-19",
      "n": 2
    },
    {
      "week": "2026-20",
      "n": 1
    }
  ],
  "_tags": [
    {
      "name": "nightly",
      "date": "2026-04-29"
    },
    {
      "name": "v0.1.0",
      "date": "2026-04-29"
    }
  ],
  "_stars": 46,
  "_contributors": [
    {
      "user": "eitsupi",
      "count": 308,
      "uuid": 50911393
    },
    {
      "user": "grantmcdermott",
      "count": 70,
      "uuid": 10285037
    }
  ],
  "_userbio": {
    "uuid": 10285037,
    "type": "user",
    "name": "Grant McDermott",
    "description": "Principal Economist at Amazon. Mix of economics, data science, and open source."
  },
  "_downloads": {
    "count": 228,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/jgd"
  },
  "_devurl": "https://github.com/grantmcdermott/jgd",
  "_searchresults": 26,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/jgd.html",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_realowner": "cran",
  "_cranurl": false,
  "_releases": [
    {
      "version": "0.1.0",
      "date": "2026-04-29"
    }
  ],
  "_exports": [
    "jgd",
    "jgd_begin_group",
    "jgd_discover",
    "jgd_end_group",
    "jgd_ext",
    "jgd_frame_ext",
    "jgd_server_info",
    "with_jgd_ext",
    "with_jgd_frame_ext",
    "with_jgd_group"
  ],
  "_help": [
    {
      "page": "jgd",
      "title": "JSON Graphics Device",
      "topics": [
        "jgd"
      ]
    },
    {
      "page": "jgd_begin_group",
      "title": "Begin a drawing group (experimental)",
      "topics": [
        "jgd_begin_group"
      ]
    },
    {
      "page": "jgd_discover",
      "title": "Discover a running jgd server",
      "topics": [
        "jgd_discover"
      ]
    },
    {
      "page": "jgd_end_group",
      "title": "End a drawing group (experimental)",
      "topics": [
        "jgd_end_group"
      ]
    },
    {
      "page": "jgd_ext",
      "title": "Set extended graphics context (experimental)",
      "topics": [
        "jgd_ext"
      ]
    },
    {
      "page": "jgd_frame_ext",
      "title": "Set frame-level extension fields (experimental)",
      "topics": [
        "jgd_frame_ext"
      ]
    },
    {
      "page": "jgd_server_info",
      "title": "Get server information",
      "topics": [
        "jgd_server_info"
      ]
    },
    {
      "page": "jgd_spec",
      "title": "jgd JSONL Protocol Specification",
      "topics": [
        "jgd_protocol",
        "jgd_spec"
      ]
    },
    {
      "page": "with_jgd_ext",
      "title": "Scoped extended graphics context (experimental)",
      "topics": [
        "with_jgd_ext"
      ]
    },
    {
      "page": "with_jgd_frame_ext",
      "title": "Scoped frame-level extension fields (experimental)",
      "topics": [
        "with_jgd_frame_ext"
      ]
    },
    {
      "page": "with_jgd_group",
      "title": "Scoped drawing group (experimental)",
      "topics": [
        "with_jgd_group"
      ]
    }
  ],
  "_readme": "https://github.com/grantmcdermott/jgd/raw/HEAD/README.md",
  "_rundeps": [],
  "_score": 4.855882430036036,
  "_indexed": false,
  "_nocasepkg": "jgd",
  "_universes": [
    "grantmcdermott"
  ],
  "_indexurl": "https://cran.r-universe.dev/jgd",
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:38:53.000Z",
      "distro": "noble",
      "arch": "aarch64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "5e805558cc777b5a7ec7110ca9a151a44789ca1b9254f341b77c2f10e00c4a6f",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:38:39.000Z",
      "distro": "noble",
      "arch": "x86_64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "f15de6451aaa1e4e151b5abdafef8cd667990cdf5fe3d47de7fbede75cb1e321",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:38:50.000Z",
      "distro": "noble",
      "arch": "aarch64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "3779310bf8394130225f61e0afdc60b9c7c5a3503cbd0413bbc1b812c020acd4",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:39:12.000Z",
      "distro": "noble",
      "arch": "x86_64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "2952b613ffc2d086a8e840982506e9d6ed93322c4bbb338fa9e66bef68ec3a54",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:38:08.000Z",
      "arch": "aarch64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "85cf6bf224a2c77915a5eff44cb36ced5583444855cff68ccdb16460e341e6bd",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:39:14.000Z",
      "arch": "x86_64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "78debe38512857214c8d6232b2f055ef4240c78b0f31699b5e6a83ae5508ef64",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:38:22.000Z",
      "arch": "aarch64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "0bed0318da060b8b8a603998959dab8856703fc60b85fe2a07a914b5e76f258c",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:39:18.000Z",
      "arch": "x86_64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "5438ebd9e75a4bf600c9ca49d5b22a4feb53b2640d8bf6f3862584ce79ae3596",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:38:26.000Z",
      "arch": "x86_64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "d9cfdbb707445c2dba7943fa94bc18181b064f3fa88ef5ecc17d802ed201a855",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:37:54.000Z",
      "arch": "x86_64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "fd7b6a2239c7ad3678c754143b957ab271a75cdd2f7356dde7d2e54f9ed093cc",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.1.0.99",
      "date": "2026-05-15T02:38:02.000Z",
      "arch": "x86_64",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "a0069948edd45b8b12fed99cf13d683b25ba0a3e342f69882e5e2ebe42892203",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.1.0.99",
      "date": "2026-05-22T08:47:37.000Z",
      "arch": "emscripten",
      "commit": "294a23e080bd729ca2277b86f7fbaa6bd4671bc6",
      "fileid": "4e1defaf5ee0a0899e06ead90f0440903bad19191b1149a187b9ef34b3664726",
      "status": "success",
      "buildurl": "https://github.com/r-universe/grantmcdermott/actions/runs/25897129022"
    }
  ]
}