# pkgcache 2.2.5 (CRAN)

Cache 'CRAN'-Like Metadata and R Packages

[Record of 2.2.5](/cran/pkgcache/v/2.2.5.md) | Compare: [With 2.2.4](/cran/pkgcache/compare/2.2.4...2.2.5.md), [With another package](/compare/pkgcache.md#add), [Downloads](/downloads/compare/pkgcache.md#add) | [Licences](/cran/pkgcache/licences.md) | [SBOM](/cran/pkgcache/sbom.md)

Install from CRAN: `install.packages("pkgcache")`

Also from:

- r2u (Ubuntu binaries): `sudo apt install r-cran-pkgcache` _Listed from recorded download activity on this channel, not from a live index, so read it as last known. Bioconductor packages are named r-bioc-<name> there._
- Fedora COPR (iucar/cran): `sudo dnf install R-CRAN-pkgcache` _A rebuild of what CRAN lists, so it can lag CRAN by a rebuild._
- autoCRAN (openSUSE): `sudo zypper install R-pkgcache` _Listed from recorded download activity on this channel, not from a live index, so read it as last known._
- conda-forge: `conda install -c conda-forge r-pkgcache` _Listed from recorded download activity on this channel, not from a live index, so read it as last known._

- CRAN checks: All OK (13 platforms)
- CRAN 30-day downloads: 6,613 (up 3.7% on the 30 days before, the better direction)
- Dependent packages: 1 (3 more suggest it)
- Test coverage: 50% (of lines run by tests)
- Advisories: None known

## About

[Method](/about/licenses.md)

Metadata and package cache for CRAN-like repositories. This is a utility package to be used by package management tools that want to take advantage of caching.

- Maintainer: Gábor Csárdi
- Licence: [MIT + file LICENSE](/licences/MIT.md)
- Latest release: 9 Apr 2026
- First release: 31 Dec 2018

- [Website](https://r-lib.github.io/pkgcache/)
- [CRAN page](https://cran.r-project.org/package=pkgcache)
- [Source repository](https://github.com/r-lib/pkgcache)
- [Issues](https://github.com/r-lib/pkgcache/issues)
- [Source of every release](https://github.com/cran/pkgcache)

[Compare with another package](/compare/pkgcache.md#add)

**More details**

- Releases: 26
- Needs compilation: Yes
- Needs R: >= 3.4
- Config/Needs/website: tidyverse/tidytemplate
- Config/testthat/edition: 3
- Config/usethis/last-upkeep: 2025-04-30
- Language: en-US
- RoxygenNote: 7.3.2.9000

**Subjects (1) [Method](/about/subjects.md#found)**

- [Package installation and loading](/topics/subjects/package-installation-and-loading.md)

**Cite**

#### Package

Run in R for the authors' preferred citation:

`citation("pkgcache")`

APA: Csárdi, G., & Posit Software, PBC. (2026). pkgcache: Cache 'CRAN'-Like Metadata and R Packages (Version 2.2.5) [Computer software]. https://doi.org/10.32614/CRAN.package.pkgcache

BibTeX:

```
@Manual{pkgcache,
  title  = {pkgcache: Cache 'CRAN'-Like Metadata and R Packages},
  author = {Csárdi, Gábor and Posit Software, PBC},
  year   = {2026},
  note   = {R package version 2.2.5},
  doi    = {10.32614/CRAN.package.pkgcache},
  url    = {https://CRAN.R-project.org/package=pkgcache}
}
```

This package has no citation file, so `citation()` returns this entry built from `DESCRIPTION`.

#### R Observatory

For a number measured here: a download total, a coverage figure, an archival date.

APA: Balamuta, J. J. (2026). R Observatory: Metrics for pkgcache version 2.2.5 [Data set]. HJJB, LLC. Data release v2026-10-28. https://doi.org/10.5281/zenodo.21843040

BibTeX:

```
@misc{robservatorypkgcache,
  author    = {Balamuta, James Joseph},
  title     = {{R} {Observatory}: Metrics for {pkgcache} version 2.2.5},
  year      = {2026},
  publisher = {HJJB, LLC},
  doi       = {10.5281/zenodo.21843040},
  url       = {https://r-observatory.thecoatlessprofessor.com/packages/pkgcache},
  note      = {Data set. Data release v2026-10-28}
}
```

From data release v2026-10-28, which the citation names so these numbers can be found later.

## Health

[Method](/about/checks-health.md)

All 13 check platforms pass.

13 CRAN platforms: 13 OK.

Platforms now:

- r-devel-linux-x86_64-debian-clang: OK
- r-devel-linux-x86_64-debian-gcc: OK
- r-devel-linux-x86_64-fedora-clang: OK
- r-devel-linux-x86_64-fedora-gcc: OK
- r-devel-windows-x86_64: OK
- r-oldrel-macos-arm64: OK
- r-oldrel-macos-x86_64: OK
- r-oldrel-windows-x86_64: OK
- r-patched-linux-x86_64: OK
- r-release-linux-x86_64: OK
- r-release-macos-arm64: OK
- r-release-macos-x86_64: OK
- r-release-windows-x86_64: OK

#### Over time

No change since 5 Aug 2026

**As a list (5)**

| Changed | Worst status | OK | Notes | Warnings | Errors |
| --- | --- | ---: | ---: | ---: | ---: |
| 5 Aug 2026 | OK | 13 | 0 | 0 | 0 |
| 1 Aug 2026 | Note | 12 | 1 | 0 | 0 |
| 9 Jun 2026 | OK | 13 | 0 | 0 | 0 |
| 8 Jun 2026 | Error | 12 | 0 | 0 | 1 |
| 10 Mar 2026 | OK | 14 | 0 | 0 | 0 |

Since March 2026

[Check results on CRAN](https://cran.r-project.org/web/checks/check_results_pkgcache.html)

## Downloads

[Method](/about/downloads.md)

- Downloads in the last 30 days: 20,494 (It is the sum of 5 channels: CRAN, r2u, autoCRAN, conda-forge and c2d4u.)

CRAN alone: rank among CRAN packages, last 30 days: 1,379 of 26,530.

| Channel | Downloads in the last 30 days | In the total | Rank in that channel | Change |
| --- | ---: | --- | --- | --- |
| CRAN | 6,613 | yes | 1,379 of 26,530 | up 3.7% on the 30 days before, the better direction |
| r2u | 161 | yes | 1,903 of 30,526 | up 59.4% on the 30 days before, the better direction |
| autoCRAN | 3 | yes | 17,776 of 29,212 | down 81.3% on the 30 days before, the worse direction |
| conda-forge | 13,717 | yes | 375 of 3,828 | up 19.8% on the 30 days before, the better direction |
| c2d4u | 0 | yes | 6,270 of 7,575 | down 100% on the 30 days before, the worse direction |

Other windows: [Last 90 days](/cran/pkgcache.md?win=90d#downloads), [Last 365 days](/cran/pkgcache.md?win=365d#downloads), [All time](/cran/pkgcache.md?win=all#downloads).

To leave channels out of the total, name them in the address, joined by dots: `?off=conda_forge.c2d4u`.

#### Over time

Downloads over time, the last 12 whole months:

| Month | CRAN | r2u | autoCRAN | conda-forge | c2d4u | Sum |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| Oct 2025 | 6,934 | 118 | no figure | 674 | 3 | 7,729 |
| Nov 2025 | 5,864 | 76 | no figure | 715 | 6 | 6,661 |
| Dec 2025 | 7,467 | 88 | no figure | 976 | 12 | 8,543 |
| Jan 2026 | 5,816 | 82 | no figure | 811 | 6 | 6,715 |
| Feb 2026 | 6,166 | 86 | no figure | 726 | 9 | 6,987 |
| Mar 2026 | 7,467 | 111 | no figure | 3,865 | 11 | 11,454 |
| Apr 2026 | 13,389 | 162 | no figure | 12,520 | 36 | 26,107 |
| May 2026 | 10,340 | 122 | no figure | 11,451 | no figure | 21,913 |
| Jun 2026 | 11,130 | 100 | no figure | 11,394 | no figure | 22,624 |
| Jul 2026 | 9,027 | 214 | 33 | 10,648 | 7 | 19,929 |
| Aug 2026 | 7,076 | 101 | 36 | 11,602 | no figure | 18,815 |
| Sep 2026 | 6,975 | 159 | 10 | 13,717 | no figure | 20,861 |

First day on record: CRAN 31 Dec 2018, r2u 22 May 2022, autoCRAN 1 Jul 2026, conda-forge 12 Jun 2019, c2d4u 26 Jun 2021 (no longer updated).

Every channel here counts downloads, so the channels can be stacked and summed for one period. Each channel counts in its own way and covers a different span of years, so read a sum as a rough total, and read a rise where a channel begins as that channel starting, not as growth.

Weeks start on Monday. A first or last week or month that the channel does not cover in full is left out, so every point is a whole period.

Days with no record add nothing to their week or month. For a little-used package that is usually a day with no downloads, but it can also be a gap in collection.

[Compare downloads](/downloads/compare/pkgcache.md#add)

## Dependencies

[Method](/about/reverse-dependencies.md)

- Needs: 9
- Dependent packages: 1
- Suggested by: 3

**Needs (9)**

- [callr](/cran/callr.md)
- [cli](/cran/cli.md)
- [curl](/cran/curl.md)
- [filelock](/cran/filelock.md)
- [jsonlite](/cran/jsonlite.md)
- [processx](/cran/processx.md)
- [R6](/cran/R6.md)
- tools
- utils

- Installing it adds: 9 packages, 2.9 MB of source
- Of those, need compilation: 6

**Optional extras (14)**

- [covr](/cran/covr.md)
- [debugme](/cran/debugme.md)
- [desc](/cran/desc.md)
- [fs](/cran/fs.md)
- [keyring](/cran/keyring.md)
- [pillar](/cran/pillar.md)
- [pingr](/cran/pingr.md)
- [rprojroot](/cran/rprojroot.md)
- [sessioninfo](/cran/sessioninfo.md)
- [spelling](/cran/spelling.md)
- [testthat](/cran/testthat.md)
- [webfakes](/cran/webfakes.md)
- [withr](/cran/withr.md)
- [zip](/cran/zip.md)

**Dependent packages (1)**

| Package | Title | Downloads in 30 days |
| --- | --- | ---: |
| [pkgdepends](/cran/pkgdepends.md) | Package Dependency Resolution and Downloads | 4,844 |

## Code

[Method](/about/code-metrics.md)

Selected function: `synchronise`

- Kind: Internal R function
- File: R/aaa-async.R, line 3873
- Lines: 44
- Complexity: 6
- Covered by tests: 72%

Called by 8: [`repo_sugar_ppm`](/cran/pkgcache.md?fn=repo_sugar_ppm&view=focus#code) (0% of lines run by tests), [`repo_status`](/cran/pkgcache.md?fn=repo_status&view=focus#code) (0% of lines run by tests), [`ppm_has_binaries`](/cran/pkgcache.md?fn=ppm_has_binaries&view=focus#code) (0% of lines run by tests), [`get_all_bioc_sysreqs`](/cran/pkgcache.md?fn=get_all_bioc_sysreqs&view=focus#code) (0% of lines run by tests), [`ppm_platforms`](/cran/pkgcache.md?fn=ppm_platforms&view=focus#code) (0% of lines run by tests), [`update_fields_for_ppm_download`](/cran/pkgcache.md?fn=update_fields_for_ppm_download&view=focus#code) (100% of lines run by tests), [`get_bioc_sysreqs`](/cran/pkgcache.md?fn=get_bioc_sysreqs&view=focus#code) (0% of lines run by tests), [`ppm_r_versions`](/cran/pkgcache.md?fn=ppm_r_versions&view=focus#code) (0% of lines run by tests)

Calls 7: [`get_private`](/cran/pkgcache.md?fn=get_private&view=focus#code) (100% of lines run by tests), [`async_constant`](/cran/pkgcache.md?fn=async_constant&view=focus#code) (not measured), [`make_error`](/cran/pkgcache.md?fn=make_error&view=focus#code) (100% of lines run by tests), [`is_deferred`](/cran/pkgcache.md?fn=is_deferred&view=focus#code) (100% of lines run by tests), [`start_browser`](/cran/pkgcache.md?fn=start_browser&view=focus#code) (0% of lines run by tests), [`pop_event_loop`](/cran/pkgcache.md?fn=pop_event_loop&view=focus#code) (67% of lines run by tests), [`push_event_loop`](/cran/pkgcache.md?fn=push_event_loop&view=focus#code) (80% of lines run by tests)

Paths: 2 steps each way.

Called by 8:

- [`repo_sugar_ppm`](/cran/pkgcache.md?fn=repo_sugar_ppm&view=focus#code), called by 1
  - [`repo_sugar`](/cran/pkgcache.md?fn=repo_sugar&view=focus#code), called by 1
- [`repo_status`](/cran/pkgcache.md?fn=repo_status&view=focus#code)
- [`ppm_has_binaries`](/cran/pkgcache.md?fn=ppm_has_binaries&view=focus#code)
- [`get_all_bioc_sysreqs`](/cran/pkgcache.md?fn=get_all_bioc_sysreqs&view=focus#code)
- [`ppm_platforms`](/cran/pkgcache.md?fn=ppm_platforms&view=focus#code)
- [`update_fields_for_ppm_download`](/cran/pkgcache.md?fn=update_fields_for_ppm_download&view=focus#code)
- [`get_bioc_sysreqs`](/cran/pkgcache.md?fn=get_bioc_sysreqs&view=focus#code)
- [`ppm_r_versions`](/cran/pkgcache.md?fn=ppm_r_versions&view=focus#code)

Calls 7:

- [`get_private`](/cran/pkgcache.md?fn=get_private&view=focus#code)
- [`async_constant`](/cran/pkgcache.md?fn=async_constant&view=focus#code)
- [`make_error`](/cran/pkgcache.md?fn=make_error&view=focus#code)
- [`is_deferred`](/cran/pkgcache.md?fn=is_deferred&view=focus#code)
- [`start_browser`](/cran/pkgcache.md?fn=start_browser&view=focus#code), calls 2
  - [`async_debug_remove_shortcuts`](/cran/pkgcache.md?fn=async_debug_remove_shortcuts&view=focus#code)
  - [`async_debug_shortcuts`](/cran/pkgcache.md?fn=async_debug_shortcuts&view=focus#code)
- [`pop_event_loop`](/cran/pkgcache.md?fn=pop_event_loop&view=focus#code)
- [`push_event_loop`](/cran/pkgcache.md?fn=push_event_loop&view=focus#code)

The open file in the files map is `R/aaa-async.R`.

- Functions: 177
- Lines: 2,781
- Calls that stay inside it: 173
- Calls to other files: 18, to 2
- Calls from other files: 62, from 16

It calls: `R/aa-assertthat.R` (17 calls), `R/utils.R` (1 call)

Called from: `R/metadata-cache.R` (11 calls), `R/async-http.R` (9 calls), `R/ppm.R` (7 calls), `R/repo-status.R` (5 calls), `R/packages-gz.R` (5 calls), `R/bioc-sysreqs.R` (4 calls), `R/archive.R` (4 calls), `R/repo-set.R` (4 calls), `R/platform.R` (3 calls), `R/files.R` (2 calls), `R/assertions.R` (2 calls), `R/installed.R` (2 calls), and 4 more

| Function in aaa-async.R | Calls in other files |
| --- | --- |
| [`synchronise`](/cran/pkgcache.md?fn=synchronise&view=focus#code) selected | nothing outside this file |
| [`http_post`](/cran/pkgcache.md?fn=http_post&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code), [`file.size`](/cran/pkgcache.md?fn=file.size&view=focus#code) |
| [`async_def_init`](/cran/pkgcache.md?fn=async_def_init&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`async_replicate`](/cran/pkgcache.md?fn=async_replicate&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`async_timer_init`](/cran/pkgcache.md?fn=async_timer_init&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |

**More functions (172)**

| Function in aaa-async.R | Calls in other files |
| --- | --- |
| [`def__run_action`](/cran/pkgcache.md?fn=def__run_action&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`delay`](/cran/pkgcache.md?fn=delay&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`ee_emit`](/cran/pkgcache.md?fn=ee_emit&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`ee_get_listener_count`](/cran/pkgcache.md?fn=ee_get_listener_count&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`ee_init`](/cran/pkgcache.md?fn=ee_init&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`ee_listen_off`](/cran/pkgcache.md?fn=ee_listen_off&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`ee_listen_on`](/cran/pkgcache.md?fn=ee_listen_on&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`ee_listen_once`](/cran/pkgcache.md?fn=ee_listen_once&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`ee_remove_all_listeners`](/cran/pkgcache.md?fn=ee_remove_all_listeners&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`http_delete`](/cran/pkgcache.md?fn=http_delete&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`http_get`](/cran/pkgcache.md?fn=http_get&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`http_head`](/cran/pkgcache.md?fn=http_head&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`is_async`](/cran/pkgcache.md?fn=is_async&view=focus#code) | [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) |
| [`%\|\|%`](/cran/pkgcache.md?fn=%25%7C%7C%25&view=focus#code) | nothing outside this file |
| [`.onLoad`](/cran/pkgcache.md?fn=.onLoad&view=focus#code) | nothing outside this file |
| [`async`](/cran/pkgcache.md?fn=async&view=focus#code) | nothing outside this file |
| [`async_backoff`](/cran/pkgcache.md?fn=async_backoff&view=focus#code) | nothing outside this file |
| [`async_constant`](/cran/pkgcache.md?fn=async_constant&view=focus#code) | nothing outside this file |
| [`async_debug`](/cran/pkgcache.md?fn=async_debug&view=focus#code) | nothing outside this file |
| [`async_debug_remove_shortcuts`](/cran/pkgcache.md?fn=async_debug_remove_shortcuts&view=focus#code) | nothing outside this file |
| [`async_debug_shortcuts`](/cran/pkgcache.md?fn=async_debug_shortcuts&view=focus#code) | nothing outside this file |
| [`async_detect`](/cran/pkgcache.md?fn=async_detect&view=focus#code) | nothing outside this file |
| [`async_detect_limit`](/cran/pkgcache.md?fn=async_detect_limit&view=focus#code) | nothing outside this file |
| [`async_detect_nolimit`](/cran/pkgcache.md?fn=async_detect_nolimit&view=focus#code) | nothing outside this file |
| [`async_every`](/cran/pkgcache.md?fn=async_every&view=focus#code) | nothing outside this file |
| [`async_filter`](/cran/pkgcache.md?fn=async_filter&view=focus#code) | nothing outside this file |
| [`async_list`](/cran/pkgcache.md?fn=async_list&view=focus#code) | nothing outside this file |
| [`async_map`](/cran/pkgcache.md?fn=async_map&view=focus#code) | nothing outside this file |
| [`async_map_limit`](/cran/pkgcache.md?fn=async_map_limit&view=focus#code) | nothing outside this file |
| [`async_next`](/cran/pkgcache.md?fn=async_next&view=focus#code) | nothing outside this file |
| [`async_race`](/cran/pkgcache.md?fn=async_race&view=focus#code) | nothing outside this file |
| [`async_race_some`](/cran/pkgcache.md?fn=async_race_some&view=focus#code) | nothing outside this file |
| [`async_reflect`](/cran/pkgcache.md?fn=async_reflect&view=focus#code) | nothing outside this file |
| [`async_reject`](/cran/pkgcache.md?fn=async_reject&view=focus#code) | nothing outside this file |
| [`async_replicate_limit`](/cran/pkgcache.md?fn=async_replicate_limit&view=focus#code) | nothing outside this file |
| [`async_replicate_nolimit`](/cran/pkgcache.md?fn=async_replicate_nolimit&view=focus#code) | nothing outside this file |
| [`async_retry`](/cran/pkgcache.md?fn=async_retry&view=focus#code) | nothing outside this file |
| [`async_retryable`](/cran/pkgcache.md?fn=async_retryable&view=focus#code) | nothing outside this file |
| [`async_sequence`](/cran/pkgcache.md?fn=async_sequence&view=focus#code) | nothing outside this file |
| [`async_some`](/cran/pkgcache.md?fn=async_some&view=focus#code) | nothing outside this file |
| [`async_step`](/cran/pkgcache.md?fn=async_step&view=focus#code) | nothing outside this file |
| [`async_step_back`](/cran/pkgcache.md?fn=async_step_back&view=focus#code) | nothing outside this file |
| [`async_timeout`](/cran/pkgcache.md?fn=async_timeout&view=focus#code) | nothing outside this file |
| [`async_timer_cancel`](/cran/pkgcache.md?fn=async_timer_cancel&view=focus#code) | nothing outside this file |
| [`async_tree`](/cran/pkgcache.md?fn=async_tree&view=focus#code) | nothing outside this file |
| [`async_try_each`](/cran/pkgcache.md?fn=async_try_each&view=focus#code) | nothing outside this file |
| [`async_until`](/cran/pkgcache.md?fn=async_until&view=focus#code) | nothing outside this file |
| [`async_wait_for`](/cran/pkgcache.md?fn=async_wait_for&view=focus#code) | nothing outside this file |
| [`async_where`](/cran/pkgcache.md?fn=async_where&view=focus#code) | nothing outside this file |
| [`async_whilst`](/cran/pkgcache.md?fn=async_whilst&view=focus#code) | nothing outside this file |
| [`call_function`](/cran/pkgcache.md?fn=call_function&view=focus#code) | nothing outside this file |
| [`call_with_callback`](/cran/pkgcache.md?fn=call_with_callback&view=focus#code) | nothing outside this file |
| [`chunk_sse_events`](/cran/pkgcache.md?fn=chunk_sse_events&view=focus#code) | nothing outside this file |
| [`crash`](/cran/pkgcache.md?fn=crash&view=focus#code) | nothing outside this file |
| [`debug1`](/cran/pkgcache.md?fn=debug1&view=focus#code) | nothing outside this file |
| [`debug_all`](/cran/pkgcache.md?fn=debug_all&view=focus#code) | nothing outside this file |
| [`def__add_as_parent`](/cran/pkgcache.md?fn=def__add_as_parent&view=focus#code) | nothing outside this file |
| [`def__call_then`](/cran/pkgcache.md?fn=def__call_then&view=focus#code) | nothing outside this file |
| [`def__get_info`](/cran/pkgcache.md?fn=def__get_info&view=focus#code) | nothing outside this file |
| [`def__make_error_object`](/cran/pkgcache.md?fn=def__make_error_object&view=focus#code) | nothing outside this file |


3 files with no calls to or from another: `R/pkgdown.R`, `src/errors.c`, `src/init.c`.

The whole package has 471 function names in 34 files and 635 calls between them. Most calls between files: `R/aa-assertthat.R` and `R/aaa-async.R` (17 calls), `R/files.R` and `R/metadata-cache.R` (12 calls), `R/aaa-async.R` and `R/metadata-cache.R` (11 calls), `R/metadata-cache.R` and `R/utils.R` (11 calls), `R/archive.R` and `R/files.R` (9 calls).

Graph: the whole call graph has 379 function names that take part in a call and 635 calls between them, set out in 10 layers with callers before what they call. 92 function names have no calls and are left out. Called by the most functions: `assert_that` (30), `async` (20), `is_string` (18), `get_private` (17), `mkdirp` (16). Calling the most functions: `async_repo_status` (13), `download_if_newer` (11), `read_packages_file` (11), `async_get_ppm_status` (10), `repo_sugar_ppm` (10).

Most connected functions: [`assert_that`](/cran/pkgcache.md?fn=assert_that&view=focus#code) 32, [`async`](/cran/pkgcache.md?fn=async&view=focus#code) 22, [`is_string`](/cran/pkgcache.md?fn=is_string&view=focus#code) 18, [`get_private`](/cran/pkgcache.md?fn=get_private&view=focus#code) 17, [`mkdirp`](/cran/pkgcache.md?fn=mkdirp&view=focus#code) 17, [`async_get_ppm_status`](/cran/pkgcache.md?fn=async_get_ppm_status&view=focus#code) 15

To select another function, add ?fn=NAME to this address.

The call graph also has an address of its own: /cran/pkgcache/graph.md?fn=synchronise&view=focus

- Functions: 488
- Public exports: 44
- Lines of R code: 15,351
- Median complexity: 2

**Functions (488)**

| Function (sorted, low to high) | Kind | File | Lines | Complexity | Covered |
| --- | --- | --- | ---: | ---: | ---: |
| [`bioc_devel_version`](/cran/pkgcache.md?fn=bioc_devel_version#code) | Public | R/platform.R | 3 | 1 | 0% |
| [`bioc_release_version`](/cran/pkgcache.md?fn=bioc_release_version#code) | Public | R/platform.R | 3 | 1 | 0% |
| [`bioc_repos`](/cran/pkgcache.md?fn=bioc_repos#code) | Public | R/platform.R | 3 | 1 | 0% |
| [`bioc_version`](/cran/pkgcache.md?fn=bioc_version#code) | Public | R/platform.R | 3 | 1 | 0% |
| [`bioc_version_map`](/cran/pkgcache.md?fn=bioc_version_map#code) | Public | R/platform.R | 3 | 1 | 0% |
| [`cran_archive_cleanup`](/cran/pkgcache.md?fn=cran_archive_cleanup#code) | Public | R/archive.R | 7 | 1 | 0% |
| [`cran_archive_list`](/cran/pkgcache.md?fn=cran_archive_list#code) | Public | R/archive.R | 10 | 1 | 0% |
| [`cran_archive_summary`](/cran/pkgcache.md?fn=cran_archive_summary#code) | Public | R/archive.R | 3 | 1 | 0% |
| [`cran_archive_update`](/cran/pkgcache.md?fn=cran_archive_update#code) | Public | R/archive.R | 3 | 1 | 0% |
| [`current_r_platform`](/cran/pkgcache.md?fn=current_r_platform#code) | Public | R/platform.R | 3 | 1 | 100% |
| [`current_r_platform_data`](/cran/pkgcache.md?fn=current_r_platform_data#code) | Public | R/platform.R | 15 | 4 | 89% |
| [`default_cran_mirror`](/cran/pkgcache.md?fn=default_cran_mirror#code) | Public | R/platform.R | 10 | 4 | 100% |

This page lists 1 to 12 of 488 functions. [Next](/cran/pkgcache.md?sort=name&order=asc&fpage=2#functions)

**Size and composition**

#### Lines by kind (34,100)

| Kind | Lines | Share |
| --- | ---: | ---: |
| R code | 15,351 | 45% |
| Tests | 15,330 | 45% |
| Documentation | 2,051 | 6% |
| Compiled code | 1,368 | 4% |

#### Lines by language

| Language | Lines | Share |
| --- | ---: | ---: |
| R | 25,489 | 75% |
| Markdown | 3,636 | 11% |
| Rd | 2,051 | 6% |
| Other | 1,553 | 5% |
| C | 1,368 | 4% |
| JSON | 3 | 0% |

Languages are counted from file extensions.

- Files: 360
- R functions: 463
- Compiled functions: 25
- Object systems: S3: 3 methods, R6: 10 classes

**Complexity**

- Median: 2
- Mean: 2.8
- Highest: 27
- Median lines per function: 9

_About complexity: Cyclomatic complexity counts the independent paths through a function: 1 is a straight line, higher is harder to test. R functions only._

**Call graph figures**

- R functions: 463
- Calls: 616
- Unconnected: 98
- Groups: 6

**Growth (26 releases)**

Total lines by release: from 14,139 (on 31 Dec 2018) to 34,100 (on 9 Apr 2026). The lowest is 10,751 and the highest is 34,100.

**Release changes**

[Both releases side by side](/cran/pkgcache/compare/2.2.4...2.2.5.md)

**2.2.4 to 2.2.5**, 26 May 2025 to 9 Apr 2026

- Files changed: 31
- Lines added: 775
- Lines deleted: 238
- Exports: No change

**Changed measures (11)**

| Measure | Subject | Before | After |
| --- | --- | ---: | ---: |
| Total lines | Structure | 33,596 | 34,100 |
| Lines of R code | Structure | 15,327 | 15,351 |
| Lines of compiled code | Structure | 1,261 | 1,368 |
| Lines of tests | Structure | 14,957 | 15,330 |
| C functions | Languages | 24 | 25 |
| Compiled share | Languages | 4% | 4% |
| Test cases | Testing | 465 | 469 |
| Test lines per line of code | Testing | 0.98 | 1 |
| Snapshot tests | Testing | 232 | 235 |
| Mean complexity | Complexity | 2.8 | 2.8 |
| Lines per function (mean) | Complexity | 16.65 | 16.66 |

**Most changed files (12 of 31)**

| File | Lines added | Lines deleted |
| --- | ---: | ---: |
| `tests/testthat/test-installed.R` | 323 | 3 |
| `tests/testthat/_snaps/ppm.md` | 144 | 132 |
| `src/lib.c` | 125 | 18 |
| `MD5` | 30 | 29 |
| `tests/testthat/_snaps/installed.md` | 28 | 2 |
| `inst/fixtures/bioc-config.yaml` | 15 | 11 |
| `inst/WORDLIST` | 15 | 1 |
| `tests/testthat/_snaps/assert-that.md` | 8 | 8 |
| `R/onload.R` | 14 | 1 |
| `R/packages-gz.R` | 10 | 4 |
| `NEWS.md` | 13 | 0 |
| `tests/testthat/_snaps/platform.md` | 6 | 5 |

## Tests

[Method](/about/coverage.md)

Coverage was measured, but at least one test failed during the run.

- Lines run by tests: 49.6%
- Expressions run by tests: 47.6%
- Test cases: 469
- Exports named in tests: 93.2%

**Coverage by file (30)**

30 files measured, least covered first.

| File | Lines | Run by tests | Not run | Coverage |
|---|---:|---:|---:|---:|
| `R/archive.R`, 41 functions | 238 | 0 | 238 | 0% |
| `R/repo-set.R`, 17 functions | 146 | 0 | 146 | 0% |
| `R/repo-status.R`, 5 functions | 110 | 0 | 110 | 0% |
| `R/bioc-sysreqs.R`, 6 functions | 78 | 0 | 78 | 0% |
| `R/onload.R`, 1 function | 5 | 0 | 5 | 0% |
| `R/pkgdown.R`, 1 function | 5 | 0 | 5 | 0% |
| `R/system.R`, 3 functions | 3 | 0 | 3 | 0% |
| `R/files.R`, 4 functions | 18 | 2 | 16 | 11% |
| `R/errors.R`, 6 functions | 112 | 17 | 95 | 15% |
| `R/ppm.R`, 8 functions | 124 | 30 | 94 | 24% |
| `R/metadata-cache.R`, 61 functions | 581 | 196 | 385 | 34% |
| `R/aaa-async.R`, 210 functions | 1,849 | 715 | 1,134 | 39% |
| `R/progress-bar.R`, 6 functions | 73 | 37 | 36 | 51% |
| `R/platform.R`, 19 functions | 168 | 89 | 79 | 53% |
| `R/platform-linux.R`, 7 functions | 58 | 36 | 22 | 62% |
| `R/cache-dirs.R`, 2 functions | 37 | 26 | 11 | 70% |
| `R/auth.R`, 8 functions | 256 | 182 | 74 | 71% |
| `R/packages-gz.R`, 9 functions | 342 | 280 | 62 | 82% |
| `R/iso-date.R`, 14 functions | 80 | 72 | 8 | 90% |
| `R/async-http.R`, 9 functions | 222 | 207 | 15 | 93% |
| `R/utils.R`, 34 functions | 117 | 113 | 4 | 97% |
| `R/aa-assertthat.R`, 9 functions | 47 | 47 | 0 | 100% |
| `R/assertions.R`, 8 functions | 17 | 17 | 0 | 100% |
| `R/cache-api.R`, 6 functions | 17 | 17 | 0 | 100% |
| `R/data-frame.R`, 3 functions | 20 | 20 | 0 | 100% |
| `R/errors2.R`, 2 functions | 8 | 8 | 0 | 100% |
| `R/installed.R`, 5 functions | 154 | 154 | 0 | 100% |
| `R/package-cache.R`, 19 functions | 280 | 280 | 0 | 100% |
| `R/parse-url.R`, 1 function | 8 | 8 | 0 | 100% |
| `R/rematch.R`, 1 function | 24 | 24 | 0 | 100% |

Not measured, 6 files: `R/compat-vctrs.R`, `R/cran-app.R`, `src/errors.c`, `src/init.c`, `src/lib.c`, `src/winfiles.c`.

**Coverage run**

- Lines counted: 5,197
- Lines the tests ran: 2,577
- Tests passed: No
- Measured with: covr 3.6.5 on R 4.6.1

**Test suite**

- Has tests: Yes
- Test frameworks: testthat, tinytest
- Test cases: 469
- Snapshot tests: 235
- Lines of tests: 15,330
- Test lines per line of code: 1

## Documentation

[Method](/about/code-metrics.md)

- Exports documented: 100%
- Arguments documented: 97.8%
- Return value documented: 72.7%
- Help pages with examples: 59.4%
- Examples run in checks: 100%

**Other documentation**

- README: Yes, 888 words
- Release notes file: Yes
- Help pages: 32
- Lines of documentation: 2,051

## People

[Method](/about/author-identity.md)

- [Gábor Csárdi](/people/G%C3%A1bor+Cs%C3%A1rdi.md): Maintainer since 1.0.2 (2018), author
- [Posit Software, PBC](/people/Posit+Software,+PBC.md): Copyright holder. ROR https://ror.org/03wc8by49

Funded by Posit Software, PBC (ROR https://ror.org/03wc8by49)

**Earlier names (1)**

- RStudio

## Repository

[Method](/about/repo-signals.md#figures)

[r-lib](/repos/r-lib.md) / [pkgcache](https://github.com/r-lib/pkgcache) on github.com

- Stars: 30
- Forks: 19
- Open issues: 12
- Last commit: 27 Sep 2026

**Activity**

- Commits: 778
- Open pull requests: 1
- Tagged releases: 25
- Latest tagged release: v2.2.5, 9 Apr 2026
- In development: Default branch at 2.2.5.9000, ahead of CRAN 2.2.5 (checked 2026-10-25)
- Issues closed in: 6 days (median)
- Pull requests closed in: 0 days (median)
- Pull requests merged: 88%
- Created: 12 Sep 2018
- Licence file reads as: –

**Development practices (14)**

| Kind | Found |
| --- | --- |
| Continuous integration | GitHub Actions, R CMD check workflow The `R CMD check` workflow runs on Linux, macOS and Windows, and on R-devel |
| Governance and community | Code of conduct, Contributing guide |
| Docs source | README.Rmd, pkgdown GitHub Pages site last deployed 2026-09-27 The repository has a site deploy workflow pkgdown site last built 2026-04-09 |
| Coverage | Coverage reporting (Codecov), .covrignore |
| Lint, format, editor | Lint workflow, Air, VS Code, RStudio project |

[Across r-lib](/repos/r-lib.md#practices)

## History

[Method](/about/archive.md)

The line runs from the first release of pkgcache on 31 Dec 2018 to 28 Oct 2026 and marks all 26 of its releases.

| Version | Released | R |
| --- | --- | ---: |
| [2.2.5](/cran/pkgcache/v/2.2.5.md) current | 9 Apr 2026 | 4.5.3 |
| [2.2.4](/cran/pkgcache/v/2.2.4.md) | 26 May 2025 | 4.5.0 |
| [2.2.3](/cran/pkgcache/v/2.2.3.md) | 12 Sep 2024 | 4.4.1 |
| [2.2.2](/cran/pkgcache/v/2.2.2.md) | 4 Apr 2024 | 4.3.3 |
| [2.2.1](/cran/pkgcache/v/2.2.1.md) | 10 Dec 2023 | 4.3.2 |
| [2.2.0.1](/cran/pkgcache/v/2.2.0.1.md) | 18 Jul 2023 | 4.3.1 |
| [2.2.0](/cran/pkgcache/v/2.2.0.md) | 18 Jul 2023 | 4.3.1 |
| [2.1.1](/cran/pkgcache/v/2.1.1.md) | 14 Jun 2023 | 4.3.0 |

**Earlier versions (18)**

| Version | Released | R |
| --- | --- | ---: |
| [2.1.0](/cran/pkgcache/v/2.1.0.md) | 18 Apr 2023 | 4.2.3 |
| [2.0.4](/cran/pkgcache/v/2.0.4.md) | 16 Dec 2022 | 4.2.2 |
| [2.0.3](/cran/pkgcache/v/2.0.3.md) | 26 Oct 2022 | 4.2.1 |
| [2.0.2](/cran/pkgcache/v/2.0.2.md) | 8 Sep 2022 | 4.2.1 |
| [2.0.1](/cran/pkgcache/v/2.0.1.md) | 19 Feb 2022 | 4.1.2 |
| [2.0.0](/cran/pkgcache/v/2.0.0.md) | 16 Feb 2022 | 4.1.2 |
| [1.3.0](/cran/pkgcache/v/1.3.0.md) | 29 Nov 2021 | 4.1.2 |
| [1.2.2](/cran/pkgcache/v/1.2.2.md) | 19 May 2021 | 4.1.0 |
| [1.2.1](/cran/pkgcache/v/1.2.1.md) | 14 Apr 2021 | 4.0.5 |
| [1.2.0](/cran/pkgcache/v/1.2.0.md) | 1 Mar 2021 | 4.0.4 |
| [1.1.1](/cran/pkgcache/v/1.1.1.md) | 11 Oct 2020 | 4.0.3 |
| [1.1.0](/cran/pkgcache/v/1.1.0.md) | 7 Jul 2020 | 4.0.0 |
| [1.0.7](/cran/pkgcache/v/1.0.7.md) | 18 Apr 2020 | 3.6.3 |
| [1.0.6](/cran/pkgcache/v/1.0.6.md) | 30 Jan 2020 | 3.6.2 |
| [1.0.5](/cran/pkgcache/v/1.0.5.md) | 31 May 2019 | 3.6.0 |
| [1.0.4](/cran/pkgcache/v/1.0.4.md) | 13 May 2019 | 3.6.0 |
| [1.0.3](/cran/pkgcache/v/1.0.3.md) | 11 Jan 2019 | 3.5.2 |
| [1.0.2](/cran/pkgcache/v/1.0.2.md) | 31 Dec 2018 | 3.5.2 |

**Release notes (2.2.5)**

- pkgcache now supports comments in `DESCRIPTION` and `PACKAGES` files. Current R-devel supports this since https://github.com/wch/r-source/commit/92d9660517ceae66d422a510dc58e0840d55cdfc. Comments are lines that start with a hash (`#`), without leading whitespace. Comments within values are also supported (#130).
- pkgcache now does not fail if Bioconductor is unreachable and Bioconductor repositories are off (#131).
- pkgcache now supports macOS binaries on R 4.6.x and later.

---

R Observatory is independent of the R Project, CRAN and Bioconductor. The same page for people is at /cran/pkgcache, and every address is listed at /llms.txt.
