Deprecation of probe-run and migration to probe-rs

Published on 3 min read
Knurling icon
A tool set to develop embedded applications faster.
❤️ Sponsor



    Dear community,

    We'd like to share an important development in the embedded Rust development landscape. It is with a sense of commitment to unifying our community that we announce the deprecation of our tool, probe-run, in favor of the powerful and feature-rich alternative, probe-rs.

    This shift is not a step backward, but rather a stride forward, aligning with the rapid evolution of the embedded Rust ecosystem. When we initially introduced probe-run, there was a distinct lack of alternatives. However, today, the ecosystem has not only caught up but has also surpassed our expectations.

    Our decision to migrate to probe-rs is the result of a collaborative effort, and we'd like to express our appreciation to the probe-rs maintainers for their invaluable support and collaboration in making this transition possible. This collaboration is going way back, since the probe-rs library has been a core component of probe-run for a long time.

    Rest assured, our commitment to defmt remains steadfast. Over the past few weeks, we've been hard at work to ensure that defmt support in probe-rs matches the standard you've come to expect from probe-run.

    We will not archive the probe-run immediately, but keep it open for a few more weeks in case you have questions regarding the migration.

    We extend our heartfelt gratitude to all of you who have been part of the probe-run journey. Your feedback, contributions, and support have been invaluable.

    Sincerely, Johann and the Knurling-rs team

    Migration steps

    In most cases the migration is as simple as installing probe-rs and exchanging the probe-run command with probe-rs run:

    1.) Install probe-rs

    $ cargo install probe-rs --features cli

    2.) Switch to probe-rs run in .cargo/config.toml

    [target.'cfg(all(target_arch = "arm", target_os = "none"))']
    -runner = "probe-run --chip nRF52840_xxAA"
    +runner = "probe-rs run --chip nRF52840_xxAA"

    These two steps should cover most cases.

    There are a few command-line flags which changed or got removed.


    • probe-run --erase-all becomes probe-rs run --chip-erase
    • probe-run --list-chips becomes probe-rs chip list
    • probe-run --list-probes becomes probe-rs list
    • probe-run --no-flash becomes probe-rs attach


    • no --json flag to output logs as structured data
      As far as we see this feature is used relatively little. Therefore we decided to not block the deprecation on this. If you rely on this feature please contact us.

    • no --host-log-format (but --log-format)
      The probe-rs logging system works differently than probe-run's, therefore the --host-log-format does not make sense. The --log-format flag to change the format of the defmt-messages exists though.

    • no --shorten-paths
      Also this is a bit more of a niche feature, so we decided to not block the deprecations on this.

    • no --measure-stack, but that was a no-op
      The --measure-stack flag was used to estimate the stack usage of a program. Since a few months this was a no-op, because we refactored the estimation mechanism to be blazingly fast, so it could just always run. The stack usage estimation mechanism is not implemented in probe-rs yet, but it will likely follow.