The documentation of Posit Package Manager says that Package Manager allows developers to use packages snapshotted at a certain time, so that all developers see a consistent set of packages.
If we do not use Package Manager, is this not possible if developers specify the version number of every package when fetching from a public repository?
If version numbers are specified, do we still need Package Manager?
There are many ways to solve package reproducibility. One way Package Manager supports that is through repository snapshots, where Posit takes a snapshot of the public repositories (CRAN, Bioconductor, and PyPI) every day to allow your developers to pin their packages to a specific point in time and reproduce that in other environments, even months or years later.
This is particularly important for repositories like CRAN which operates at a "latest point in time" model, where when you install a package using R's native tooling, you'll only get the latest version of an available package, even if your work was built on an earlier version (or requires that earlier version for compatibility with your code or other packages). There's no built-in way to specify a specific version of a CRAN package you wish to install.
There are other R packages that do help with this, such as devtools which can install a specific version from source, renv which can snapshot your package environment and help reconstruct the versions you require, and pak which supports these and many other useful features.
Note that full repository snapshots, as well as our pre-built CRAN binary packages for Linux, are all available for free on Posit Public Package Manager (p3m.dev). Our commercially-licensed Package Manager has additional features designed to help organizations who want to bring those repositories inside their own network, provide enhanced security, curation, and blocking tools, as well as support for seamlessly sharing your own packages or others not available from the public repositories. All of these features help ensure that every developer on the team is using a consistent set of packages to get the job done.