Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>ROS 2 Dev SuiteNew to Visual Studio Code? Get it now.
ROS 2 Dev Suite

ROS 2 Dev Suite

tanneguydv

|
1 install
| (0) | Free
Comprehensive ROS 2 toolset: parameter tuner, node/topic/service/action explorer, package browser, .msg/.srv/.action syntax highlighting
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

ROS 2 Dev Suite

A comprehensive VS Code extension for ROS 2 development: unified explorer, live parameter tuner, service/topic/action caller, log viewer, and syntax highlighting for interface files.


Features

1. ROS 2 Explorer (Sidebar)

A dedicated side panel accessible via the ROS 2 icon in the activity bar. Section headers are highlighted in blue for quick scanning.

Namespace Filter

Filter all sections (nodes, topics, services, actions) by namespace at once.

  • Click the $(filter) filter icon in the panel title bar
  • Available namespaces are detected automatically from live node and topic names — click one to apply
  • The active filter is shown as a badge in the panel title (• /my_robot)
  • Click the $(filter-filled) filled filter icon to clear the filter

Nodes

  • Lists all active ROS 2 nodes
  • Inline actions: attach tuner · node info · copy name

Topics

  • Lists all active topics with their message type
  • Inline actions: echo (start/stop) · publish · topic info · copy name
  • A spinning icon marks topics currently being echoed, each in its own Output Channel
  • Configurable capture limit: ros2.topicEchoCount (default 10, 0 = continuous)

Services

  • Lists all active services with their type
  • Inline actions: call · show type

Actions

  • Lists all active actions with their type
  • Inline actions: send goal · action info

Packages

  • Detects all ROS 2 packages in the workspace (recursive package.xml search)
  • Inline action: open folder in VS Code Explorer
  • Context menu: open CMakeLists.txt · open package.xml · search in package

2. Log Viewer

A read-only, filterable ROS 2 log stream displayed in the VS Code Output panel.

  • Click $(output) Log Viewer in the panel title bar (or run ROS 2: Open Log Viewer)
  • A multi-select QuickPick lets you choose which nodes to monitor; leave it empty to monitor all nodes
  • Log lines are formatted as HH:MM:SS [LEVEL] /node message
  • Node death detection: when a monitored node disappears, a red popup notification is shown and a ✖ NODE DIED marker is written to the log
  • Stop the stream with ROS 2: Stop Log Viewer

3. Service / Topic / Action Caller

WebView panels to interact with ROS 2 interfaces without leaving VS Code. Each panel is a singleton — reopening the same name reveals the existing panel.

  • The interface definition is displayed automatically
  • The YAML editor is pre-filled with default values derived from the interface (nested types are correctly indented)
Panel Trigger Command
Service Caller ▶ on a service ros2 service call
Topic Publisher send icon on a topic ros2 topic pub with full QoS controls (reliability, durability, depth, rate, message count)
Action Goal Sender rocket icon on an action ros2 action send_goal with real-time feedback

4. Parameter Tuner

Real-time parameter editing with two entry points:

Node-first — click ✏️ on a node in the explorer: parameters are fetched via ros2 param dump, opened in a YAML editor with live ghost-text decorations (↔ live: X).

File-first — open any YAML file with ros__parameters blocks and use the push commands directly.

my_node:
  ros__parameters:
    max_speed: 1.5
    gains:
      p: 0.8
      i: 0.01
    active: true

/namespace/other_node:
  ros__parameters:
    output_topic: "/cmd_vel"

Commands (editor toolbar + keyboard shortcuts):

Shortcut Action
Shift+Enter Push all parameters
Ctrl+Enter / Cmd+Enter Push parameter at cursor
Ctrl+I / Cmd+I IntelliSense hover (describe parameter)
Ctrl+Shift+P / Cmd+Shift+P Inject missing parameters from live node
Ctrl+Shift+S / Cmd+Shift+S Refresh live value decorations

Status bar indicators: ◉ ROS 2 → ✏ Editing… (orange) → ⟳ Sending… → ✓ Synchronized (green) / ✗ Failed (red)


5. Interface Syntax Highlighting

Native support for .msg, .srv, and .action files:

  • Primitive types, bounded strings, package types, arrays, constants, default values, comments, --- separators

6. Interface Browser

Ctrl+Shift+I / Cmd+Shift+I (or the button in the panel title bar): QuickPick listing all ROS 2 interfaces; selecting one displays its definition via ros2 interface show.


Configuration

Setting Default Description
ros2.topicEchoCount 10 Messages captured per echo (0 = continuous)
ros2.refreshInterval 0 Auto-refresh interval in seconds (0 = disabled)
ros2.workspaceRoot "" Workspace root (auto-detected from VS Code workspace if empty)
ros2.tunerPullMissing false Inject missing parameters automatically when attaching the tuner
ros2.setupScript "" Path to setup.bash (auto-detected in /opt/ros/* if empty)

Requirements

  • ROS 2 (Humble, Iron, Jazzy or later)
  • Python 3 — no rclpy dependency required
  • The ros2 CLI must be reachable from the shell

Auto-detection: the extension sources /opt/ros/<distro>/setup.bash automatically. VS Code does not need to be launched from a sourced terminal. Override with ros2.setupScript if needed.


Architecture

ros2-dev-suite/
├── src/
│   ├── extension.ts              # Entry point, command registration
│   ├── ros2/
│   │   ├── api.ts                # Async wrappers for the ros2 CLI
│   │   ├── explorerProvider.ts   # Unified TreeView: nodes, topics, services, actions, packages
│   │   └── logViewer.ts          # /rosout stream, node-filter, death detection
│   ├── param/
│   │   ├── paramEditor.ts        # YAML push, history, diff, hover IntelliSense
│   │   └── tuner.ts              # Node attachment, param pull, live decorations
│   └── caller/
│       └── callerPanel.ts        # WebView caller: service call, topic pub, action send_goal
├── scripts/
│   └── live_param_editor.py      # Python backend for ros2 param set (no rclpy)
├── syntaxes/
│   └── ros2-interface.tmLanguage.json
├── resources/
│   └── ros2.svg                  # Activity bar icon
└── language-configuration.json

Developer Guide

Prerequisites

Tool Version
Node.js ≥ 18
npm ≥ 9
@vscode/vsce bundled as dev dependency

Setup

cd ros2-dev-suite
npm install

Compile

npm run compile        # one-shot build → out/
npm run watch          # incremental watch mode

Package (VSIX)

npm run package:vsix

The VSIX is written to dist/ros2-dev-suite-<version>.vsix.

Note: always use npm run rather than calling vsce directly. The project pins @vscode/vsce@2.22.0 locally to stay compatible with Node 18. The globally installed vsce bundles a newer undici that requires Node ≥ 20 and will crash with ReferenceError: File is not defined.

Publish

# VS Code Marketplace
npm run publish:vsce

# Open VSX (VSCodium)
OVSX_PAT=<token> npm run publish:ovsx

Run in VS Code (debug)

Open the ros2-dev-suite/ folder in VS Code and press F5 — this launches an Extension Development Host with the extension loaded.


License

MIT — tanneguydv

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft