{
  "_id": "6a1f01c3b401979e7341b0ed",
  "Type": "Package",
  "Package": "promises",
  "Title": "Abstractions for Promise-Based Asynchronous Programming",
  "Version": "1.5.0.9000",
  "Authors@R": "c(\nperson(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\nperson(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = c(\"aut\", \"cre\"),\ncomment = c(ORCID = \"0000-0001-9986-114X\")),\nperson(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\",\ncomment = c(ORCID = \"0000-0002-1576-2126\")),\nperson(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = \"aut\",\ncomment = c(ORCID = \"0000-0002-0750-061X\")),\nperson(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"),\ncomment = c(ROR = \"03wc8by49\"))\n)",
  "Description": "Provides fundamental abstractions for doing asynchronous\nprogramming in R using promises. Asynchronous programming is\nuseful for allowing a single R process to orchestrate multiple\ntasks in the background while also attending to something else.\nSemantics are similar to 'JavaScript' promises, but with a\nsyntax that is idiomatic R.",
  "License": "MIT + file LICENSE",
  "URL": "https://rstudio.github.io/promises/,\nhttps://github.com/rstudio/promises",
  "BugReports": "https://github.com/rstudio/promises/issues",
  "VignetteBuilder": "knitr",
  "Config/Needs/website": "rsconnect, tidyverse/tidytemplate",
  "Config/testthat/edition": "3",
  "Config/usethis/last-upkeep": "2025-05-27",
  "Encoding": "UTF-8",
  "Language": "en-US",
  "Roxygen": "list(markdown = TRUE)",
  "RoxygenNote": "7.3.3",
  "Repository": "https://rstudio.r-universe.dev",
  "Date/Publication": "2025-11-19 15:48:06 UTC",
  "RemoteUrl": "https://github.com/rstudio/promises",
  "RemoteRef": "HEAD",
  "RemoteSha": "2f70615f8c38f0b28f1088a08911ce2b1b0aa176",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-05-18 08:33:42 UTC",
    "User": "root"
  },
  "Author": "Joe Cheng [aut],\nBarret Schloerke [aut, cre] (ORCID:\n<https://orcid.org/0000-0001-9986-114X>),\nWinston Chang [aut] (ORCID: <https://orcid.org/0000-0002-1576-2126>),\nCharlie Gao [aut] (ORCID: <https://orcid.org/0000-0002-0750-061X>),\nPosit Software, PBC [cph, fnd] (ROR: <https://ror.org/03wc8by49>)",
  "Maintainer": "Barret Schloerke <barret@posit.co>",
  "MD5sum": "c7f41b2e55570b96ea4b60310b964c43",
  "_user": "rstudio",
  "_type": "src",
  "_file": "promises_1.5.0.9000.tar.gz",
  "_fileid": "2dba382df4c5ee8ea1a2d17c040f49d731f90621134868fd98f7cd98873d41a3",
  "_filesize": 3342695,
  "_sha256": "2dba382df4c5ee8ea1a2d17c040f49d731f90621134868fd98f7cd98873d41a3",
  "_created": "2026-05-18T08:33:42.000Z",
  "_published": "2026-06-02T16:16:03.334Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 79118110420,
      "time": 133,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7053084725"
    },
    {
      "job": 79118111141,
      "time": 127,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7053082706"
    },
    {
      "job": 79118111057,
      "time": 79,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7053066379"
    },
    {
      "job": 79118111219,
      "time": 121,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7053080340"
    },
    {
      "job": 79118110636,
      "time": 185,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7053039070"
    },
    {
      "job": 79118109736,
      "time": 111,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7363457929"
    },
    {
      "job": 79118111342,
      "time": 87,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7053068942"
    },
    {
      "job": 79118110992,
      "time": 84,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7053068103"
    },
    {
      "job": 79118111523,
      "time": 103,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7053074004"
    }
  ],
  "_buildurl": "https://github.com/r-universe/rstudio/actions/runs/26022331660",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/rstudio/promises",
  "_commit": {
    "id": "2f70615f8c38f0b28f1088a08911ce2b1b0aa176",
    "author": "Charlie Gao <53399081+shikokuchuo@users.noreply.github.com>",
    "committer": "GitHub <noreply@github.com>",
    "message": "Move C++ interface test to the later package (#204)\n\n* Remove C++ interface test - transferred to the later package\n\n* Regenerate testthat snapshots",
    "time": 1763567286
  },
  "_maintainer": {
    "name": "Barret Schloerke",
    "email": "barret@posit.co",
    "login": "schloerke",
    "bluesky": "@schloerke.bsky.social",
    "linkedin": "in/schloerke",
    "orcid": "0000-0001-9986-114X",
    "description": "",
    "uuid": 93231
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "fastmap",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "later",
      "role": "Imports"
    },
    {
      "package": "lifecycle",
      "role": "Imports"
    },
    {
      "package": "magrittr",
      "version": ">= 1.5",
      "role": "Imports"
    },
    {
      "package": "otel",
      "version": ">= 0.2.0",
      "role": "Imports"
    },
    {
      "package": "R6",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "role": "Imports"
    },
    {
      "package": "future",
      "version": ">= 1.21.0",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "mirai",
      "role": "Suggests"
    },
    {
      "package": "otelsdk",
      "version": ">= 0.2.0",
      "role": "Suggests"
    },
    {
      "package": "purrr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "spelling",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "vembedr",
      "role": "Suggests"
    }
  ],
  "_owner": "rstudio",
  "_selfowned": true,
  "_usedby": 2865,
  "_updates": [
    {
      "week": "2025-22",
      "n": 2
    },
    {
      "week": "2025-26",
      "n": 10
    },
    {
      "week": "2025-27",
      "n": 1
    },
    {
      "week": "2025-28",
      "n": 1
    },
    {
      "week": "2025-31",
      "n": 6
    },
    {
      "week": "2025-32",
      "n": 3
    },
    {
      "week": "2025-33",
      "n": 2
    },
    {
      "week": "2025-34",
      "n": 1
    },
    {
      "week": "2025-35",
      "n": 3
    },
    {
      "week": "2025-36",
      "n": 5
    },
    {
      "week": "2025-37",
      "n": 2
    },
    {
      "week": "2025-39",
      "n": 5
    },
    {
      "week": "2025-40",
      "n": 1
    },
    {
      "week": "2025-43",
      "n": 6
    },
    {
      "week": "2025-44",
      "n": 3
    },
    {
      "week": "2025-45",
      "n": 2
    },
    {
      "week": "2025-47",
      "n": 1
    }
  ],
  "_tags": [
    {
      "name": "v1.3.3",
      "date": "2025-06-24"
    },
    {
      "name": "v1.4.0",
      "date": "2025-10-22"
    },
    {
      "name": "v1.5.0",
      "date": "2025-11-05"
    }
  ],
  "_topics": [
    "promises"
  ],
  "_stars": 210,
  "_contributors": [
    {
      "user": "jcheng5",
      "count": 136,
      "uuid": 129551
    },
    {
      "user": "schloerke",
      "count": 60,
      "uuid": 93231
    },
    {
      "user": "wch",
      "count": 18,
      "uuid": 86978
    },
    {
      "user": "shikokuchuo",
      "count": 15,
      "uuid": 53399081
    },
    {
      "user": "gadenbuie",
      "count": 4,
      "uuid": 5420529
    },
    {
      "user": "copilot",
      "count": 2,
      "uuid": 198982749
    },
    {
      "user": "yihui",
      "count": 2,
      "uuid": 163582
    },
    {
      "user": "henrikbengtsson",
      "count": 2,
      "uuid": 1616850
    },
    {
      "user": "cpsievert",
      "count": 1,
      "uuid": 1365941
    },
    {
      "user": "cderv",
      "count": 1,
      "uuid": 6791940
    },
    {
      "user": "daattali",
      "count": 1,
      "uuid": 952340
    },
    {
      "user": "rpodcast",
      "count": 1,
      "uuid": 1043111
    },
    {
      "user": "maxheld83",
      "count": 1,
      "uuid": 5372770
    },
    {
      "user": "pawelru",
      "count": 1,
      "uuid": 12943682
    }
  ],
  "_userbio": {
    "uuid": 513560,
    "type": "organization",
    "name": "RStudio"
  },
  "_downloads": {
    "count": 698338,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/promises"
  },
  "_devurl": "https://github.com/rstudio/promises",
  "_pkgdown": "https://rstudio.github.io/promises/",
  "_searchresults": 1046,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/promises.html",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_homeurl": "https://github.com/rstudio/promises",
  "_realowner": "rstudio",
  "_cranurl": true,
  "_releases": [
    {
      "version": "1.0.1",
      "date": "2018-04-13"
    },
    {
      "version": "1.1.0",
      "date": "2019-10-05"
    },
    {
      "version": "1.1.1",
      "date": "2020-06-09"
    },
    {
      "version": "1.2.0.1",
      "date": "2021-02-11"
    },
    {
      "version": "1.2.1",
      "date": "2023-08-10"
    },
    {
      "version": "1.3.0",
      "date": "2024-04-05"
    },
    {
      "version": "1.3.1",
      "date": "2024-11-26"
    },
    {
      "version": "1.3.2",
      "date": "2024-11-28"
    },
    {
      "version": "1.3.3",
      "date": "2025-05-29"
    },
    {
      "version": "1.4.0",
      "date": "2025-10-22"
    },
    {
      "version": "1.5.0",
      "date": "2025-11-01"
    }
  ],
  "_exports": [
    "%...!%",
    "%...>%",
    "%...T!%",
    "%...T>%",
    "%>%",
    "%T>%",
    "as.promise",
    "catch",
    "finally",
    "future_promise",
    "future_promise_queue",
    "hybrid_then",
    "is.promise",
    "is.promising",
    "local_ospan_promise_domain",
    "local_otel_promise_domain",
    "new_promise_domain",
    "promise",
    "promise_all",
    "promise_map",
    "promise_race",
    "promise_reduce",
    "promise_reject",
    "promise_resolve",
    "then",
    "with_ospan_async",
    "with_ospan_promise_domain",
    "with_otel_promise_domain",
    "with_otel_span",
    "with_promise_domain"
  ],
  "_help": [
    {
      "page": "future_promise",
      "title": "'future' promise",
      "topics": [
        "future_promise",
        "future_promise_queue"
      ]
    },
    {
      "page": "hybrid_then",
      "title": "Asynchronous or synchronous 'then()'",
      "topics": [
        "hybrid_then"
      ]
    },
    {
      "page": "is.promise",
      "title": "Coerce to a promise",
      "topics": [
        "as.promise",
        "is.promise",
        "is.promising"
      ]
    },
    {
      "page": "pipes",
      "title": "Promise pipe operators",
      "topics": [
        "%...!%",
        "%...>%",
        "%...T!%",
        "%...T>%",
        "pipes"
      ]
    },
    {
      "page": "promise",
      "title": "Create a new promise object",
      "topics": [
        "promise"
      ]
    },
    {
      "page": "promise_all",
      "title": "Combine multiple promise objects",
      "topics": [
        "promise_all",
        "promise_race"
      ]
    },
    {
      "page": "promise_map",
      "title": "Promise-aware lapply/map",
      "topics": [
        "promise_map"
      ]
    },
    {
      "page": "promise_reduce",
      "title": "Promise-aware version of Reduce",
      "topics": [
        "promise_reduce"
      ]
    },
    {
      "page": "promise_resolve",
      "title": "Create a resolved or rejected promise",
      "topics": [
        "promise_reject",
        "promise_resolve"
      ]
    },
    {
      "page": "then",
      "title": "Access the results of a promise",
      "topics": [
        "catch",
        "finally",
        "then"
      ]
    },
    {
      "page": "otel",
      "title": "OpenTelemetry integration",
      "topics": [
        "local_otel_promise_domain",
        "with_otel_promise_domain",
        "with_otel_span"
      ]
    },
    {
      "page": "with_promise_domain",
      "title": "Promise domains",
      "topics": [
        "new_promise_domain",
        "with_promise_domain"
      ]
    }
  ],
  "_pkglogo": "https://github.com/rstudio/promises/raw/HEAD/man/figures/logo.svg",
  "_readme": "https://github.com/rstudio/promises/raw/HEAD/README.md",
  "_rundeps": [
    "cli",
    "fastmap",
    "later",
    "lifecycle",
    "magrittr",
    "otel",
    "R6",
    "Rcpp",
    "rlang"
  ],
  "_vignettes": [
    {
      "source": "promises_05b_future_promise.Rmd",
      "filename": "promises_05b_future_promise.html",
      "title": "Advanced future and promises usage",
      "engine": "knitr::rmarkdown",
      "headings": [
        "The problem with future()+promise()",
        "The solution: future_promise()"
      ],
      "created": "2025-06-26 17:28:04",
      "modified": "2025-07-31 19:18:04",
      "commits": 2
    },
    {
      "source": "promises_02_intro.Rmd",
      "filename": "promises_02_intro.html",
      "title": "An informal introduction to async programming",
      "engine": "knitr::rmarkdown",
      "headings": [],
      "created": "2023-08-07 19:40:44",
      "modified": "2025-07-31 19:18:04",
      "commits": 4
    },
    {
      "source": "promises_08_casestudy.Rmd",
      "filename": "promises_08_casestudy.html",
      "title": "Case study: converting a Shiny app to async",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Motivation",
        "Our source data",
        "A tour of the app",
        "The implementation",
        "User interface",
        "Server logic",
        "Improving performance and scalability",
        "Converting to async",
        "Loading promises and mirai",
        "The data reactive: mirai() all the things",
        "The whales reactive: simple pipelines are simple",
        "The whale_downloads reactive: reading from multiple promises",
        "Promises: the Gathering",
        "The total_downloaders value box: simple pipelines are for output, too",
        "The biggest_whales plot: getting untidy",
        "Revisiting the data reactive: progress support",
        "Measuring scalability",
        "Load testing with Shiny (coming soon)",
        "Sync vs. async performance",
        "Further optimizations",
        "Summing up"
      ],
      "created": "2023-08-07 19:40:44",
      "modified": "2025-07-31 19:18:04",
      "commits": 8
    },
    {
      "source": "promises_07_combining.Rmd",
      "filename": "promises_07_combining.html",
      "title": "Combining promises",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Gathering",
        "Nesting",
        "Racing",
        "Mapping",
        "Reducing"
      ],
      "created": "2023-08-07 19:40:44",
      "modified": "2025-07-31 19:18:04",
      "commits": 4
    },
    {
      "source": "promises_05a_futures.Rmd",
      "filename": "promises_05a_futures.html",
      "title": "Launching tasks with future",
      "engine": "knitr::rmarkdown",
      "headings": [
        "How future works",
        "Choosing a launch method",
        "Caveats and limitations",
        "Globals: Providing input to future code chunks",
        "Package loading",
        "Native resources",
        "Mutation",
        "Returning values"
      ],
      "created": "2025-06-26 17:28:04",
      "modified": "2025-07-01 17:10:37",
      "commits": 2
    },
    {
      "source": "promises_04_mirai.Rmd",
      "filename": "promises_04_mirai.html",
      "title": "Launching tasks with mirai",
      "engine": "knitr::rmarkdown",
      "headings": [
        "How mirai works",
        "Choosing a launch method",
        "Caveats and limitations",
        "Globals: Providing input to mirai code chunks",
        "Package loading",
        "Custom Data Types",
        "Native resources",
        "Mutation",
        "Returning values"
      ],
      "created": "2025-06-26 17:28:04",
      "modified": "2025-07-31 19:18:04",
      "commits": 4
    },
    {
      "source": "promises_06_shiny.Rmd",
      "filename": "promises_06_shiny.html",
      "title": "Using promises with Shiny",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Adding prerequisites",
        "Identifying slow operations",
        "Converting a slow operation into a mirai",
        "Shiny-specific caveats and limitations",
        "Integrating promises with Shiny",
        "Outputs",
        "Render functions with side effects: renderPrint and renderPlot",
        "Observers",
        "Reactive expressions",
        "The flush cycle"
      ],
      "created": "2023-08-07 19:40:44",
      "modified": "2025-07-31 19:18:04",
      "commits": 9
    },
    {
      "source": "promises_01_motivation.Rmd",
      "filename": "promises_01_motivation.html",
      "title": "Why use promises?",
      "engine": "knitr::rmarkdown",
      "headings": [
        "What are promises good for?",
        "What aren't promises good for?"
      ],
      "created": "2023-08-07 19:40:44",
      "modified": "2023-08-10 20:04:14",
      "commits": 2
    },
    {
      "source": "promises_03_overview.Rmd",
      "filename": "promises_03_overview.html",
      "title": "Working with promises in R",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Async programming in R",
        "Promises: the central abstraction of async programming",
        "Accessing results with then",
        "Promise chaining",
        "Tee operator",
        "Error handling",
        "Catching errors with onRejected",
        "Default onRejected behavior",
        "Syntactic sugar for onRejected",
        "Error tee",
        "Cleaning up with finally"
      ],
      "created": "2023-08-07 19:40:44",
      "modified": "2025-07-31 19:18:04",
      "commits": 5
    }
  ],
  "_score": 18.117667322528217,
  "_indexed": true,
  "_nocasepkg": "promises",
  "_universes": [
    "rstudio",
    "schloerke"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "1.5.0.9000",
      "date": "2026-05-18T08:35:51.000Z",
      "distro": "noble",
      "commit": "2f70615f8c38f0b28f1088a08911ce2b1b0aa176",
      "fileid": "1d02d5c10017fe82c7b4c4042fb669c9e6173950d187342af27bdf6dd8e4ac79",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/rstudio/actions/runs/26022331660"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "1.5.0.9000",
      "date": "2026-05-18T08:35:47.000Z",
      "distro": "noble",
      "commit": "2f70615f8c38f0b28f1088a08911ce2b1b0aa176",
      "fileid": "7f4fa7644f759b0396c7823c3697178ef352bbd60984fe597cb538c25d97aa75",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/rstudio/actions/runs/26022331660"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "1.5.0.9000",
      "date": "2026-05-18T08:35:06.000Z",
      "commit": "2f70615f8c38f0b28f1088a08911ce2b1b0aa176",
      "fileid": "ce48ab4cdf09946fcb03c36b15ad6a0ba52aa649ed6650bccac68cc6e2fa23f6",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/rstudio/actions/runs/26022331660"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "1.5.0.9000",
      "date": "2026-05-18T08:35:32.000Z",
      "commit": "2f70615f8c38f0b28f1088a08911ce2b1b0aa176",
      "fileid": "634821a2905d4bc2057427c87f022dbf413d2045ad0c944a4979c38a6bb573b7",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/rstudio/actions/runs/26022331660"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "1.5.0.9000",
      "date": "2026-05-18T08:34:58.000Z",
      "commit": "2f70615f8c38f0b28f1088a08911ce2b1b0aa176",
      "fileid": "48999284df2a9ccfe13950ee94975774e65ecd57a3435bd5afa00b45722781da",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/rstudio/actions/runs/26022331660"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "1.5.0.9000",
      "date": "2026-05-18T08:34:57.000Z",
      "commit": "2f70615f8c38f0b28f1088a08911ce2b1b0aa176",
      "fileid": "1ee3ce59a3e815044e73e82878e505663f0bb21b9ba601ddd9fd24bdd64726d0",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/rstudio/actions/runs/26022331660"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "1.5.0.9000",
      "date": "2026-05-18T08:35:12.000Z",
      "commit": "2f70615f8c38f0b28f1088a08911ce2b1b0aa176",
      "fileid": "734f532ba382906fee9dd82f74b7a25bde64151e7137bd2e57d0fa5ea4109801",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/rstudio/actions/runs/26022331660"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "1.5.0.9000",
      "date": "2026-06-02T16:15:43.000Z",
      "commit": "2f70615f8c38f0b28f1088a08911ce2b1b0aa176",
      "fileid": "ad50a7081778cf0e6f5998f4786b54bd44a9feea3ccfc0bcb9f35b59e666aabf",
      "status": "success",
      "buildurl": "https://github.com/r-universe/rstudio/actions/runs/26022331660"
    }
  ]
}