Skip to main content

Extensions

The extensions in my R profile, what they are for, and how I install them.
Modified

November 9, 2026

In VS Code, extensions belong to a profile: each profile has its own set. Settings Sync carries the lists between machines together with the rest of the profile (see Profiles and Settings Sync).

The tables below list the extensions in my R profile, which I use for all my R work. My teaching profile R-Lecturer has only vscode-R (reditorsupport.r, reditorsupport.r-syntax) and Quarto (quarto.quarto), plus Copilot Chat, which ships with VS Code (Profiles and Settings Sync).

What I would install for R

For R scripts, R packages and Quarto documents, I would start with these:

  • reditorsupport.r: the R extension (console, help, plots, workspace viewer).
  • reditorsupport.r-syntax: R syntax highlighting (installed together with the R extension).
  • rdebugger.r-debugger: the R debugger.
  • quarto.quarto: Quarto rendering, preview and editing.

The R side (R itself, radian and R packages such as languageserver, httpgd and vscDebugger) is covered in Installation.

R

Extension ID What it’s for
R reditorsupport.r The main R extension (vscode-R): console, help, plots, workspace viewer, chunk commands.
R Syntax reditorsupport.r-syntax Syntax highlighting for R.
R Debugger rdebugger.r-debugger Breakpoints and stepping through R code.
R Version Switcher ondrejmottl.r-version-switcher My own extension: sets the R version for a workspace, from the versions rig manages or from renv.lock (R versions). Not on the Marketplace: installed from the .vsix of a GitHub release (how).
Air - R Language Support posit.air-vscode Fast R formatter and language server by Posit.
multi-command ryuta46.multi-command Runs a sequence of commands as one command.

Quarto, R Markdown, Markdown and writing

Quarto and R Markdown

Extension ID What it’s for
Quarto quarto.quarto Render and preview Quarto documents, visual editor, run cells.
R Markdown All in One tianyishi.rmarkdown R Markdown, bookdown and blogdown support.

Markdown

Extension ID What it’s for
markdownlint davidanson.vscode-markdownlint Lints Markdown style (headings, lists, spacing).
Markdown All in One yzhang.markdown-all-in-one Markdown shortcuts, table of contents, list editing.
Markdown Preview Mermaid Support bierner.markdown-mermaid Mermaid diagrams in the built-in Markdown preview.
Markmap gera2ld.markmap-vscode Shows a Markdown file as an interactive mind map.
Markdown Preview Enhanced shd101wyy.markdown-preview-enhanced A richer Markdown preview (maths, diagrams, export).

Spelling, grammar and references

Extension ID What it’s for
Code Spell Checker streetsidesoftware.code-spell-checker Spell checking in code and prose.
Czech - Code Spell Checker streetsidesoftware.code-spell-checker-czech Czech dictionary for Code Spell Checker.
Grammarly znck.grammarly Grammarly checks in Markdown, Quarto and text files.

Diagrams

Extension ID What it’s for
Draw.io Integration hediet.vscode-drawio Edit draw.io diagrams (.drawio, .drawio.svg, .drawio.png) in VS Code.

Git and GitHub

Extension ID What it’s for
GitLens eamodio.gitlens Blame annotations, file history, branch and commit views.
Git Graph mhutchie.git-graph A graph of all branches; git actions from the graph.
GitHub Pull Requests github.vscode-pull-request-github Create and review pull requests and issues in VS Code.
GitHub Actions github.vscode-github-actions Workflow runs and logs; checks workflow files.
Git Push Progress luis-domenech.vscode-git-push-progress A push command that shows progress in the Output panel.

AI assistants

Extension ID What it’s for
GitHub Copilot Chat github.copilot-chat Copilot chat, agent mode, inline and next-edit suggestions.
Claude Code anthropic.claude-code Anthropic’s Claude Code agent in a VS Code panel.
Codex openai.chatgpt OpenAI’s Codex coding agent.
Codex Audio openai.codex-audio Microphone dictation for Codex.
Continue continue.continue Open-source AI assistant that works with many model providers, also local models.
CodeRabbit coderabbit.coderabbit-vscode AI review of local commits before a pull request.
Chat Customizations Evaluations ms-vscode.vscode-chat-customizations-evaluations Analyses and validates prompt and instruction files for AI chat.

