What's New in RStudio

## New Features

- Revamped Data Viewer: The data viewer is now faster and supports pinnable columns, a Summary sidebar with type-aware stats and sparkline histograms, keyboard navigation, and clipboard copy.
- Data Viewer Summary preference: The new `data_viewer_show_summary` user preference controls the default visibility of the data viewer's Summary sidebar.
- Roxygen autocompletion in R Markdown and Quarto: Roxygen tag autocompletion (e.g. `@param`, `@return`) now works on `#'` lines inside R code chunks, matching the behavior in plain `.R` files.
- Posit Assistant - open documents at a line: Posit Assistant can now open documents at a specific line.
- Posit Assistant - reveal in Files pane: Posit Assistant can now navigate the Files pane to a directory.
- Posit Assistant - preview URLs in the Viewer: Posit Assistant can now set the Viewer pane to an `http(s)` URL (e.g., a local Shiny app).
- Opt out of package source recording: Added the `allow-package-source-recording` session option (default `true`); when set to `false`, RStudio will not annotate DESCRIPTION files of packages installed via `install.packages()` with the remote repository they came from.

## Enhancements

- Data Viewer column limit: Raised the default value of `data_viewer_max_columns` from 50 to 200.
- Faster new sessions: RStudio Desktop's Session > New Session now opens noticeably faster.
- Hierarchical section folding: Section headers now fold hierarchically based on heading level, matching Positron's default behavior.
- Spell check in document headings: Source-mode spell check now flags misspelled words inside Markdown, R Markdown, and Quarto headings; previously only paragraph text was checked.
- Shiny test integration: The Shiny test commands (Record Test, Run Tests, Compare Results) now use the `shinytest2` package; `shinytest` has been deprecated.
- Linux terminal bell restored: Restored the desktop terminal bell on Linux, now that the underlying Electron crash has been fixed.
- Higher file descriptor limit: Raise the open file descriptor soft limit at session startup to avoid "Too many open files" errors during project file monitoring on Linux.
- Safer source-marker rendering: Source-marker messages in the Build, Markers, and Compile PDF panes are now rendered as plain text by default; only messages that the server explicitly marks as HTML (e.g. C++ Find Usages highlighting) are rendered via `innerHTML`.
- MathJax Safe extension: Enabled the MathJax `Safe` extension in the IDE, the HTML preview, the presentation preview, and the rendered R Markdown viewer.
- Data Import code quality: Column names, character options, locale values, and import URLs are now encoded as R string literals when generating preview and import code.
- Diagnostics report includes positai.log: The diagnostics report now includes `positai.log` alongside `rdesktop.log` and the user's `rsession-*.log`.
- Server TCP keepalive: Server: Enable TCP keepalive on accepted connections so the operating system reaps half-open sockets from disappeared clients (browser tab hibernation, NAT timeouts) instead of holding them indefinitely.
- Faster install.packages() hook: Reduced filesystem work performed by the `install.packages()` hook; the before/after scan is now scoped to the requested packages and their dependency closure rather than the entire library.
- Fewer spurious Packages pane refreshes: Tightened the heuristic used to detect package-management commands at the console prompt, reducing spurious Packages pane refreshes triggered by identifiers like `updates <-` or `installed.packages()`.

## Bug Fixes

- Pressing Escape to dismiss a ghost-text Next Edit Suggestion now also clears the NES gutter icon; previously the gutter icon remained visible after dismissal.
- Diagnostic gutter tooltips no longer show literal `<SPAN>` markup around the message; lint annotations now keep the original text alongside any rendered HTML so the tooltip renders cleanly while the diagnostics popup continues to support ANSI-colored content.
- `difftime` objects (e.g. the result of subtracting two `Sys.time()` values) now show their formatted value in the Environment pane instead of an empty cell.
- Fixed two debugger regressions: top-level breakpoints (e.g. via `debugSource()`) no longer fail to show the debug highlight or call stack, and multi-line input at the `Browse[N]>` prompt no longer clears the captured browser context.
- The Files pane delete confirmation now reflects whether the file will be moved to the system Trash/Recycle Bin or permanently deleted, based on the "Delete files to Trash/Recycle Bin" preference.
- When sending a file to the system Trash/Recycle Bin fails, the Files pane now reports the error and leaves the file on disk; previously it would silently fall back to permanently deleting the file.
- The splash screen can again be dismissed with a mouse click or key press.
- Source-mode spell check no longer disappears on Quarto and R Markdown documents when the bundled YAML diagnostics worker fails to respond; spell-check lint is now applied independently of YAML lint.
- The Windows installer's File Version now matches its Product Version; previously the installer concatenated the major and minor version components into a single value that exceeded NSIS's 16-bit-per-component limit and was truncated to an unrelated number.
- Fixed a startup hang when opening a Quarto project containing large directories (e.g. `_targets/`).
- Posit Assistant: invoking Uninstall Posit Assistant when it is not installed now shows the message "Posit Assistant is not installed." and skips the restart, instead of silently restarting RStudio.
- Added missing French translations for newer commands and preferences, removed an orphaned French key, deduplicated stale entries in the French application strings, and normalized line endings in five English string files.
- Fixed an issue where triggering tab completion inside `[` on a large Matrix-package sparse matrix could hang RStudio and exhaust system memory.
- Fixed a crash on Windows when `Rprofile.site` (or `.Rprofile`) called `download.file()`, `update.packages()`, or other code that emitted console output while RStudio's R runtime dispatch layer was not yet initialized.
- The spell-check context menu now shows the full set of correction suggestions; previously a stray loop increment caused every other suggestion to be skipped, capping the menu at 3 items instead of 5.
- Fix uninformative error in `rstudio::sourceMarkers()` when `marker$type` is not a length-one vector.
- Reindenting C/C++ code with a brace-less control-flow statement (e.g. a `for` whose body is a single braced `if`) no longer over-indents the line that follows the body.