The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
libpath is the
library directory shared by every package, but .copy_plan()
passed it through as if it were the per-package source, so each “copy”
recursively cloned the entire source library into
target/<pkg>/ — leaving no valid package where R
looks and reporting a silent success. The package name is now joined
onto the library path, which also restores the cross-major
compiled-package warning (its libs/ check was always false
before). Covered by a .copy_plan +
copy_packages regression test and an opt-in browser
end-to-end test (COURIER_E2E=true).find_routes() probed each candidate with a
hard 3 s timeout and silently discarded any that exceeded it, so a cold
R start (antivirus, OneDrive-synced installs) made versions flicker in
and out between runs. The default probe timeout is now 30 s,
configurable via options(courier.probe_timeout = ), and a
probe that does time out is reported with a warning instead of
vanishing; the rig list timeout was also raised from 5 s to
15 s.find_target_lib() and the pak install subprocess inherited
the parent R session’s R_LIBS_USER, so ship()
installed into the parent’s library while Compare scanned the
real target. All subprocesses that launch another R now share one
environment-stripping helper (child_r_env()), and the
install destination is guaranteed to be a library that
manifest() scans.report_issue() — new exported function. Call it from
the console after any error to open a pre-filled GitHub issue form in
your browser with your R version, platform, courieR version, and the
error message already populated. The dashboard’s error modal gains a
Send Report button that does the same in one
click.library(courieR) startup message now includes a link to
the user guide vignette
(vignette("get-started", package = "courieR")).A → B context bar was removed.ship() with
upgrade = FALSE. Selected packages still install or upgrade
to the latest compatible version, but their already-installed
dependencies are left alone unless a version requirement forces a
change. This removes the main cause of multi-minute single-package
shipments.ship()
(source_pkgs/target_pkgs), instead of
re-scanning both libraries for every batch.manifest() no longer leaks the parent R session’s
library/home environment into the target R subprocess. Previously
processx inherited R_LIBS_USER (and
R_HOME) from the R running courieR, so every probed
installation reported the parent’s library — making distinct R versions
appear to share one library and compare as 100% identical. The
subprocess now strips R_LIBS_USER, R_LIBS,
R_LIBS_SITE, and R_HOME while still reading
the target R’s own .Renviron/.Rprofile.reactiveVal
outside a reactive consumer in the sync log helper (now wrapped in
isolate()).Scout → Inventory → Ship
workflow note appears in the control panel, and the result is shared
across tabs.find_routes() is called once per scan and shared across
modules instead of being re-run by each, reducing startup/detection
time.ship() and migrate() gain a
mode argument:
"online" (default) — reinstall packages via pak from
CRAN/GitHub/Bioconductor."offline" — copy package directories by file; packages
with no valid source path are skipped and reported."preserve" — copy first to keep exact versions; fall
back to a pinned pak spec (pkg@version) for packages that
cannot be copied. The dashboard Sync tab exposes the same three options
as a dropdown.migrate(from, to) — one-call CLI migration. Pass
version strings ("4.5.2", "4.6.0") or full
Rscript paths; courieR resolves the installations and runs
ship() automatically.hub() — short alias for open_hub(). Run
hub() to launch the dashboard with less typing.library(courieR) now prints the version number and a
reminder to run hub() or see ?ship.ship() gains a log_callback argument for
real-time progress messages from the pak subprocess, including a notice
when first-time metadata loading may take 1–2 minutes.manifest() now reliably excludes base and recommended
packages on Windows. The previous path comparison was case-sensitive and
could let packages like translations slip through into a
sync plan, causing a pak error. The filter now uses case-insensitive
path comparison and a name-based guard via
installed.packages(priority = c("base", "recommended")).find_routes() per-candidate subprocess timeout reduced
from 5 s to 3 s, shortening detection time when multiple R versions are
installed.withProgress()
modal with an inline Bootstrap progress bar inside the log pane. Log
lines now append to the DOM immediately, removing the need for
shiny:::flushReact().ship() gains a @section Safety: block
documenting subprocess and library write behavior.manifest() now uses deparse() for library
path quoting, fixing edge cases with special characters.manifest() CSV fallback parsing now handles multi-line
CSV output correctly.cran-comments.md and
.github/workflows/R-CMD-check.yaml.find_routes() detects R installations on Windows,
macOS, and Linux, including user-local installs.manifest() scans installed packages from any R
installation via subprocess.inventory() compares two package libraries and reports
missing, outdated, and newer packages.ship() migrates packages from one R installation to
another using pak.open_hub() launches a Shiny dashboard for
point-and-click migration.These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.