Data, databases and files

Databases

Extension ID What it’s for
SQL Server (mssql) ms-mssql.mssql Connect to and query SQL Server and Azure SQL.
Data Workspace ms-mssql.data-workspace-vscode Shared workspace view for database projects.
SQL Database Projects ms-mssql.sql-database-projects-vscode Develop and publish SQL Server schemas as projects.
SQL Bindings ms-mssql.sql-bindings-vscode Azure Functions with Azure SQL bindings.
.NET Install Tool ms-dotnettools.vscode-dotnet-runtime Installs the .NET runtimes that other extensions need.
SQLite alexcvzz.vscode-sqlite Explore and query SQLite databases.
SQLite Viewer qwtel.sqlite-viewer Opens .sqlite and .db files as tables.
vscode-dbml matt-meyers.vscode-dbml Syntax highlighting for DBML (Database Markup Language).
DBML Live Preview nicolas-liger.dbml-viewer Live diagram of a database schema written in DBML.
ERD Editor dineug.vuerd-vscode Draw entity-relationship diagrams.

Tables and spreadsheets

Extension ID What it’s for
Rainbow CSV mechatroner.rainbow-csv Colours CSV/TSV columns; SQL-like queries on them.
CSV repreng.csv View and edit CSV files as a table.
CSV to Table phplasma.csv-to-table Converts a CSV file to an aligned plain-text table.

Viewers and HTTP

Extension ID What it’s for
vscode-pdf tomoki1207.pdf Shows PDF files in an editor tab.
TIFF Preview analytic-signal.preview-tiff Previews TIFF images (for example exported figures).
REST Client humao.rest-client Send HTTP requests from .http files and see the responses.

Remote and containers

Extension ID What it’s for
Remote Development ms-vscode-remote.vscode-remote-extensionpack Extension pack: WSL, Dev Containers, Remote - SSH, Remote - Tunnels.
Remote - SSH ms-vscode-remote.remote-ssh Open a folder on a server over SSH and work there.
Remote - SSH: Editing Configuration Files ms-vscode-remote.remote-ssh-edit Language support for SSH config files.
Remote Explorer ms-vscode.remote-explorer Side bar with SSH hosts and tunnels.
Remote - Tunnels ms-vscode.remote-server Connect to a machine through a tunnel, without SSH.
WSL ms-vscode-remote.remote-wsl Open a folder inside the Windows Subsystem for Linux.
Dev Containers ms-vscode-remote.remote-containers Work inside a Docker container (for example a fixed R version).
Container Tools ms-azuretools.vscode-containers Manage images and containers; Dockerfile and Compose support.
Docker ms-azuretools.vscode-docker Microsoft’s Docker extension, built on Container Tools.
Docker DX docker.docker Dockerfile and Compose editing (linting, completion) by Docker Inc.

Python

Not needed for R.

Extension ID What it’s for
Python ms-python.python Python language support.
Pylance ms-python.vscode-pylance Python language server (completion, type checks).
Python Debugger ms-python.debugpy Debugging Python with debugpy.
Python Environments ms-python.vscode-python-envs Create and switch Python environments (venv, conda).

Web and SCSS

Quarto themes for websites and slides are written in SCSS.

Extension ID What it’s for
SCSS IntelliSense mrmlnc.vscode-scss Completion for SCSS variables and mixins.
SCSS Formatter sibiraj-s.vscode-scss-formatter Formats SCSS files.

Scripts and configuration files

Extension ID What it’s for
PowerShell ms-vscode.powershell PowerShell language support, debugging and console.
YAML redhat.vscode-yaml YAML validation and completion from schemas, formatting.

Look and workspace UX

