ABB RAPID PackModern Visual Studio Code language support and optional controller connectivity for ABB RAPID robot programs. ABB RAPID Pack turns a folder of RAPID source files or a RobotStudio backup into a navigable codebase. Its offline language features work without a controller profile. When explicitly enabled, the Controller Explorer can connect to supported IRC5 and OmniCore controllers through Robot Web Services (RWS)—without PC SDK or OPC UA.
Highlights
Quick startWork offline
No profile or controller connection is required for parsing, highlighting, completion, hover, formatting, diagnostics, symbols, navigation, references, call hierarchy, or rename. Connect to a controller
Creating or selecting a profile never connects automatically. Requesting write access enables extension commands; it does not change the controller's UAS grants, operating mode, signal access configuration, or safety state. Offline RAPID language featuresEditing and type intelligence
When connected and the symbol can be resolved unambiguously, RAPID variable hover shows the Live Controller Value before the source declaration's initial value. Out-of-scope or unavailable live values are reported as unavailable rather than guessed. Hovering a recognized I/O signal shows its signal kind and configured device. While connected, the VS Code controller layer performs a bounded, briefly cached read of only that signal and adds its current value; live values are not forwarded to the language server. Navigation and refactoring
Ambiguous navigation and refactoring requests fail without applying speculative changes. Diagnostics and quick fixesDiagnostics are deterministic and opt-in through
Strict unresolved-variable diagnostics and cross-file duplicate-global checks are separate opt-in settings because controller-installed data, add-ins, and task configuration may not be represented in source. The extension is not a complete RobotWare compiler; the controller or RobotStudio Check Program remains authoritative for option-dependent behavior, controller-installed types, and semantic rules that cannot be proven locally. FormattingThe formatter supports complete documents and safe ranges, uses VS Code indentation settings, and
can emit readable spaced operators or compact RobotStudio-style operators. Formatting is disabled
until Controller compatibility
RWS 1.0 and RWS 2.0 use separate endpoints and response parsers. Auto detection probes safe, read-only controller information and fails clearly when the generation is inconclusive. Select the generation explicitly when auto detection is unavailable or the controller returns a nonstandard probe response. Auto detection does not discover the network protocol: select HTTP for a standard IRC5/RWS 1.0 endpoint and HTTPS for OmniCore/RWS 2.0. The profile wizard recommends the matching protocol after the controller generation is selected. HTTPS remains available for a custom IRC5 endpoint that is explicitly known to expose RWS 1.0 over TLS. Controller preparationRequirements for a real controllerBefore creating a profile, verify the following on the controller and network:
ABB's RWS documentation states that all RWS clients authenticate with controller UAS credentials.
RWS 1.0 uses Digest authentication and the Useful official references:
UAS grants and controller permissionsThe exact grants enforced by a controller can vary with RobotWare release, installed options, and the requested resource. The following are common grants to verify in RobotStudio; the controller is always authoritative.
The extension's Request Write Access button is an additional local safeguard. It never grants or bypasses controller permissions. ABB documents that updating RAPID values in Manual mode can require Remote Manual Mode Privilege (RMMP) in addition to RAPID mastership. ABB RAPID Pack does not currently automate the RMMP approval workflow, so a controller can reject a Manual-mode mutation even when the extension shows write access. Virtual Controller setup
To validate basic reachability before using the extension, open the profile's base URL in a browser.
An initial Connection profilesProfiles are created, selected, edited, and removed from Controller Explorer > Connection or the Command Palette. Profile management does not connect to a controller.
Non-secret profile metadata is machine-scoped. Passwords are never sent to the language server or printed in profile commands, logs, test fixtures, or error messages. Controller ExplorerThe Controller Explorer keeps setup and controller actions together instead of placing connection profiles in the Settings view.
Each section header provides compact command buttons for its own operations. Connection contains profile, connection, and write-access controls; Controller contains state, motor, and warm-start controls; Controller Workspace contains synchronization and file-transfer controls; RAPID contains data, deployment, execution, pointer, and breakpoint controls; and I/O Signals contains filter and creation controls. Context-dependent buttons remain beside their task, module, or signal. The Event Logs output button opens the single consolidated ABB RAPID Pack output channel used by controller actions, deployment, live monitoring, debugging, and the language server. Sections load lazily and distinguish unavailable, loading, empty, and error states. Opening Event Logs reads every reported domain and displays the combined current buffers directly, newest first; ABB event-log domain numbers do not need to be selected manually. Expand an event to inspect its header, description, consequences, causes, recommended actions, source, code, timestamp, and arguments when those fields are provided by the controller. While Event Logs remains expanded and the Controller Explorer is visible, its contents refresh automatically every 2 seconds. The refresh pauses when the section is collapsed, the view is hidden, or the controller is disconnected. Unchanged buffers do not redraw the tree, so an open event tooltip remains visible. Internal controller diagnostics are omitted from this section and written once, with their available detail, to the consolidated ABB RAPID Pack output channel instead. Existing internal diagnostics are treated as the connection baseline and are not replayed; only internal events first observed after that baseline are written. If RWS returns summary and detail representations for the same controller sequence, they are shown as one event with the richer detail. Matching copies reported by Common and a specific domain such as Process or Operational are also shown once; the specific-domain entry is preferred while richer text from Common is retained. Connection lifecycle and state monitoringThe status bar shows disconnected, connecting, connected, reconnecting, and error states, including the detected controller name and generation when connected. Controller execution, task, operating mode, and motor observations are updated through RWS subscriptions where supported, with one non-overlapping reconciliation read approximately every 30 seconds. After a connection has succeeded during the current VS Code session, an unexpected loss starts a bounded reconnect sequence. Explicit disconnect, extension deactivation, or exhausted attempts stop reconnecting and revoke connection-scoped write access. The extension does not repeatedly reconnect to a controller that was never successfully connected during the active session. Controller workspace and GitOn first connection, choose any local parent directory. The extension creates a folder using a safe controller name and stable eight-character identity, then downloads loaded modules into task directories. Controllers with the same IP address do not share synchronization state. The saved parent association is reused across disconnects, reconnects, and later VS Code sessions. Git is optional. You may initialize a repository before or after synchronization, add the generated controller folder to an existing workspace, or never use Git. The workspace manifest at For local file workspaces, synchronization rejects the selected root, manifest, module, EIO, or any existing parent path component when it is a symbolic link or junction, and rejects multiply linked files. Controller-owned writes use same-directory temporary files and atomic replacement where the host filesystem supports it. Choose a regular local directory rather than a linked path. Automatic synchronization after connection preserves known local pending edits. In contrast, Synchronize Workspace from Controller is an explicit discard-and-refresh action: it replaces the synchronized local module files with the controller's current copies and clears their pending state. Commit, stash, or copy local edits first if they must be retained. Synchronization uses a RobotStudio-style source layout:
The EIO snapshot is built locally from the read-only live signal inventory. It contains signal names
and RAPID signal types so the workspace remains useful for Git and offline language intelligence; it
is not a byte-for-byte controller configuration export and must not be loaded as a full controller
configuration. Existing flat task/module workspaces are migrated on their next successful
synchronization. The manifest keeps each backup-style Both Synchronization covers every loaded RAPID module reported by each task and the live I/O declaration inventory. It is not a complete controller backup and does not recursively download every File Service object, device, log, or other configuration domain. RAPID tasks, modules, and data
RAPID values support booleans, finite numeric values, strings, practical rectangular arrays, and positional records when their shape can be resolved. RECORD watches use source type information to display property names instead of only positional indexes. Malformed, ambiguous, unsupported, or unvalidated values are rejected before a write. Pending changes and module deploymentUse Upload Module to Controller for one synchronized module or Write All Pending Changes to Controller for the pending set. Deployment never occurs on save alone. Each deployment:
A batch deployment stops at the first failed file and leaves unsuccessful files pending. Diagnostics, controller build errors, ABB codes, and redacted workflow details are written to ABB RAPID Pack Module Deployment. Deployment has no automatic rollback and never restarts execution. I/O signalsThe I/O section loads bounded pages and supports a case-insensitive name filter. Plain text performs
a contains search; Signal rows display the logical value/state and any type, category, network, unit, physical-state, or quality metadata returned by the controller. Individual writes validate the requested value, read the previous state, and require confirmation. Bulk, pulse, toggle, invert, and delayed writes are not provided. Create I/O Signal supports DI, DO, AI, AO, GI, and GO when the controller advertises the capability. Simulated signals do not require Device or Device Mapping. A device-mapped signal requires both fields; the controller can still reject unsupported names, mappings, types, or states. After successful signal creation, the extension asks whether to perform a normal controller restart so changed system parameters can take effect. Declining leaves the controller running. Accepting requires active write access; the restart is never hidden or automatic. RWS is a remote client even when it connects to a controller running on the same PC. For real controllers, the signal's Access Level must permit the applicable Remote Client Auto/Manual write. For a detected Virtual Controller only, the extension may attempt one local-session registration and retry one explicitly confirmed I/O write; it never applies this fallback to a real controller. Execution, motors, and task selectionThe RAPID section provides separate Start Selected RAPID Tasks, Stop Selected RAPID Tasks, and Reset Selected Program Pointers to Main actions. Controller state is refreshed before each command. Start and reset show controller, task, operating mode, execution, and known motor state before confirmation. When possible, starting selected tasks first requests Motors On through the guarded motor workflow. Motors can also be turned on or off explicitly. An accepted API response does not prove the robot or cell is safe or that motion occurred. Unknown or transitional controller states remain unknown and can disable commands until a valid observation is available. Controller warm startWarm Start Controller sends ABB's normal For RWS 2.0, RobotWare 7 warm start uses ABB's atomic all-domain mastership resource; RobotWare 8 uses Control Station write access. In Manual mode ABB additionally requires a local-client session and all-domain privileges, so the controller can still reject the command when RMMP/local approval has not been granted. Live MonitorUse the single Add Live Watch button and enter either a RAPID variable or I/O signal name. The extension identifies the resource and asks you to choose only when the name is ambiguous. A RAPID variable can also be added by right-clicking it in the editor; an I/O signal can be added from its Explorer row. Each watch updates in place with its current value and timestamp. Arrays are expandable and known RECORD values use named fields, including practical nested records. Pause/resume retains the watch list and last values. Disconnected, reconnecting, paused, and failed observations are marked stale. Monitoring subscribes only to selected resources. If subscriptions are unavailable, it falls back to bounded read-only polling of those watches rather than polling every RAPID variable or I/O signal. Monitoring does not require write access. When subscription creation contains both an HTTP location and an explicit WebSocket event URL, the extension uses the WebSocket URL. Program pointers and controller breakpointsFor synchronized modules, program and motion pointers appear as separate The ABB RAPID Controller debug configuration integrates supported controller breakpoints and Continue/Pause controls with VS Code. Breakpoints require a saved module whose local content is fully applied to the controller, active write access, an allowable RAPID state, and brief RAPID mastership. OmniCore/RWS 2.0 can remove all controller breakpoints after explicit confirmation. RobotWare 6 RWS 1.0 documents breakpoint listing and setting but not removal, so the extension does not pretend a locally removed gutter marker removed the controller breakpoint. Use RobotStudio or another supported controller-side tool to remove IRC5 breakpoints. File and module transfer
Controller paths are validated against traversal and injection. Raw File Service transfers preserve bytes; module endpoints return decoded controller text and are normalized to UTF-8. Large and malformed responses are rejected before they can overwrite a synchronized module. Commands and viewsMost controller actions are available directly in the Controller Explorer. The corresponding top-level workflows are also available from the Command Palette; row-specific actions such as Load More I/O Signals remain in their relevant view.
The ABB RAPID Pack Activity Bar contains:
SettingsLanguage settings
Offline workspace indexing is safety-bounded and can be partial in unusually large or adversarial workspaces. Disk entries are limited to 1 MiB each, 1,000 files, 32 MiB of source, 250,000 RAPID tokens, and 50,000 derived symbols/definitions. Discovery accepts at most 256 roots and bounds each scan to 1,000 directories, 10,000 directory entries, 2,000 children per directory, and 1,000 supported files. Each scan also stops starting work after 64 MiB of source, 500,000 RAPID tokens, or 100,000 derived items. Files beyond those limits do not contribute workspace symbols; open editor documents are still indexed. Semantic highlighting uses VS Code's Controller settings
Do not edit passwords into controller settings. The extension stores them only in SecretStorage. Output and troubleshootingOpen View > Output and select the channel relevant to the workflow:
Logs redact credentials, authorization headers, cookies, and sensitive bodies. Connection fails
TLS validation failsInstall or trust the controller certificate when possible. Disabling certificate validation permits impersonation and is intended only for a controlled development environment. Do not solve a production certificate issue by silently switching to HTTP. Credentials fail after a controller restartWait until RobotWare is fully available. The extension accepts a replacement Digest nonce, clears obsolete session cookies, and performs bounded reconnect after an observed loss. If authentication still fails, disconnect, reconnect, and verify the selected profile's UAS credentials. RAPID tasks or modules do not load
A write is disabled or deniedConfirm all four extension gates: trusted workspace, Read & Write profile, enabled profile write/execute switch, and active connection-scoped write access. Then check UAS grants, operating mode, task/execution state, controller write access or mastership, and any signal Access Level. Manual-mode operations can also require RMMP, which the extension does not currently request. On RobotWare 8, allow remote access from the FlexPendant before retrying. The extension registers itself as a remote Control Station with release-on-connection-loss, requests write access only for the guarded operation, and releases it afterward. For a confirmed Motors On or Start command, it enables Control Station motion control only for that guarded command scope. RobotWare 8 still requires a deliberate controller Reset after startup, operating-mode changes, and safety stops; if the Explorer reports Guard Stop, perform Reset from the FlexPendant/RobotStudio or a configured safe input. The extension does not bypass that controller safety requirement. Deployment failsOpen ABB RAPID Pack Module Deployment. The output includes current language-server diagnostics, controller build-error details when available, the failing task/module, redacted ABB codes, and the cleanup result. Check syntax, task selection, execution state, controller write access or mastership, UAS grants, temporary File Service access, and load/unload support. RAPID execution is not restarted automatically. Controller state or a watch is unknown or staleRefresh the Explorer and inspect the Live Monitor status. Some controller variants omit fields or subscription events. The extension performs bounded reconciliation and selected-resource polling without interpreting an unavailable observation as stopped or safe. Refresh did not preserve a local editThis is the intended behavior of the manual Synchronize Workspace from Controller command: it replaces the synchronized local module files with controller copies and clears pending state. Use Git, commit, stash, or copy local edits before refreshing. Automatic synchronization after connection remains the non-destructive path for known pending files. Known limitations
Privacy, security, and safetyAll language processing stays on your machine. The extension contains no telemetry and communicates with its bundled language server over local IPC. Controller connectivity remains in the VS Code extension host; credentials, cookies, sessions, and controller clients are not exposed to the language server. Controller actions require a trusted workspace. In an untrusted workspace, offline language features remain active, but connections, live reads, file synchronization, and mutations are disabled. HTTPS is the default. HTTP and disabled certificate validation are explicit insecure opt-downs. Policy gates, state checks, mastership handling, and confirmations reduce accidental operations. They do not establish or guarantee physical safety. Controller, robot, tooling, workcell, and personnel safety remain the user's responsibility. Follow ABB documentation and site-specific safety procedures before enabling or invoking any controller mutation. See the controller security review for threat boundaries and residual risks. File iconsRAPID files receive a light/dark language icon when the active file-icon theme supports language
fallbacks. Select ABB RAPID Pack File Icons through Preferences: File Icon Theme for
dedicated icons that distinguish LicenseABB RAPID Pack is available under the MIT License. Third-party runtime notices are listed in THIRD_PARTY_NOTICES.md. |