## RStudio 2026.06.0 "Blue Plumbago" Release Notes

### New
- ([#15830](https://github.com/rstudio/rstudio/issues/15830)): Add a Code menu and command-palette entry to re-enable the editor's missing-package banner for a file after dismissing it, and rename the banner's dismissal label to "Don't show for this file" to make the per-file scope explicit.
- ([#17734](https://github.com/rstudio/rstudio/issues/17734)): Support em dashes and box-drawing characters as native R code section delimiters.
- ([#8541](https://github.com/rstudio/rstudio/issues/8541)): Add a "Change active editor tab with mouse wheel" preference (General > Basic > Other) to disable switching the active editor tab by scrolling the mouse wheel over the tab bar.
- ([#2350](https://github.com/rstudio/rstudio/issues/2350)): Add an Appearance pane to Project Options for setting a project-specific editor theme; leaving it at "(Default)" uses the global theme. A new "Ignore project-specific appearance settings" option (Global Options > Appearance) keeps the global editor theme even when a project sets its own.
- ([#17923](https://github.com/rstudio/rstudio/pull/17923)): Posit Assistant now runs R code expression by expression, interleaving each expression with its output in the chat pane, rather than running the whole block at once and showing all output at the end.
- ([#14965](https://github.com/rstudio/rstudio/issues/14965)): The Insert Pipe Operator command (Ctrl+Shift+M / Cmd+Shift+M) now inserts the native R pipe operator `|>` by default; the magrittr pipe `%>%` can be restored via the "Use R's native pipe operator, |>" preference.
- ([#17501](https://github.com/rstudio/rstudio/issues/17501)): Move the Find in Files refresh button to the right side of the toolbar, matching the convention used by other panes, and make the replace preview's match highlight colors theme-aware so they no longer look out of place under dark editor themes.
- ([#17912](https://github.com/rstudio/rstudio/issues/17912)): Add a `project-trust-required` session option (off by default) that treats all projects as untrusted by default -- including projects in the user's home directory -- prompting users to trust each project when opened even if it contains no auto-executing files. Additionally, the visual editor is now disabled in untrusted projects, whether or not this option is set; only the source editor is available for markdown documents.
- ([#17748](https://github.com/rstudio/rstudio/issues/17748)): When "Use Air for code formatting" is enabled, Air now formats R documents even when no `air.toml` file is present, using the editor's indentation settings (indent style and width). The previous behavior of formatting only in projects containing an `air.toml` can be restored with the new "Only use Air when an air.toml file is found" option (Global Options > Code > Formatting).
- ([#17959](https://github.com/rstudio/rstudio/issues/17959)): Add a clear-sort button to the data viewer's status bar; when a column sort is active, the "Sorted by" status now includes an X button that clears the sort and restores the data frame's natural row order.
- ([#17966](https://github.com/rstudio/rstudio/pull/17966)): Enhance the data viewer's column Summary sidebar: columns can now be pinned and sorted directly from the sidebar (including columns scrolled out of the grid window), numeric columns show their data range and every column shows its NA percentage, factor and character columns with few distinct values draw frequency mini-plots, and a help button explains the sidebar's layout.
- ([#17915](https://github.com/rstudio/rstudio/issues/17915)): Add a preference to control how often RStudio checks for Posit Assistant updates (the default is every 2 hours).
- ([#17962](https://github.com/rstudio/rstudio/pull/17962)): Show the column count (e.g. "12 columns", or "50 of 5,000 columns" when column pagination means only the current page is listed) in the data viewer's Summary sidebar header in place of the redundant "Summary" label, and add a close glyph to the header for dismissing the sidebar.

### Fixed
- ([#17990](https://github.com/rstudio/rstudio/issues/17990)): Fix the data viewer becoming unusable when a numeric column's histogram computation fails; such a failure now leaves that one column without a sparkline instead of aborting the whole data frame.
- ([#17937](https://github.com/rstudio/rstudio/issues/17937)): Fix the Object Explorer showing the first element's contents for every same-named element when a list has duplicated names; such elements are now retrieved by index instead of by name.
- ([#17944](https://github.com/rstudio/rstudio/issues/17944)): Fix the Source pane occasionally restoring the wrong active tab after a reload or session restart when tabs had been drag-reordered or documents opened mid-session; the active document is now remembered by ID rather than by tab position.
- ([#17521](https://github.com/rstudio/rstudio/issues/17521)): Fix R Notebook previews failing with "object not found" when the document contains inline R code referencing objects in the global environment; inline chunks are now evaluated in the user's R session and their outputs passed to the background notebook render. This can be disabled with the new "Execute inline R code when previewing notebooks" preference (Global Options > R Markdown).
- ([#17501](https://github.com/rstudio/rstudio/issues/17501)): Fix the secondary toolbars in the Find in Files and Presentation panes rendering 2px shorter than the space reserved for them, which left a small dead strip below the toolbar border.
- ([#17892](https://github.com/rstudio/rstudio/issues/17892)): Added a "Use the system certificate store" option (Tools > Global Options > Assistant) so the GitHub Copilot agent and Posit Assistant trust the operating system certificate store (Windows Certificate Store, macOS Keychain) when connecting -- useful behind a TLS-inspecting proxy on RStudio Desktop.
- ([#17898](https://github.com/rstudio/rstudio/issues/17898)): Recognize the Posit Assistant's `.posit/assistant` project-state directory (in addition to the legacy `.positai`) when updating a project's `.gitignore`, `.Rbuildignore`, and `svn:ignore` files, so it is ignored automatically once it appears. The rest of `.posit` -- such as the Posit Publisher extension's `.posit/publisher` -- is left tracked.
- ([#17147](https://github.com/rstudio/rstudio/issues/17147)): Fix code suggestions being silently accepted off-screen. Inline (at-cursor) ghost text is now dismissed when the cursor moves elsewhere; accepting a next edit suggestion that is scrolled out of view first navigates to it, with a second key press accepting it; an arrow indicator pinned to the edge of the gutter now points toward an active off-screen suggestion, and clicking it navigates there.
- ([#17900](https://github.com/rstudio/rstudio/issues/17900)): Fix Find in Files (and project code search) returning no results in a Quarto or R Markdown website project whose output directory is set to the project directory itself (for example `output-dir: .` in `_quarto.yml`); the project root is no longer treated as ignored output content.
- ([#14202](https://github.com/rstudio/rstudio/issues/14202)): Fixed an issue where RStudio Desktop could hang on startup when offline or on an unreliable network connection.
- ([#17701](https://github.com/rstudio/rstudio/issues/17701)): Honor newline characters in `rstudioapi::showDialog()` and `rstudioapi::showPrompt()` messages.
- ([#17729](https://github.com/rstudio/rstudio/issues/17729)): Show distinct copy in the Posit Assistant chat pane and preferences install prompt when the recommended Posit Assistant version is older than the installed one.
- ([#17738](https://github.com/rstudio/rstudio/issues/17738)): Fix `file.edit()` (and other Source pane open events) silently dropping when invoked during an in-flight `closeAllSourceDocs`.
- ([#17745](https://github.com/rstudio/rstudio/issues/17745)): Fix the bundled `air` formatter being copied without the `.exe` extension on Windows, which prevented format-on-save with Air from working.
- ([#17750](https://github.com/rstudio/rstudio/issues/17750)): Cache the resolved path to the Air formatter, and prefer an already-installed copy of Air over querying GitHub for the latest release, so format-on-save with the auto-installed Air no longer pings GitHub (a delay of 600ms or more) on every save.
- ([#17746](https://github.com/rstudio/rstudio/issues/17746)): Fix the automatic download of the Air formatter failing on slow connections. The download now uses the `curl` binary when available, which only times out on inactivity rather than on total download time; when `curl` is unavailable, the `download.file()` fallback raises R's download timeout to at least 300 seconds for this download.
- ([#17737](https://github.com/rstudio/rstudio/issues/17737)): Restore the "Show .Last.value in environment listing" preference, which had stopped surfacing `.Last.value` in the Environment pane.
- ([#17743](https://github.com/rstudio/rstudio/issues/17743)): Fix the debugger failing to capture the browser environment for functions loaded by the `box` package.
- ([#17712](https://github.com/rstudio/rstudio/issues/17712)): Fix Quarto rendering failing on Windows when the user's home folder path contains an ampersand.
- ([#17669](https://github.com/rstudio/rstudio/issues/17669)): Avoid re-scanning the watched directory on every Files pane notification on macOS by enabling FSEvents per-file event reporting for non-recursive watches.
- ([#17768](https://github.com/rstudio/rstudio/issues/17768)): Handle the ANSI cursor-movement escape sequences cursor-up (CSI A), cursor-down (CSI B), cursor-next-line (CSI E), cursor-previous-line (CSI F), and cursor-horizontal-absolute (CSI G) in the console so that multiple `cli` progress bars render on separate lines instead of overwriting each other.
- ([#17225](https://github.com/rstudio/rstudio/issues/17225)): Fix duplicate entries appearing in the recent projects list when the same project was recorded under both aliased (`~/...`) and absolute path forms.
- ([#17777](https://github.com/rstudio/rstudio/issues/17777)): Fix "Import Dataset" from the Environment pane failing with "could not find function '.rs.digest'" when previewing a CSV (or other readr/readxl/haven source).
- ([#3798](https://github.com/rstudio/rstudio/issues/3798)): The Windows terminal now uses the native Windows pseudoconsole (ConPTY) instead of the legacy winpty library, improving Ctrl+C handling in console programs.
- ([#17800](https://github.com/rstudio/rstudio/issues/17800)): Fix the data viewer's horizontal scrollbar staying hidden after returning to the tab, and fix Ctrl+C/Cmd+C copying only the active cell instead of the user's multi-cell text selection.
- ([#17958](https://github.com/rstudio/rstudio/issues/17958)): Restore the data viewer's End and Ctrl+End behavior: they once again scroll to the last row of the current column instead of jumping to the last column, and the jump now lands with the last row fully visible rather than stopping a header-height short of the bottom.
- ([#17806](https://github.com/rstudio/rstudio/issues/17806)): Fix the data viewer becoming slow to open, scroll, and search -- and freezing for several seconds when opening very wide data frames -- when there are many columns or the summary panel is shown. The grid now renders only the rows and columns currently in view.
- ([#17835](https://github.com/rstudio/rstudio/issues/17835)): Fix a pinned column in the data viewer jumping to a different column after paging to another set of columns in a very wide data frame; the pinned column now stays visible and tracks its original column across column pagination.
- ([#17861](https://github.com/rstudio/rstudio/issues/17861)): Preserve the data viewer's scroll position when the displayed data is refreshed in place -- for example after adding or removing a column, or changing values in an existing column -- so the grid no longer jumps back to the first row. The view still returns to the top when the underlying row count changes (the data was subset, reassigned, or had rows added or removed). Adding a column to a viewed data frame now also displays the new column, instead of keeping the previous set of columns.
- ([#17278](https://github.com/rstudio/rstudio/issues/17278)): Fix a `data.table` returned invisibly from a `:=` update (e.g. `dt[, x := y]`) being auto-printed in notebook chunks, when its output should be suppressed as it is in the console.
- ([#17810](https://github.com/rstudio/rstudio/issues/17810)): Fix the "Run Tests" button modifying the active test file's timestamp even when the file had no unsaved changes.
- ([#17735](https://github.com/rstudio/rstudio/issues/17735)): Hide the redundant column-summary sidebar in the data frame preview shown in the Help pane.
- ([#17066](https://github.com/rstudio/rstudio/issues/17066)): Fix the Assistant preferences pane showing a stale code-assistant account after switching back and forth between GitHub Copilot and Posit Assistant.
- ([#17579](https://github.com/rstudio/rstudio/issues/17579)): On RStudio Desktop, serve Viewer pane content via `127.0.0.1` instead of `localhost`, so HTML files and htmlwidgets display on systems where `localhost` does not resolve to the IPv4 loopback address that R's help server binds to.
- ([#17327](https://github.com/rstudio/rstudio/issues/17327)): Stop requesting code completions and next-edit suggestions while editing in visual mode, where suggestions aren't shown, so document contents are no longer sent to the completion backend for suggestions there.
- ([#17493](https://github.com/rstudio/rstudio/issues/17493)): Fix the comment/uncomment shortcut inserting the comment character at the start of an empty indented line instead of after the indent.
- ([#17868](https://github.com/rstudio/rstudio/issues/17868)): Restrict the Python help URL handler (`/python/`) to valid help-topic names, accepting only plain dotted qualified names.
- ([#17833](https://github.com/rstudio/rstudio/issues/17833)): Fix saving a file silently appearing to succeed when the write actually failed (for example, when the disk is full or a disk quota is exceeded); such failures are now reported and the document keeps its unsaved state.
- ([#17845](https://github.com/rstudio/rstudio/issues/17845)): Fix Find in Files "Replace All" overwriting a source file with truncated or empty contents when the write failed (for example, when the disk is full or a disk quota is exceeded); the replacement is now written atomically and durably, so on failure the original file is left untouched and the error is reported.
- ([#17863](https://github.com/rstudio/rstudio/issues/17863)): Fix the Data Viewer entering a "Failed to fetch" error state when clicking the header of a list column to sort it; such columns are no longer sortable.
- ([#17874](https://github.com/rstudio/rstudio/issues/17874)): Fix the Render button reusing a running Quarto preview and ignoring changes to project options in `_quarto.yml` / `_quarto.yaml` (for example `pdf-engine`); RStudio now restarts the preview when the project config changes so the new options take effect.
- ([#17872](https://github.com/rstudio/rstudio/issues/17872)): Fix a newly added file appearing at the bottom of the Files pane instead of in its sorted position when the pane is sorted by a column.
- ([#17439](https://github.com/rstudio/rstudio/issues/17439)): Fix the Shiny app window (Run App > Run in Window) becoming impossible to close -- and staying orphaned in a grayed-out state across subsequent runs -- when the app registers a `beforeunload` handler that prevents unload. RStudio Desktop now shows a "Leave page?" confirmation (mirroring browser behavior) and closes the window when the user confirms.
- ([#17865](https://github.com/rstudio/rstudio/issues/17865)): Fix project paths on a mapped network drive (e.g. `S:`) being resolved to their UNC target (e.g. `\\server\share`) on Windows, which caused functions such as `here::here()` and `getwd()` to report the UNC path instead of the mapped drive.
- ([#17870](https://github.com/rstudio/rstudio/issues/17870)): Fix an uncaught "Object has been destroyed" error in RStudio Desktop when quitting with a plot zoom (or other child) window still open.
- ([#17830](https://github.com/rstudio/rstudio/issues/17830)): Fix the data viewer not clearing a data set's saved sorts and filters when its tab is explicitly closed, so reopening the data set no longer restores stale filters; the saved state still persists across a session suspend/restore or a page reload. Restored filters now also reveal the filter row, instead of being applied with no visible filter UI.
- ([#17178](https://github.com/rstudio/rstudio/issues/17178)): Fix RStudio locking up when clicking "Run examples" in a help page whose examples launch a blocking application such as a Shiny app. Such examples now run in the console (like `example()`) instead of being rendered inline by the help server.
- ([#17909](https://github.com/rstudio/rstudio/issues/17909)): Fix the Files pane on macOS briefly showing and then emptying the contents of a symlinked directory; file change events are now reported against the path the directory was opened as, rather than its resolved target. Opening a project via a symlinked path on macOS also no longer rewrites the project directory (as reported by `getwd()` and `here::here()`) to the symlink's target.
- ([#17929](https://github.com/rstudio/rstudio/issues/17929)): Fix the "Show code suggestions after keyboard idle (ms)" field never appearing in the Assistant preferences pane (Global Options > Assistant), so the automatic code-completion delay can again be configured from the options UI.
- ([#17942](https://github.com/rstudio/rstudio/issues/17942)): Fix the Data Viewer's Summary sidebar visibility resetting to the preference default when the viewed object's columns changed (for example, after adding a column from the console).
- ([#17941](https://github.com/rstudio/rstudio/issues/17941)): Fix the terminal silently dropping entire output chunks when a multi-byte UTF-8 character was split across PTY reads and the terminal was connected over WebSockets (the default), which severely corrupted the output of programs emitting non-ASCII output at volume (modern TUIs, R packages printing Unicode). A split character is now reassembled across chunks, which also fixes the stray replacement characters previously seen at chunk boundaries when the "Connect with WebSockets" option was disabled.
- ([#17951](https://github.com/rstudio/rstudio/issues/17951)): Fix `View()` failing with "missing value where TRUE/FALSE needed" on data frames containing an integer column whose range exceeds `.Machine$integer.max` (for example, values spanning -2000000000 to 2000000000).
- ([#17950](https://github.com/rstudio/rstudio/issues/17950)): Fix data viewer column filters being silently re-applied after being dismissed -- a value typed or brushed just before pressing Escape, clicking the clear button, or clicking away could land after the header had reverted to "All", leaving the grid filtered with no visible filter. A factor filter restored when its column scrolls back into view now displays its level name instead of a blank box, and pressing Enter in the numeric filter popup now applies the typed value immediately.
- ([#17969](https://github.com/rstudio/rstudio/issues/17969)): Fix switching AI assistants while the previous agent was still initializing occasionally double-initializing the new agent and applying the previous assistant's configuration to it; a stale initialization callback is now discarded when cancelled.
- ([#17994](https://github.com/rstudio/rstudio/pull/17994)): Fix an "Error" dialog ("Cannot read properties of null (reading 'document')") appearing if Global Options was dismissed while the editor theme preview was still finishing its initial Ace JavaScript load; the deferred load callbacks now bail out cleanly when the preview frame has already been detached.
- ([#17994](https://github.com/rstudio/rstudio/pull/17994)): Fix the macOS desktop GWT output cache occasionally producing installer builds without the visual editor's `panmirror.js` bundle (which manifested as a 404 and a visual editor that never finished mounting); the panmirror build output now lands inside the cached gwt directory rather than the source tree, so cache-hit builds keep it. Affects builds that reuse the cached GWT output via `--build-gwt=0`.
- ([#18018](https://github.com/rstudio/rstudio/issues/18018)): Fix RStudio Desktop on Windows hanging when switching projects, closing a project, or opening a project, for sessions whose package repository is a Posit Package Manager URL (for example `packagemanager.posit.co`). The background worker thread used to fetch package vulnerability data is now stopped before the session exits, instead of being torn down while still running.
- ([#18018](https://github.com/rstudio/rstudio/issues/18018)): Recognize a Posit Package Manager repository URL that ends in a trailing slash (the form RStudio's own CRAN-mirror UI writes), so package vulnerability badges are shown for these repositories instead of being silently skipped.
- ([#17841](https://github.com/rstudio/rstudio/issues/17841)): Fix `perl = TRUE` regular expressions (the default in multibyte locales) failing with "this version of PCRE is compiled without UTF support" inside RStudio-hosted R sessions on Linux and macOS, which broke packages such as renv. The session no longer statically links libgit2's bundled PCRE, so it no longer interposes the system PCRE that R uses.
- ([#17143](https://github.com/rstudio/rstudio/issues/17143)): Fix the session restart flow never completing when the post-restart ping exhausted its retries; the completion callback now fires exactly once on every exit path, so a restart that times out no longer leaves the progress indicator up and the session stuck believing it is still restarting.
- ([#17975](https://github.com/rstudio/rstudio/pull/17975)): Fix the data viewer status bar omitting the column count when displaying a zero-column object.
- ([#18022](https://github.com/rstudio/rstudio/issues/18022)): On Windows, fix the final chunk of a child process's standard output being dropped, and fix a rare session crash when draining a process's output at exit; the remaining output is now read directly instead of on a short-lived helper thread.

### Dependencies
- Ace 1.43.5
- Copilot Language Server 1.509.1
- Electron 41.7.2
- Node.js 22.22.2 (copilot, Posit AI)
- Quarto 1.9.38
- xterm.js 6.0.0
