High-Performance Open-Source Archive
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.
Need mirroring services?
Contact our team at info@vpspulse.com.
Mirror powered by VPSpulse
Infrastructure sponsored by VPSPulse & Secure Payments by ArionPay.