RDesk 1.0.5 (2026-04-22) — Runtime Fix
CRAN release: 2026-04-22
Bug fixes
build_app()now copies the developer’s currently running R installation as the app runtime by default (runtime_dir = NULL). Previously it downloaded a fixed R 4.4.2 portable build which caused crashes in distributed apps when packages had been compiled for a newer R version (e.g. 4.5.x viarenv). The version mismatch between the downloaded runtime and the bundled packages produced a cryptic shared-library ABI error on launch.Added
rdesk_detect_r_home()(internal) which resolves the developer’s R installation path viaR.home()with a clear error if it is not found.Added
rdesk_copy_r_runtime()(internal) which selectively copiesbin/,library/,etc/,modules/, andinclude/from the source R installation into the bundle staging directory.The legacy download behaviour is preserved for CI environments or air-gapped scenarios via
runtime_dir = "download". A warning is printed advising users to prefer the default to avoid version mismatch.
RDesk 1.0.4 (2026-04-01) — First CRAN Release 🎉
CRAN release: 2026-03-31
CRAN compliance fixes
- Replaced all
\dontrun{}withif(interactive()){}or\donttest{}as appropriate. Functions that open native windows are now wrapped inif(interactive()){}. - Executable R code chunks added to all six vignettes and verified to run cleanly under
R CMD check. - All file-writing operations now default to
tempdir(). No default paths write to the user’s home filespace. -
on.exit()added immediately after everysetwd()andoptions()call insidebuild_app(). - Replaced all
installed.packages()calls withrequireNamespace()orsystem.file(). - Added copyright holders for all vendored third-party code to
Authors@Rwithcphroles: Serge Zaitsev (webview.h), Niels Lohmann (nlohmann/json), Microsoft Corporation (WebView2 SDK). Createdinst/COPYRIGHTS.
RDesk 1.0.0 (2026-03-22)
New features
-
Native Window Management: Added
app$set_size(),app$set_position(),app$minimize(),app$maximize(),app$restore(),app$fullscreen(), andapp$always_on_top(). -
Enhanced Native Dialogs: Implemented
app$dialog_folder(),app$message_box()(OK/Yes/No/Cancel with icons), andapp$dialog_color(). -
System Integration:
- Recursive Menus: Native Win32 menu bars now support arbitrarily deep nesting and checkable items.
-
System Tray Context Menus: Added
app$set_tray_menu()for native right-click interaction. -
Global Hotkeys: Added
app$register_hotkey()for system-wide keyboard shortcuts. -
Clipboard: Added
app$clipboard_read()andapp$clipboard_write().
-
Lifecycle & Stability Hardening:
- Anti-Zombie Watchdog: Native launcher now auto-terminates if the parent R process dies.
- Single-Instance Lock: Prevents running multiple copies of the same application.
-
Close Interception: Added
app$on_close()to intercept or cancel window exit attempts. -
Persistent Logging: Success and error logs are now written to
%LOCALAPPDATA%/RDesk.
-
Auto-Updater: Added
app$check_update()to detect and link to remote application updates. -
renv integration: The RDesk development environment and built bundles are now lockable via
renv.lockfor reproducible distribution.
Bug fixes
- Fixed COM reference count leaks and Unicode path handling in the native launcher.
- Resolved R6 namespace collisions during complex application initialization.
- Hardened
build_app(dry_run = TRUE)for rapid environment validation. - Fixed plot rendering synchronization in background worker pools.
RDesk 0.9.0 (2026-03-19)
Breaking changes
- Removed httpuv dependency entirely. Apps built with earlier versions must be rebuilt with the new launcher.
New features
- Zero-port native IPC architecture using WebView2 PostWebMessageAsString and stdin/stdout pipe.
- Virtual hostname mapping via SetVirtualHostNameToFolderMapping – app assets load from disk with no HTTP server.
- Three-tier async engine: async() wrapper, rdesk_async(), and direct mirai access. 5.9x faster task startup vs callr alone.
- Loading overlay system with progress bar, cancellation, and toast notifications built into the framework.
- build_app() now supports build_installer = TRUE for InnoSetup Windows installer generation.
- rdesk_create_app() scaffold generates a complete working app structure ready to run.
- GitHub Actions CI/CD with three workflows: R-CMD-check, build-app, and release.
- Comprehensive error logging – crash.log and rdesk_startup.log written on failure. Native Windows popup on crash.
- System tray, native menus, file dialogs, toast notifications.
Bug fixes
- Fixed bundled dialog, tray, notify, and IPC command handling in
App.Rso packaged apps no longer try to write to a null window process handle. - Hardened launcher shutdown, notification handling, request IDs, menu/tray updates, and save-dialog Unicode handling across the native C++ launcher and
window.R. - Fixed bundled stub logging and stdout handling so packaged apps preserve IPC while still writing crash diagnostics.
- Fixed scaffolded apps and demo apps so bundled mode no longer sinks stdout, app paths resolve more reliably, and generated tests/plots use safer defaults.
- Fixed
build_app()package bundling, temp cleanup, empty-directory copies, and added explicit portable-R strategies viaportable_r_methodandruntime_dir. - Fixed GitHub Actions bundled-app workflows to use explicit installer runtime provisioning and current setup actions.
- Fixed COM reference count leak in C++ launcher on shutdown.
- Replaced hardcoded personal paths with dynamic environment variable lookups in build.R.
- Fixed duplicate publisher parameter in build_app() signature.
- Corrected R-CMD-check YAML quoting for args and error-on fields.
- Removed dead httpuv private fields from App R6 class.
- Fixed @export tags incorrectly placed on private R6 methods.
- Unicode path handling hardened using MultiByteToWideChar throughout C++ launcher.