Extension ID What it’s for
vscode-icons vscode-icons-team.vscode-icons File icon theme.
Material Icon Theme pkief.material-icon-theme File icon theme.
Error Lens usernamehw.errorlens Shows diagnostics at the end of the line.
Peacock johnpapa.vscode-peacock Colours the window per workspace, to tell windows apart.
filesize mkxml.vscode-filesize Shows the size of the current file in the status bar.
Copy file name nemesv.copy-file-name Copies the file name (without the path) to the clipboard.
Path Intellisense christian-kohler.path-intellisense Completes file paths while you type them.
Todo Tree gruntfuggly.todo-tree Lists TODO, FIXME and similar comments in a tree.
TODO Highlight wayou.vscode-todo-highlight Highlights TODO, FIXME and similar keywords.
Resource Monitor Graphical joshabb.resmongraphical CPU, memory, disk and network use in the status bar.

Other

Not related to R or teaching.

Extension ID What it’s for
MonoBehaviour Snippets zrachod.mono-snippets C# snippets for Unity scripts.

Installing them

With Settings Sync

With Settings Sync on, VS Code installs each profile’s extensions when it downloads the profile on a new machine (see Profiles and Settings Sync).

Not on the Marketplace

Settings Sync and install_extensions.ps1 install extensions from the Marketplace, so neither can install the R Version Switcher. On each machine, download the .vsix from its latest release and run:

code --install-extension r-version-switcher-1.2.0.vsix --profile R

Manual rebuild

install_extensions.ps1 reads a list with one extension id per line and installs it into a named profile:

  • It checks that code (the VS Code command-line tool) is on PATH.
  • It skips blank lines, lines starting with #, and extensions the profile already has (code --list-extensions --profile <name>).
  • It installs the rest with code --install-extension <id> --profile <name>.
  • At the end it lists the failures and exits with code 1 if there were any.

The VS Code command line only installs into a profile that already exists; for a missing one it reports Profile '<name>' not found. The script then opens VS Code once with code --profile <name>, which creates an empty profile, waits until the profile is there, and continues. If that does not work, create the profile in the Profiles editor (File → Preferences → Profiles) and run the script again. Use -Profile Default for the Default profile.

Put the script and the lists in one folder, then run, for example:

pwsh -File install_extensions.ps1 -Profile R -List extensions-R.txt
pwsh -File install_extensions.ps1 -Profile R-Lecturer

Without -List, the script uses extensions-<Profile>.txt next to itself. It needs PowerShell 7 (pwsh).

Show the full file: install_extensions.ps1
#Requires -Version 7.0
<#
.SYNOPSIS
    Install the VS Code extensions from a list file into a VS Code profile.

.DESCRIPTION
    Reads a text file with one extension id per line (as written by
    `code --list-extensions`), and installs every id that the profile does not
    have yet. Blank lines and lines starting with "#" are ignored. Failures are
    listed at the end and the script then exits with code 1.

    The VS Code CLI installs extensions only into a profile that already
    exists: `code --profile <name> --install-extension <id>` stops with
    "Profile '<name>' not found." The only CLI way to create a profile is to
    open a window with it (`code --profile <name>`), which creates an empty
    one. So when the profile is missing, the script does that once, waits until
    the CLI can see the profile, and then installs. If that does not work,
    create the profile in the Profiles editor (File > Preferences > Profiles)
    and run the script again.

    Use -Profile Default for the Default profile.

.EXAMPLE
    pwsh -File install_extensions.ps1
    Installs extensions-R.txt (next to the script) into the profile "R".

.EXAMPLE
    pwsh -File install_extensions.ps1 -Profile R -List extensions-R.txt

.EXAMPLE
    pwsh -File install_extensions.ps1 -Profile R-Lecturer
    Installs extensions-R-Lecturer.txt into the profile "R-Lecturer".
#>

[CmdletBinding()]
param(
    # Name of the VS Code profile. "Profile" is an alias so that the
    # automatic variable $PROFILE is not overwritten.
    [Alias('Profile')]
    [string] $ProfileName = 'R',

    # List of extension ids. Default: extensions-<Profile>.txt next to the
    # script.
    [string] $List,

    # Seconds to wait for a newly created profile to appear.
    [int] $CreateTimeout = 60
)

