pyOCD
pyOCD is a free Python tool and API for debugging, programming and exploring Arm Cortex microcontrollers.
What pyOCD is
pyOCD is a free Python tool and API for debugging, programming and exploring Arm Cortex microcontrollers. Its GDB server supports command-line and IDE debugging, with integrations including Arm CMSIS Debugger, Cortex-Debug and Eclipse Embedded CDT. It can write firmware or data images to internal and external flash, or load images into RAM. The Python API controls target devices and can support CI setups and custom test or debug tools. More than 70 common Arm Cortex-M devices have built-in support, and CMSIS Device Family Packs can extend device coverage. Features include semihosting, SWV and CMSIS-Pack support. A server and client can share debug probes over TCP/IP, including for CI configurations. pyOCD requires Python 3.9 or later and runs on macOS, Linux, FreeBSD and Windows. The project recommends pipx as an isolated installation method and licenses its code under Apache 2.0. Remote probe access is disabled by default; enabling it may expose the server to internet nodes unless protective measures are used. Unlocking a locked supported device can require a mass erase, erasing all chip data.
Good
- Free and licensed under Apache 2.0.
- Built-in support for more than 70 common Arm Cortex-M devices.
- GDB server works with command-line and IDE workflows.
- Python API can support CI and custom debug tools.
- Can program flash or load images into RAM.
Watch out
- Requires Python 3.9 or later.
- Enabling remote probe access may expose the server to internet nodes.
- Unlocking a locked device can erase all chip data.
- CMSIS-Pack support is limited to one system memory map for all CPUs.
Who it suits
pyOCD suits developers working with Arm Cortex-M microcontrollers who need command-line or IDE debugging, firmware programming, or a Python API for custom tools. It may also suit teams using CI or remote probe access, provided they account for the security and erase limitations.
Verdict
pyOCD offers a free, Python-based toolkit for Arm microcontroller debugging and programming, with GDB, API and probe-sharing options. Review the remote-access security warning and possible mass erase before enabling those workflows.
Plans and prices
From pyOCD's own pricing page, checked 9 Oct 2026.
| Plan | Price | What it gives you |
|---|---|---|
| pyOCD | Free | Open source project · Apache 2.0 license |
The facts
Each one read from pyOCD's own pages, with the date it was checked.
What it does
- CMSIS-Pack limitations
- The guide says pyOCD currently supports only one system memory map for all CPUs, which can cause issues with conflicting or overlapping regions.checked 8 Oct 2026
- Community support
- The project directs users to GitHub issues and discussions, a public Slack workspace, and a mailing list for announcements and news.checked 8 Oct 2026
- Flash programming
- It can program firmware and data images into internal or external flash, and load images into RAM.checked 9 Oct 2026
- GDB debugging
- Its GDB server supports debugging from the command line or IDEs, including VSCode with Arm CMSIS Debugger or Cortex-Debug and Eclipse Embedded CDT.checked 9 Oct 2026
- GDB server
- Its GDB server supports debugging from the command line or an IDE.checked 8 Oct 2026
- IDE integrations
- The site names Arm CMSIS Debugger, Cortex-Debug, and Eclipse Embedded CDT as supported GDB integrations.checked 8 Oct 2026
- Installation
- The stable package is available from PyPI and can be installed or upgraded with pip; the documentation also recommends pipx for an isolated virtual Python environment.checked 9 Oct 2026
- License
- The project code is licensed under Apache 2.0.checked 9 Oct 2026
- Operating systems
- The installation guide says pyOCD runs on macOS, Linux, FreeBSD, and Windows and requires Python 3.9 or later.checked 8 Oct 2026
- Other debug features
- The homepage lists semihosting, SWV, and CMSIS-Pack support among its features.checked 8 Oct 2026
- Pack management
- pyOCD can manage CMSIS-Packs and install them by device part number.checked 9 Oct 2026
- Probe integrations
- Built-in probe plug-ins include CMSIS-DAP, Raspberry Pi Picoprobe, SEGGER J-Link, STLink, and pyOCD remote; PE Micro Cyclone and Multilink support is a separate plug-in.checked 9 Oct 2026
- Purpose
- pyOCD is a Python based tool and API for debugging, programming, and exploring Arm Cortex microcontrollers.checked 9 Oct 2026
- Python API
- The Python API provides control of target devices and is described as suitable for CI, bespoke test and debug tools, and security research.checked 9 Oct 2026
- Remote access security
- The probe server disallows remote connections by default; enabling them may expose the server to any internet node unless protective measures are used.checked 8 Oct 2026
- Remote probe access
- A server and client allow debug probes to be shared and accessed over TCP/IP, including for CI configurations.checked 8 Oct 2026
- Security limitation
- Unlocking a locked device can require a mass erase and erases all data on the chip.checked 8 Oct 2026
- Security support
- The security guide lists NXP Kinetis and Nordic nRF52 families as currently supported for target security features.checked 8 Oct 2026
- Semihosting and SWV
- Features include semihosting with console and file I/O, SWV basic printf output, raw SWO streaming over TCP/IP, and Python SWO event processing.checked 9 Oct 2026
- Support
- The project directs users to GitHub issues and discussions, a public Slack workspace, and a Google Groups mailing list.checked 9 Oct 2026
- Supported systems
- pyOCD requires Python 3.9 or later and runs on macOS, Linux, FreeBSD, and Windows.checked 9 Oct 2026
- Target security
- The documented security features currently support NXP Kinetis and Nordic Semiconductor nRF52 target families, including built-in and CMSIS-Pack targets.checked 9 Oct 2026
- Unlocking limitation
- Unlocking a locked supported device typically requires a mass erase, which erases all data on the chip.checked 9 Oct 2026
Where it runs
- Device support
- More than 70 common Arm Cortex-M devices have built-in support, and additional devices can be accessed through CMSIS Device Family Packs.checked 9 Oct 2026
The full review of pyOCD
pyOCD is a free Python toolkit for programming, debugging, and exploring Arm Cortex microcontrollers. It fits embedded developers and teams building repeatable GDB and automation workflows, particularly around CI. The broad probe and device support is balanced by memory-map edge cases and the care required when sharing probes remotely or unlocking protected chips.
Overview
pyOCD combines a GDB server, flash programmer, and Python control API in one Apache 2.0 project. The GDB service supports command-line sessions and IDEs, while the API gives scripts direct target control for automated tests and custom development tools. That combination makes it more than an interactive debugger: it can sit inside a firmware pipeline as well as a developer workstation.
Its focus is specific. pyOCD targets Arm Cortex-M microcontrollers, not general desktop or mobile debugging, so its value depends on the probe, target family, and embedded toolchain you use. For teams already working with CMSIS conventions, its pack and probe integrations reduce the need to assemble unrelated utilities.
Key features
GDB, IDEs, and programming
The GDB server works from a shell or through supported front ends. Named integrations include Arm CMSIS Debugger, Cortex-Debug, and Eclipse Embedded CDT, including VSCode workflows that use the first two. This is a sensible choice when developers want familiar breakpoints and inspection through an IDE while keeping pyOCD as the underlying service.
Programming covers firmware and data images in internal or external flash, and images can also be loaded into RAM. That range serves both persistent firmware deployment and quick RAM-based iterations. The Python API adds target control for CI jobs and bespoke test or debug utilities, giving automation a first-class role rather than limiting pyOCD to manual sessions.
Targets, packs, and probes
More than 70 common Arm Cortex-M devices have built-in support. CMSIS Device Family Packs extend coverage, and pack management can install a pack by device part number. There is an important constraint for unusual or complex targets: pyOCD currently uses one system memory map for all CPUs, so conflicting or overlapping regions can cause problems.
Built-in probe plug-ins cover CMSIS-DAP, Raspberry Pi Picoprobe, SEGGER J-Link, STLink, and pyOCD remote. PE Micro Cyclone and Multilink use a separate plug-in, so those probes add an integration step. Semihosting provides console and file I/O; SWV offers basic printf output; raw SWO can stream over TCP/IP; and Python can process SWO events. These features are useful when firmware diagnostics need more than ordinary GDB output.
Remote access and security
A server and client can share probes over TCP/IP, including in CI configurations. The probe server blocks remote connections by default, but enabling them can expose it to any internet node without protective measures. Treat remote operation as an infrastructure-security task, not a convenience switch.
Documented target-security support covers NXP Kinetis and Nordic nRF52 families, including built-in and CMSIS-Pack targets. Unlocking a locked device typically requires a mass erase, permanently removing all data on that chip. That makes recovery possible in supported cases, but unsuitable when the existing contents must be preserved.
Pricing
pyOCD costs nothing. The single free plan is the open-source project under the Apache 2.0 license, with no paid tier or free trial. It is therefore suitable for individual developers, labs, and teams that can provide their own compatible probe hardware and engineering support. There are no higher plans offering additional seats, quotas, or service commitments; organizations needing those commercial terms must look elsewhere.
Platforms
pyOCD requires Python 3.9 or later and runs on macOS, Linux, FreeBSD, and Windows. It is offered as an API and self-hosted tool rather than a hosted service, so installation and runtime control remain with the user. The installation guide recommends installing the latest stable package with pip and suggests pipx for an isolated installation.
Who it's for
Choose pyOCD if you develop Arm Cortex-M firmware and want one free stack for GDB debugging, image programming, probe access, and Python-driven CI. It is especially well matched to teams standardizing scripts around target control or sharing probes within controlled build environments. It is a weaker fit when your device depends on conflicting memory regions, your probe requires the separate PE Micro plug-in, or remote access cannot be secured. Teams needing to unlock protected chips should plan for possible data loss from mass erase.
Pros and cons
- Pro: The GDB server connects command-line work with Arm CMSIS Debugger, Cortex-Debug, and Eclipse Embedded CDT.
- Pro: The Python API supports CI and custom test or debug tools instead of restricting automation to shell commands.
- Pro: More than 70 built-in Cortex-M targets, CMSIS-Pack management, and broad probe plug-ins cover varied embedded setups.
- Pro: Flash, RAM loading, semihosting, SWV, and SWO processing address both deployment and diagnostics.
- Con: A single system memory map for all CPUs can create conflicts or overlaps with some CMSIS-Pack targets.
- Con: Remote probe sharing can expose the server broadly if protective measures are not applied.
- Con: Unlocking supported locked devices may require a mass erase, deleting all chip data.
- Con: PE Micro Cyclone and Multilink support requires a separate plug-in.
Alternatives
GDB is the direct free alternative when you need the GNU debugger itself and source code, without pyOCD's Python API and probe-management layer.
OpenOCD suits users who prefer open-source probe and target control distributed through operating-system packages or source code.
Black Magic Debug is an option for JTAG/SWD debugging of embedded microcontrollers when you have compatible probe hardware and a suitable toolchain.
LLDB is a free debugger for Android, iOS, Linux, macOS, and Windows rather than a Cortex-M-focused pyOCD workflow.
IDA Pro is the better fit for disassembly and reverse engineering: its free tier covers x86-32 and x86-64 with two cloud decompilers, while IDA Pro Essential costs 1099.00 USD.
Perl Debugger is for Perl programs and is included with Perl, provided the program compiles correctly first.
PonyDebugger targets iOS inspection through an iOS client and gateway server.
FlowStorm is free and open source for users seeking a general-purpose interactive debugging environment.
Browse more options in Debuggers.
Verdict
pyOCD is a strong choice for Arm Cortex-M developers who want a no-cost, open-source GDB stack with Python automation, broad probe support, and CI-friendly control. Choose it for unified embedded workflows and extensible scripts. Look elsewhere if your target has troublesome overlapping memory regions, your probe needs unsupported integration, or remote access and potential mass erasure cannot be managed safely.
Alternatives to pyOCD
- 1
LLDB
Free planAndroidiOSLinuxmacOS7.3Free plan - 2

IDA Pro
Free planLinuxmacOSWindows7.0From $1,099 a year - 3
PonyDebugger
Free planiOSWebmacOSSelf-hosted6.8Free plan - 4
Perl Debugger
Free planLinuxmacOSWindows6.5Free plan - 5

Black Magic Debug
Free planLinuxmacOSWindows6.4Free plan - 6
FLEX
Free planiOS6.4Free plan
