{
  "_id": "6a646d4a059529545f577a0c",
  "Package": "livelink",
  "Title": "Create Shareable Links for 'webR' and 'Shinylive' Environments",
  "Version": "0.1.0",
  "Authors@R": "c(\nperson(\"James Joseph\", \"Balamuta\", , \"james.balamuta@gmail.com\", role = c(\"aut\", \"cre\", \"cph\")),\nperson(\"reprex authors\", role = \"cph\",\ncomment = \"stringify_expression() and trim_common_leading_ws(), adapted in R/process-input.R; see inst/COPYRIGHTS\")\n)",
  "Description": "Creates shareable links for 'R' code in 'WebAssembly'\n(WASM) Read-Eval-Print Loop (REPL) environments like 'webR'\n<https://webr.r-wasm.org/> and for 'Shiny' applications using\n'Shinylive' <https://shinylive.io/>. Supports single scripts,\nmulti-file projects, exercise and solution pairs, and batch\nprocessing. Includes encoding, decoding, and previewing of\nlinks for both 'R' and 'Python' environments.",
  "License": "AGPL (>= 3)",
  "URL": "https://r-pkg.thecoatlessprofessor.com/livelink/,\nhttps://github.com/coatless-rpkg/livelink",
  "BugReports": "https://github.com/coatless-rpkg/livelink/issues",
  "Encoding": "UTF-8",
  "SystemRequirements": "Quarto command line tools\n(https://github.com/quarto-dev/quarto-cli).",
  "Config/Needs/website": "pkgdown",
  "Config/testthat/edition": "3",
  "Roxygen": "list(markdown = TRUE)",
  "Collate": "'as-data-frame.R' 'build-webr-repl-link.R' 'classes.R'\n'decode-shinylive-link.R' 'utils.R' 'decode-webr-repl-link.R'\n'extract-link.R' 'format-methods.R' 'knit-print.R'\n'knitr-engine.R' 'options.R' 'process-input.R'\n'shinylive-link.R' 'validators.R' 'webr-repl-directory-links.R'\n'webr-repl-links.R'",
  "VignetteBuilder": "quarto",
  "Config/roxygen2/version": "8.0.0",
  "Config/pak/sysreqs": "libx11-dev",
  "Repository": "https://coatless-rpkg.r-universe.dev",
  "Date/Publication": "2026-07-21 02:29:40 UTC",
  "RemoteUrl": "https://github.com/coatless-rpkg/livelink",
  "RemoteRef": "HEAD",
  "RemoteSha": "924d273aa694403c754f2be3becbacde9d39efbf",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-07-25 07:57:38 UTC",
    "User": "root"
  },
  "Author": "James Joseph Balamuta [aut, cre, cph],\nreprex authors [cph] (stringify_expression() and\ntrim_common_leading_ws(), adapted in R/process-input.R; see\ninst/COPYRIGHTS)",
  "Maintainer": "James Joseph Balamuta <james.balamuta@gmail.com>",
  "_user": "coatless-rpkg",
  "_type": "src",
  "_file": "livelink_0.1.0.tar.gz",
  "_fileid": "https://r2.ropensci.org/f7aad2343120e7bb4821cce930df9017187641bbc95ba135527428a00586eec7",
  "_filesize": 465694,
  "_sha256": "f7aad2343120e7bb4821cce930df9017187641bbc95ba135527428a00586eec7",
  "_expires": "2026-11-02T08:01:13.000Z",
  "_created": "2026-07-25T07:57:38.000Z",
  "_published": "2026-07-25T08:01:14.772Z",
  "_jobs": [
    {
      "job": 89659299650,
      "time": 157,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "8617410441"
    },
    {
      "job": 89659299671,
      "time": 174,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "8617413226"
    },
    {
      "job": 89659299658,
      "time": 121,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "8617413101"
    },
    {
      "job": 89659299645,
      "time": 138,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "8617409982"
    },
    {
      "job": 89659033733,
      "time": 207,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "8617386857"
    },
    {
      "job": 89659299644,
      "time": 130,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "8617406288"
    },
    {
      "job": 89659299674,
      "time": 135,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "8617407305"
    },
    {
      "job": 89659299680,
      "time": 141,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "8617408256"
    },
    {
      "job": 89659299665,
      "time": 144,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "8617409012"
    }
  ],
  "_host": "GitHub-Actions",
  "_buildurl": "https://github.com/r-universe/coatless-rpkg/actions/runs/30150141957",
  "_status": "success",
  "_upstream": "https://github.com/coatless-rpkg/livelink",
  "_commit": {
    "id": "924d273aa694403c754f2be3becbacde9d39efbf",
    "author": "james.balamuta@gmail.com <james.balamuta@gmail.com>",
    "committer": "james.balamuta@gmail.com <james.balamuta@gmail.com>",
    "message": "Refresh figures and add share-button and two-ways diagrams\n",
    "time": 1784600980
  },
  "_maintainer": {
    "name": "James Joseph Balamuta",
    "email": "james.balamuta@gmail.com",
    "login": "coatless",
    "mastodon": "@coatless@mastodon.social",
    "linkedin": "in/jamesbalamuta",
    "twitter": "@axiomsofxyz",
    "description": "omnipresent explorer of the unknown, fashionably caffeinated informatics phd, amorous cavalier. design, build, analyze. #rstats #python @tmsalab",
    "uuid": 833642
  },
  "_distro": "resolute",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "base64enc",
      "role": "Imports"
    },
    {
      "package": "cli",
      "role": "Imports"
    },
    {
      "package": "clipr",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "lzstring",
      "role": "Imports"
    },
    {
      "package": "RcppMsgPack",
      "role": "Imports"
    },
    {
      "package": "stats",
      "role": "Imports"
    },
    {
      "package": "tools",
      "role": "Imports"
    },
    {
      "package": "utils",
      "role": "Imports"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "quarto",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    }
  ],
  "_owner": "coatless-rpkg",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-29",
      "n": 58
    },
    {
      "week": "2026-30",
      "n": 1
    }
  ],
  "_tags": [],
  "_topics": [
    "repl",
    "webassembly",
    "webr",
    "quarto"
  ],
  "_stars": 20,
  "_contributors": [
    {
      "user": "coatless",
      "count": 67,
      "uuid": 833642
    }
  ],
  "_userbio": {
    "uuid": 97069866,
    "type": "organization",
    "name": "Various R Packages",
    "followers": 23,
    "description": "R packages created by @coatless and contributors"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/livelink"
  },
  "_devurl": "https://github.com/coatless-rpkg/livelink",
  "_pkgdown": "https://r-pkg.thecoatlessprofessor.com/livelink/",
  "_quarto": true,
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/livelink.html",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_homeurl": "https://github.com/coatless-rpkg/livelink",
  "_realowner": "coatless-rpkg",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.1.0",
      "date": "2026-07-24"
    }
  ],
  "_exports": [
    "decode_shinylive_link",
    "decode_webr_link",
    "preview_shinylive_link",
    "preview_webr_link",
    "repl_urls",
    "set_webr_base_url",
    "shinylive_directory",
    "shinylive_project",
    "shinylive_py_link",
    "shinylive_r_link",
    "use_livelink_engine",
    "use_livelink_hook",
    "webr_repl_directory",
    "webr_repl_exercise",
    "webr_repl_link",
    "webr_repl_project"
  ],
  "_help": [
    {
      "page": "as.character.webr_link",
      "title": "Extract URLs as character vector",
      "topics": [
        "as.character.shinylive_decoded",
        "as.character.shinylive_decoded_batch",
        "as.character.shinylive_directory",
        "as.character.shinylive_link",
        "as.character.shinylive_preview",
        "as.character.shinylive_project",
        "as.character.webr_decoded",
        "as.character.webr_decoded_batch",
        "as.character.webr_directory",
        "as.character.webr_exercise",
        "as.character.webr_link",
        "as.character.webr_preview",
        "as.character.webr_project"
      ]
    },
    {
      "page": "as.data.frame.livelink",
      "title": "Turn a livelink container into a data frame",
      "topics": [
        "as.data.frame.livelink",
        "as.data.frame.shinylive_decoded_batch",
        "as.data.frame.shinylive_directory",
        "as.data.frame.webr_decoded_batch",
        "as.data.frame.webr_directory"
      ]
    },
    {
      "page": "decode_shinylive_link",
      "title": "Decode Shinylive link(s) to extract files to local directory",
      "topics": [
        "decode_shinylive_link"
      ]
    },
    {
      "page": "decode_webr_link",
      "title": "Decode webR REPL link(s) to extract files to local directory",
      "topics": [
        "decode_webr_link"
      ]
    },
    {
      "page": "format.livelink",
      "title": "Format a livelink object as a character vector",
      "topics": [
        "format.livelink",
        "format.shinylive_decoded",
        "format.shinylive_decoded_batch",
        "format.shinylive_directory",
        "format.shinylive_link",
        "format.shinylive_preview",
        "format.shinylive_project",
        "format.webr_decoded",
        "format.webr_decoded_batch",
        "format.webr_directory",
        "format.webr_exercise",
        "format.webr_link",
        "format.webr_preview",
        "format.webr_project"
      ]
    },
    {
      "page": "knit_print.livelink",
      "title": "Render livelink objects as links in knitted documents",
      "topics": [
        "knit_print.livelink",
        "knit_print.shinylive_directory",
        "knit_print.shinylive_link",
        "knit_print.shinylive_project",
        "knit_print.webr_directory",
        "knit_print.webr_exercise",
        "knit_print.webr_link",
        "knit_print.webr_project"
      ]
    },
    {
      "page": "livelink-knitr",
      "title": "Turn document chunks into shareable links",
      "topics": [
        "livelink-knitr",
        "use_livelink_engine",
        "use_livelink_hook"
      ]
    },
    {
      "page": "preview_shinylive_link",
      "title": "Preview Shinylive link contents without writing files to disk",
      "topics": [
        "preview_shinylive_link"
      ]
    },
    {
      "page": "preview_webr_link",
      "title": "Preview webR REPL link contents without writing files to disk",
      "topics": [
        "preview_webr_link"
      ]
    },
    {
      "page": "print.shinylive_decoded",
      "title": "Print method for shinylive_decoded objects",
      "topics": [
        "print.shinylive_decoded"
      ]
    },
    {
      "page": "print.shinylive_decoded_batch",
      "title": "Print method for shinylive_decoded_batch objects",
      "topics": [
        "print.shinylive_decoded_batch"
      ]
    },
    {
      "page": "print.shinylive_directory",
      "title": "Print method for shinylive_directory objects",
      "topics": [
        "print.shinylive_directory"
      ]
    },
    {
      "page": "print.shinylive_link",
      "title": "Print method for shinylive_link objects",
      "topics": [
        "print.shinylive_link"
      ]
    },
    {
      "page": "print.shinylive_preview",
      "title": "Print method for shinylive_preview objects",
      "topics": [
        "print.shinylive_preview"
      ]
    },
    {
      "page": "print.shinylive_project",
      "title": "Print method for shinylive_project objects",
      "topics": [
        "print.shinylive_project"
      ]
    },
    {
      "page": "print.webr_decoded",
      "title": "Print method for webr_decoded objects",
      "topics": [
        "print.webr_decoded"
      ]
    },
    {
      "page": "print.webr_decoded_batch",
      "title": "Print method for webr_decoded_batch objects",
      "topics": [
        "print.webr_decoded_batch"
      ]
    },
    {
      "page": "print.webr_directory",
      "title": "Print method for webr_directory objects",
      "topics": [
        "print.webr_directory"
      ]
    },
    {
      "page": "print.webr_exercise",
      "title": "Print method for webr_exercise objects",
      "topics": [
        "print.webr_exercise"
      ]
    },
    {
      "page": "print.webr_link",
      "title": "Print method for webr_link objects",
      "topics": [
        "print.webr_link"
      ]
    },
    {
      "page": "print.webr_preview",
      "title": "Print method for webr_preview objects",
      "topics": [
        "print.webr_preview"
      ]
    },
    {
      "page": "print.webr_project",
      "title": "Print method for webr_project objects",
      "topics": [
        "print.webr_project"
      ]
    },
    {
      "page": "repl_urls",
      "title": "Extract shareable URLs from livelink objects",
      "topics": [
        "repl_urls",
        "repl_urls.default"
      ]
    },
    {
      "page": "set_webr_base_url",
      "title": "Set global base URL for webR links",
      "topics": [
        "set_webr_base_url"
      ]
    },
    {
      "page": "shinylive_directory",
      "title": "Create Shinylive sharelinks from a directory of Shiny apps",
      "topics": [
        "shinylive_directory"
      ]
    },
    {
      "page": "shinylive_project",
      "title": "Create a Shinylive sharelink for multi-file projects",
      "topics": [
        "shinylive_project"
      ]
    },
    {
      "page": "shinylive_py_link",
      "title": "Create a Shinylive sharelink for Python Shiny apps",
      "topics": [
        "shinylive_py_link"
      ]
    },
    {
      "page": "shinylive_r_link",
      "title": "Create a Shinylive sharelink for R Shiny apps",
      "topics": [
        "shinylive_r_link"
      ]
    },
    {
      "page": "webr_repl_directory",
      "title": "Create webR REPL sharelinks from a directory of R files",
      "topics": [
        "webr_repl_directory"
      ]
    },
    {
      "page": "webr_repl_exercise",
      "title": "Create paired exercise and solution webR REPL links",
      "topics": [
        "webr_repl_exercise"
      ]
    },
    {
      "page": "webr_repl_link",
      "title": "Create a webR REPL sharelink from R code",
      "topics": [
        "webr_repl_link"
      ]
    },
    {
      "page": "webr_repl_project",
      "title": "Create webR REPL sharelink for multiple files",
      "topics": [
        "webr_repl_project"
      ]
    }
  ],
  "_readme": "https://github.com/coatless-rpkg/livelink/raw/HEAD/README.md",
  "_rundeps": [
    "base64enc",
    "BH",
    "cli",
    "clipr",
    "cpp11",
    "jsonlite",
    "lzstring",
    "Rcpp",
    "RcppMsgPack"
  ],
  "_vignettes": [
    {
      "source": "decoding-links.qmd",
      "filename": "decoding-links.html",
      "title": "Decoding and previewing links",
      "engine": "quarto::html",
      "headings": [
        "Look before you leap",
        "Extracting the files",
        "The round trip is lossless",
        "Shinylive links decode too",
        "Many links at once",
        "Reading links livelink did not create",
        "Getting just the URL"
      ],
      "created": "2026-07-14 05:30:50",
      "modified": "2026-07-17 03:58:43",
      "commits": 5
    },
    {
      "source": "getting-started.qmd",
      "filename": "getting-started.html",
      "title": "Getting Started with livelink",
      "engine": "quarto::html",
      "headings": [
        "The idea",
        "Your first link",
        "Comments and expression input",
        "Making it run on arrival",
        "Choosing what they see",
        "A Shiny app instead",
        "Why a string, and not a braced expression?",
        "What a link actually looks like",
        "Going the other way",
        "Links inside a document",
        "Where to next"
      ],
      "created": "2025-07-18 07:45:22",
      "modified": "2026-07-17 03:58:43",
      "commits": 13
    },
    {
      "source": "links-in-documents.qmd",
      "filename": "links-in-documents.html",
      "title": "Links inside documents",
      "engine": "quarto::html",
      "headings": [
        "The hook: output and a link",
        "The engine: a link, and no execution",
        "There is no {shinylive-r} chunk",
        "Chunk options",
        "echo does not do what you might think",
        "Setting options once",
        "Why not a braced expression?",
        "Every chunk option"
      ],
      "created": "2026-07-14 21:34:12",
      "modified": "2026-07-17 03:58:43",
      "commits": 9
    },
    {
      "source": "webr-and-shinylive.qmd",
      "filename": "webr-and-shinylive.html",
      "title": "Multi-file projects and Shiny apps",
      "engine": "quarto::html",
      "headings": [
        "webR projects",
        "Describing the files",
        "Write the list inside the call",
        "Running something on arrival",
        "Where the files land",
        "Shiny apps",
        "Why that chunk is not run",
        "Editor or app?",
        "mode is not panels",
        "Python",
        "A directory at a time",
        "How big can a link get?"
      ],
      "created": "2026-07-14 05:30:50",
      "modified": "2026-07-17 03:58:43",
      "commits": 8
    },
    {
      "source": "teaching.qmd",
      "filename": "teaching.html",
      "title": "Teaching with livelink",
      "engine": "quarto::html",
      "headings": [
        "Exercise and solution pairs",
        "Choosing what students see",
        "A whole folder of scripts",
        "One link per file, or one link for the folder?",
        "Embedding links in your notes",
        "Collecting work back in"
      ],
      "created": "2026-07-14 05:30:50",
      "modified": "2026-07-17 03:58:43",
      "commits": 10
    }
  ],
  "_score": 6,
  "_indexed": true,
  "_nocasepkg": "livelink",
  "_universes": [
    "coatless-rpkg",
    "coatless"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.1.0",
      "date": "2026-07-25T08:00:01.000Z",
      "distro": "resolute",
      "commit": "924d273aa694403c754f2be3becbacde9d39efbf",
      "fileid": "https://r2.ropensci.org/dc7d78276bcc45695a6c4c8a89018acad19f93359a332f1eaad3c5d0efbc1d22",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/coatless-rpkg/actions/runs/30150141957"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.1.0",
      "date": "2026-07-25T08:00:18.000Z",
      "distro": "resolute",
      "commit": "924d273aa694403c754f2be3becbacde9d39efbf",
      "fileid": "https://r2.ropensci.org/c607973413fb0a64f0b5571f141c8299122ca7c824fc62753815e032005d9376",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/coatless-rpkg/actions/runs/30150141957"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.1.0",
      "date": "2026-07-25T08:00:28.000Z",
      "commit": "924d273aa694403c754f2be3becbacde9d39efbf",
      "fileid": "https://r2.ropensci.org/e37fb5f4368c162d5a1a5f83fe497932acd98863c7e06ad784dc48bfb179024d",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/coatless-rpkg/actions/runs/30150141957"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.1.0",
      "date": "2026-07-25T08:00:06.000Z",
      "commit": "924d273aa694403c754f2be3becbacde9d39efbf",
      "fileid": "https://r2.ropensci.org/6fc53a6d08c19ee31bee7a189da05fc850fb2c298060440ac3f4352db93a7fe8",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/coatless-rpkg/actions/runs/30150141957"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.1.0",
      "date": "2026-07-25T08:00:00.000Z",
      "commit": "924d273aa694403c754f2be3becbacde9d39efbf",
      "fileid": "https://r2.ropensci.org/ae3d3f3055bbd40d1023843f260de31d69e83251d5f9ddf24ba28f3532d5523a",
      "status": "success",
      "buildurl": "https://github.com/r-universe/coatless-rpkg/actions/runs/30150141957"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.1.0",
      "date": "2026-07-25T07:59:33.000Z",
      "commit": "924d273aa694403c754f2be3becbacde9d39efbf",
      "fileid": "https://r2.ropensci.org/45180122f0df589f784cf091d874a0837f76a177b80b1c4a426ad84f06575f3c",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/coatless-rpkg/actions/runs/30150141957"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.1.0",
      "date": "2026-07-25T07:59:32.000Z",
      "commit": "924d273aa694403c754f2be3becbacde9d39efbf",
      "fileid": "https://r2.ropensci.org/e65c4f22c4f667cabc6a717852e30256851aa33be67b32b342604a8e7853189a",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/coatless-rpkg/actions/runs/30150141957"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "0.1.0",
      "date": "2026-07-25T07:59:39.000Z",
      "commit": "924d273aa694403c754f2be3becbacde9d39efbf",
      "fileid": "https://r2.ropensci.org/78b7e200aef886d5ac573ab125b781253de781c9a7cde78fabc697bf0f54b87a",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/coatless-rpkg/actions/runs/30150141957"
    }
  ]
}