$ErrorActionPreference = 'Stop'

# --- Find the VS Code CLI ----------------------------------------------------
$codeCmd = Get-Command code -CommandType Application -ErrorAction SilentlyContinue |
    Select-Object -First 1
if (-not $codeCmd) {
    Write-Error ("The VS Code command 'code' is not on PATH. On Windows, tick 'Add to PATH' " +
        "in the installer; on macOS, run 'Shell Command: Install code command in PATH' " +
        "from the Command Palette. Then open a new terminal.")
    exit 2
}

function Invoke-Code {
    # Runs the VS Code CLI and returns its exit code and output (stdout and
    # stderr as text), without letting stderr stop the script.
    param([string[]] $Arguments)
    $ErrorActionPreference = 'Continue'
    $PSNativeCommandUseErrorActionPreference = $false
    $output = & $codeCmd.Source @Arguments 2>&1 | ForEach-Object { "$_" }
    [pscustomobject]@{
        ExitCode = $LASTEXITCODE
        Output   = @($output | Where-Object { $_ -ne '' })
    }
}

# --- Find the list -----------------------------------------------------------
if (-not $List) {
    $List = Join-Path $PSScriptRoot "extensions-$ProfileName.txt"
} elseif (-not (Test-Path -LiteralPath $List) -and -not [System.IO.Path]::IsPathRooted($List)) {
    # A relative path that is not in the current folder: try next to the script.
    $nextToScript = Join-Path $PSScriptRoot $List
    if (Test-Path -LiteralPath $nextToScript) { $List = $nextToScript }
}
if (-not (Test-Path -LiteralPath $List -PathType Leaf)) {
    Write-Error "List not found: $List"
    exit 2
}

$ids = Get-Content -LiteralPath $List -Encoding utf8 |
    ForEach-Object { $_.Trim() } |
    Where-Object { $_ -and -not $_.StartsWith('#') } |
    Sort-Object -Unique
if (-not $ids) {
    Write-Warning "No extension ids in $List."
    exit 0
}

# --- Make sure the profile exists ---------------------------------------------
# The Default profile is used when --profile is not given.
$profileArgs = if ($ProfileName -eq 'Default') { @() } else { @('--profile', $ProfileName) }

function Get-InstalledExtensions {
    $r = Invoke-Code (@('--list-extensions') + $profileArgs)
    if ($r.ExitCode -eq 0) { return , @($r.Output) }
    if ($r.Output -match 'not found') { return $null }   # profile does not exist
    throw "code --list-extensions failed (exit $($r.ExitCode)): $($r.Output -join ' ')"
}

$installed = Get-InstalledExtensions
if ($null -eq $installed) {
    Write-Host "Profile '$ProfileName' does not exist. Opening VS Code with it once to create it..."
    $null = Invoke-Code @('--new-window', '--profile', $ProfileName)
    $deadline = (Get-Date).AddSeconds($CreateTimeout)
    while ($null -eq $installed -and (Get-Date) -lt $deadline) {
        Start-Sleep -Seconds 2
        $installed = Get-InstalledExtensions
    }
    if ($null -eq $installed) {
        Write-Error ("Profile '$ProfileName' still does not exist. Create it in VS Code " +
            "(File > Preferences > Profiles > New Profile), then run this script again.")
        exit 2
    }
    Write-Host "Profile '$ProfileName' created."
}

# --- Install -------------------------------------------------------------------
Write-Host "Profile '$ProfileName': $($ids.Count) extension(s) in $(Split-Path $List -Leaf)."
$done = [System.Collections.Generic.List[string]]::new()
$skipped = [System.Collections.Generic.List[string]]::new()
$failed = [System.Collections.Generic.List[string]]::new()

