NEWS
courieR 0.3.0
Bug fixes
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.
- Dashboard: fixed "Operation not allowed without an active reactive context"
on startup, caused by reading a
reactiveVal outside a reactive consumer in
the sync log helper (now wrapped in isolate()).
Dashboard UX
- Renamed the core actions to match courieR's shipping vocabulary:
Scout (detect installations), Inventory (compare libraries), and
Ship (transfer packages). The main tab is now Dispatch, and the
Advanced tabs are Restock, Depot, Delivery Receipt, Route,
and Manifest.
- Detection is no longer automatic on startup; click Scout to scan. A
Scout → Inventory → Ship workflow note appears in the control panel, and the
result is shared across tabs.
- The logo twinkles while the app is busy (tied to Shiny's busy/idle events).
- Comparison table: per-column filters (search boxes for package/versions, a
dropdown for status), pagination grouped compactly below the table, and the
global search box removed. The log panel sits beside the comparison, spanning
its full height.
- Transfer mode options shortened (Online reinstall / Offline copy / Preserve
version) with a live description of the selected mode.
find_routes() is called once per scan and shared across modules instead of
being re-run by each, reducing startup/detection time.
courieR 0.2.3
New features
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.
Bug fixes
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")).
Performance & UX
find_routes() per-candidate subprocess timeout reduced from 5 s to 3 s, shortening detection time when multiple R versions are installed.
- Sync dashboard: replaced the floating
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().
- Sync dashboard: detection phase shows a Bootstrap info alert while scanning and records "Detection complete: found N installation(s)." in the sync log.
courieR 0.2.2 (2026-06-04)
- CRAN resubmission addressing reviewer feedback.
courieR 0.2.1
- Fixed correctness bugs identified during CRAN review.
- Added centralised error reporting in the Shiny module.
courieR 0.2.0 (2026-05-30)
- CRAN readiness: hardened documentation, CRAN-safe examples, and CI workflow.
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.
- Added
cran-comments.md and .github/workflows/R-CMD-check.yaml.
- DESCRIPTION title simplified; version bumped.
courieR 0.1.0
- Initial release.
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.