- (#2129): The source editor can now be split, showing two views of the same document side by side or one above the other, so different parts of a file can be viewed and edited at the same time. Use the new split button in the editor toolbar, the View > Split Editor menu, or the new commands (Split Editor Right, Split Editor Down, Remove Editor Split, Toggle Editor Split, Focus Other Editor Split); when a source editor already has focus, Move Focus to Source (Ctrl+1) toggles focus between the two views. Edits, undo history, and saved state are shared between the two views, while cursor, selection, scroll position, and folds are per-view; the split is remembered per document. Splits apply to source mode; inline chunk output in R Markdown / Quarto documents continues to display in the primary view only, breakpoints and debug highlighting are managed through the primary view, and Find/Replace searches the primary view.
- (#18602): Fixed an issue where folding a section header decorated with a run of
#characters -- a bar such as##############, or a banner such as##### Section A #####-- collapsed far more of the file than the section it labels, often everything through several later sections or the whole rest of the document. Hierarchical section folding, added in 2026.05.0, infers a header's heading level from its leading#characters, so a decorative run was read as a heading depth; a wider header later in the file then looked like a subsection and was folded away along with its contents. A header made up entirely of delimiter characters, or one whose run is deeper than######, now carries no heading level and folds as a top-level section, while#/##/###hierarchies continue to nest. The document outline infers heading levels through the same rule, so a header nests the same way in the outline as it folds in the editor. - (#18597): Fixed an issue where Posit Assistant code suggestions looked for their language server only under the per-user installation directory, ignoring both the
RSTUDIO_POSIT_AI_PATHoverride and a system-wide installation (e.g./etc/rstudio/pai/bin) -- locations the chat backend does honor. With only a system-wide installation present, chat worked but code suggestions never started; with the override set, chat and code suggestions could run out of two different installations. Both halves of the assistant now resolve the same installation. - (#18451): Fixed an issue where a startup crash in an AI assistant agent (GitHub Copilot or Posit Assistant) dumped the agent's entire stderr output into the session log and into the user-facing launch-failure message. Node.js prints the offending source line before the stack trace, and for a bundled agent that line is the whole minified bundle, so each crash wrote tens of kilobytes of JavaScript with the actual error buried at the end. The stderr text is now truncated to its tail -- where the error and stack trace appear -- both when logged and when accumulated into the launch error. The Posit Assistant chat backend's stderr, logged the same way, is truncated likewise.
- (#18570): Fixed an issue where a failed Posit Assistant manifest download reported a generic error ("Input/output error" on Linux and macOS, "Access is denied" on Windows) in both the Connection Error dialog and the session log. The actual cause captured from the download -- e.g. a DNS, proxy, or TLS failure reported by R on stderr -- was recorded on the error but never displayed; it is now shown in both places.
- (#18610): Fixed an issue where a failed Posit Assistant install or update reported only "Download failed: cannot open URL ...", dropping the reason for the failure -- a proxy, DNS, or TLS error, which R reports in a warning rather than in the error it raises. The reason is now shown with the failure and written to the session log. A download that fails without raising an error --
download.file()reports some failures with a warning and a non-zero return status -- is now also reported as a download failure; a truncated package previously reached the SHA-256 check and was reported as a package integrity failure instead. The 60-second transfer timeout the download intended now takes effect, and a longer timeout configured by the user or administrator is left in place. - (#18531): Fixed an issue where breakpoints set inside methods registered on S7 generics (created with
S7::new_generic()) never fired, on any R version. As with breakpoints in S7 methods for S3 generics, the breakpoint looked like it had been set but was silently dropped. - (#18572): Fixed a race on RStudio Server where restarting the R session (or any session relaunch) could launch two replacement rsession processes, leaving one running as an invisible orphan. The orphan held the project's source-database lock -- so the visible session reported "The previous R session terminated abnormally" -- and kept running background work indefinitely. An error from a request still in flight to the exiting session no longer cancels the record of the freshly launched replacement, which is what allowed the second launch.
- (#18571): Fixed an issue where starting the Posit Assistant chat backend could fail indefinitely with a spurious "A Posit Assistant update is in progress. Please try again in a moment." after an R session restart. The per-session installation lock was named by the session id, which survives restarts, so a predecessor rsession process that outlived the restart (see #18572) held the lock under the replacement's own name; the lock name is now unique per process.
- (#18425): Fixed an error ("Cannot read properties of undefined") raised by the completion popup's snippet help in multi-mode documents such as R Markdown and Quarto. Snippets are looked up for the mode under the cursor, and the cursor can cross a mode boundary (e.g. into or out of a chunk) between a snippet completion being offered and its help or insertion being requested; snippet help is now skipped, and inserting such a snippet does nothing, when the snippet is no longer available.
- (#18526): Fixed an issue where breakpoints set inside S7 method bodies never fired on R versions older than 4.3.0. The breakpoint looked like it had been set (a solid red dot in the editor gutter) but was silently dropped, so execution ran straight through it. Also fixed the same silent drop for methods on package-scoped S7 classes (created with
new_class(..., package = )), which affected all R versions. - (#18559): Fixed an issue where the Plots pane was not brought to the front when a plot was drawn earlier in a still-busy command -- for example
plot(1:10); Sys.sleep(2)in the console, or code the Posit Assistant runs whose post-plot processing keeps the turn busy. The incremental render performed while R is busy consumed the plot's change notification, so the end-of-turn activation found nothing to do; that activation is now remembered and honored when the command completes. - (#18533): Fixed an issue on RStudio Server where a spurious "Error Listing Objects: Unable to connect to service" dialog could appear after restarting the R session. The Environment pane refreshes as soon as the restart is requested -- while the old session is still exiting -- and when the relaunch was slow, that refresh eventually failed with a connection error and raised a modal even though the session came back normally.
- (#18527): Fixed an issue on Windows where environment variables set by RStudio while R was running were visible to child processes but not to
Sys.getenv()in the R session itself -- for example, the RtoolsPATHentries added during package builds, or the ssh-agent variables set when caching git credentials. RStudio now writes environment variables through both the Windows process environment block and the C runtime, so R (when built against the UCRT, i.e. R >= 4.2) and in-process libraries observe updates and removals; in particular, secrets that RStudio scrubs from its environment at startup are now also removed from the C runtime's copy. - (#18527): Fixed an issue on Windows where user-level
.Renvironfiles were still processed when starting a session in an untrusted directory. The suppression relied on settingR_ENVIRON_USERto an empty value, but Windows deletes an environment variable assigned an empty value, so R fell back to reading~/.Renviron; the variable now points at the null device instead. - (#10756): Hardened session startup against rare, silent crashes. Background threads no longer block the synchronous fault signals (SIGSEGV, SIGBUS, SIGILL, SIGFPE), so a crash on such a thread now produces a crash report instead of terminating the process with no diagnostics; environment-variable access through RStudio's accessors is now thread-safe, closing a race where a background thread could read the environment while startup was still modifying it; and the desktop parent-termination monitor now reads its configuration on the main thread before its monitor thread starts.
- (#18507): Reduced macOS file monitor overload on large projects ("File monitor events were dropped" warnings) and the bursts of repeated full-project rescans it triggered. Events for always-ignored high-churn directories (
.git,node_modules,renv/library, etc.) are now excluded before delivery, events coalesce for longer before delivery during sustained churn, and when events are still dropped, recovery rescans are debounced so an overload episode triggers a bounded number of rescans rather than one per dropped batch. - (#18515): Fixed an issue on Windows where the 32-bit session binaries were missing from the installer, so RStudio Desktop failed to start a session when a 32-bit R installation was selected. The binaries were built and code-signed, but were dropped before packaging.
- (#18512): Fixed an issue on Windows where
rsession.dllwas shipped without a code signature. The signedrsession.exeandrsession-utf8.exeare thin launcher stubs, so nearly all of the R session implementation lives in that DLL; policies that verify every loaded module rather than only the launching executable could block or flag it. - (#18507): Reduced macOS file monitor overload on large projects ("File monitor events were dropped" warnings) and the bursts of repeated full-project rescans it triggered. Events for always-ignored high-churn directories (
.git,node_modules,renv/library, etc.) are now excluded before delivery, events coalesce for longer before delivery during sustained churn, and when events are still dropped, recovery rescans are debounced so an overload episode triggers a bounded number of rescans rather than one per dropped batch. Nested git worktree checkouts under.worktrees/are now also excluded, both from monitoring and from pre-delivery event exclusion, so builds running in in-repo worktrees no longer overload the file monitor of a session with the parent project open. - (#18493): Fixed an issue where checkbox and radio button states were invisible on Windows when a contrast theme with a dark background was enabled. RStudio drew the checkmark and radio dot as fixed black images, which contrast themes leave untouched while forcing the surrounding control to the theme's background color. These controls now use the browser's native rendering when a contrast theme is active.
- (#18474): Fixed an issue where showing an inline LaTeX / math preview popup in the source editor leaked a keyboard handler each time the popup was rendered; after the popup was dismissed, the leaked handlers swallowed every subsequent Escape keypress in the IDE and raised a client exception ("Cannot read properties of null") on each one.
- (#17806): Further Data Viewer performance improvements: searching and filtering no longer recompute per-column summary statistics when the Summary panel is hidden (and superseded summary requests are now cancelled); scrolling with a sorted or filtered view no longer re-sorts and re-filters the data after every console command; mouse-wheel scrolling over the frozen (row name / pinned) columns no longer waits on the main thread; and each scroll frame no longer recomputes the Summary panel's scrollbar layout.
- (#17806): Fixed a memory leak in the Data Viewer: each time a viewed object was observed to change (e.g. reassigned at the console), the previous copy of the object stayed pinned in memory for the remainder of the session.
- (#18472): Fixed an issue where editing a line could leave stale syntax highlighting on the lines below it in plain Markdown and YAML documents -- for example, rainbow fenced div colors not updating below a newly-inserted fence, or a YAML multiline string keeping its old highlighting after its opener was re-indented.
- (#18447): In the Console, Home and End (plus Ctrl+A / Ctrl+E and Cmd+Left / Cmd+Right on macOS, and Alt+Left / Alt+Right on Windows and Linux) now move to the start and end of the whole command, rather than stopping where a long command wraps onto the next line. The matching selection shortcuts (Shift+Home, Shift+End, and friends) select to those same positions.
- (#18469): Fixed an issue where an R raw string (e.g.
r"(...)") corrupted internal editor state for all following lines, most visibly breaking header folding below the raw string in R Markdown documents. - (#18468): Fixed an issue where pressing Enter inside a C++ (e.g. Rcpp) chunk of an R Markdown or Quarto document failed to indent the new line, raising an internal error, whenever another completed chunk appeared earlier in the document. Also fixed an internal error raised when reformatting R code containing Quarto
#|comment lines. - (#18464): Fixed rainbow fenced div highlighting in the source editor so that colors follow the nesting structure: nested divs now use a different color than their parent, and sibling divs at the same depth share a color, with opening and closing fences of the same div always matching.
- (#18501): Fixed the localhost proxy (
/p/,/p6/) to restrict resolution of "localhost" to the requested address family, so a request no longer risks connecting over the wrong IP version when the resolver returns both an A and an AAAA record. - (#18444): Fixed an issue where the four-pane layout would collapse repeatedly, with any pane that raised itself -- after a package update, a render, or a help lookup -- taking over the whole window and hiding its neighbours. RStudio could be left tracking a zoom that the layout no longer showed, and it then re-applied that zoom to the next pane to raise itself. Escaping a zoom with the pane header's restore button, and showing the sidebar while a pane is zoomed, now end the zoom properly; and a zoom is no longer restored at startup, since the zoomed column widths were already deliberately not restored. Use View > Panes > Show All Panes to clear the bad state in an affected session.
- (#18448): Fixed the remaining ways RStudio could be left tracking a pane zoom that the layout no longer showed (see #18444): zooming a column while a pane was zoomed, hiding the sidebar while a column was zoomed (which left a pane column collapsed to a sliver), adding or removing a source column while a pane was zoomed, and a pane requesting more or normal height (e.g. a Viewer preview) while a pane was zoomed. All of these now end the zoom properly.
- (#18482): Fixed an issue on Windows where the R session reported a crash as it exited, if a terminal was still running when the session closed. The session had already shut down and saved its state by that point, so nothing was lost, but the spurious report was recorded in the Windows event log and submitted to Windows Error Reporting.
- Copilot Language Server 1.531.0
- Electron 42.9.3
- Quarto 1.10.18
- (#18605): RPubs and ShinyApps.io are now marked
[Deprecated]where they appear as publishing destinations: the RPubs page of the Publish wizard, the Publish to RPubs dialog, the ShinyApps.io page of the Connect Account dialog, and ShinyApps.io accounts in the account lists of the publish dialog and the Publishing options pane. Both services are being sunset; see https://posit.co/blog/migrating-connect-cloud-posits-unified-publishing-solution for migration paths.