foreach ($id in $ids) {
    # Extension ids are case-insensitive; -contains compares that way too.
    if ($installed -contains $id) {
        $skipped.Add($id)
        Write-Host "  skip     $id (already installed)"
        continue
    }
    $r = Invoke-Code (@('--install-extension', $id) + $profileArgs)
    $text = $r.Output -join ' '
    if ($text -match 'built-?in') {
        # E.g. GitHub Copilot Chat, which now ships with VS Code.
        $skipped.Add($id)
        Write-Host "  skip     $id (built into VS Code)"
    } elseif ($r.ExitCode -ne 0 -or $text -match 'Failed Installing|not found') {
        $failed.Add($id)
        Write-Host "  FAILED   $id : $text" -ForegroundColor Red
    } else {
        $done.Add($id)
        Write-Host "  install  $id"
    }
}

# --- Report ----------------------------------------------------------------------
Write-Host ''
Write-Host "Installed: $($done.Count). Skipped: $($skipped.Count). Failed: $($failed.Count)."
if ($failed.Count -gt 0) {
    Write-Host 'Failed extensions:' -ForegroundColor Red
    $failed | ForEach-Object { Write-Host "  $_" -ForegroundColor Red }
    exit 1
}
exit 0

Download install_extensions.ps1

The lists

Both lists come from code --list-extensions --profile <name>.

Show the full file: extensions-R.txt
alexcvzz.vscode-sqlite
analytic-signal.preview-tiff
anthropic.claude-code
bierner.markdown-mermaid
christian-kohler.path-intellisense
coderabbit.coderabbit-vscode
continue.continue
davidanson.vscode-markdownlint
dineug.vuerd-vscode
docker.docker
eamodio.gitlens
gera2ld.markmap-vscode
github.copilot-chat
github.vscode-github-actions
github.vscode-pull-request-github
gruntfuggly.todo-tree
hediet.vscode-drawio
humao.rest-client
johnpapa.vscode-peacock
joshabb.resmongraphical
luis-domenech.vscode-git-push-progress
matt-meyers.vscode-dbml
mechatroner.rainbow-csv
mhutchie.git-graph
mkxml.vscode-filesize
mrmlnc.vscode-scss
ms-azuretools.vscode-containers
ms-azuretools.vscode-docker
ms-dotnettools.vscode-dotnet-runtime
ms-mssql.data-workspace-vscode
ms-mssql.mssql
ms-mssql.sql-bindings-vscode
ms-mssql.sql-database-projects-vscode
ms-python.debugpy
ms-python.python
ms-python.vscode-pylance
ms-python.vscode-python-envs
ms-vscode-remote.remote-containers
ms-vscode-remote.remote-ssh
ms-vscode-remote.remote-ssh-edit
ms-vscode-remote.remote-wsl
ms-vscode-remote.vscode-remote-extensionpack
ms-vscode.powershell
ms-vscode.remote-explorer
ms-vscode.remote-server
ms-vscode.vscode-chat-customizations-evaluations
nemesv.copy-file-name
nicolas-liger.dbml-viewer
ondrejmottl.r-version-switcher
openai.chatgpt
openai.codex-audio
phplasma.csv-to-table
pkief.material-icon-theme
posit.air-vscode
quarto.quarto
qwtel.sqlite-viewer
rdebugger.r-debugger
redhat.vscode-yaml
reditorsupport.r
reditorsupport.r-syntax
repreng.csv
ryuta46.multi-command
shd101wyy.markdown-preview-enhanced
sibiraj-s.vscode-scss-formatter
streetsidesoftware.code-spell-checker
streetsidesoftware.code-spell-checker-czech
tianyishi.rmarkdown
tomoki1207.pdf
usernamehw.errorlens
vscode-icons-team.vscode-icons
wayou.vscode-todo-highlight
yzhang.markdown-all-in-one
znck.grammarly
zrachod.mono-snippets

Download extensions-R.txt

Show the full file: extensions-R-Lecturer.txt
github.copilot-chat
quarto.quarto
reditorsupport.r
reditorsupport.r-syntax

Download extensions-R-Lecturer.txt