{
  "id": "nrf-dfu-py",
  "name": "Python Nordic Legacy DFU Tool",
  "short_name": "nrf_dfu_py",
  "kind": "utility",
  "status": "active",
  "maturity": "stable",
  "description": "Cross-platform Python utility with graphical and command-line interfaces for updating Nordic nRF51/nRF52 devices over Bluetooth using buttonless and Legacy DFU, with configurable scanning, retries, packet acknowledgements, and MTU.",
  "maintainers": [
    {
      "name": "Rastislav Vysoky",
      "url": "https://github.com/recrof"
    }
  ],
  "repository": "https://github.com/recrof/nrf_dfu_py",
  "documentation": "https://github.com/recrof/nrf_dfu_py#readme",
  "license_type": "source-available",
  "languages": [
    "python"
  ],
  "platforms": [
    "linux",
    "macos",
    "windows"
  ],
  "interfaces": [
    "gui",
    "cli"
  ],
  "connections": [
    "ble"
  ],
  "capabilities": [
    "flashing",
    "firmware-update",
    "automation"
  ],
  "install": [
    {
      "type": "github-release",
      "url": "https://github.com/recrof/nrf_dfu_py/releases"
    },
    {
      "type": "source",
      "url": "https://github.com/recrof/nrf_dfu_py",
      "command": "pip install bleak && python dfu_gui.py"
    }
  ],
  "verification": {
    "sourceAvailable": true,
    "releasesAvailable": true,
    "signedReleases": false,
    "ciBuilds": true,
    "hasDocumentation": true,
    "lastChecked": "2026-06-25",
    "notes": [
      "Supports Nordic Legacy DFU only; Secure DFU is not supported.",
      "CI publishes standalone GUI builds for Windows, Linux x64/ARM64, and macOS Intel/Apple Silicon.",
      "The repository does not currently declare an SPDX license."
    ]
  },
  "tags": [
    "bluetooth-dfu",
    "nrf52",
    "cross-platform",
    "desktop"
  ],
  "last_reviewed": "2026-06-25",
  "source": {
    "path": "data/software/nrf-dfu-py/software.yaml",
    "updatedAt": "2026-06-27T23:09:56+02:00"
  },
  "latest_version": "1.1",
  "released": "2026-02-26",
  "releases": [
    {
      "version": "v1.1",
      "name": "v1.1",
      "datetime": "2026-02-26T12:47:50Z",
      "url": "https://github.com/recrof/nrf_dfu_py/releases/tag/v1.1",
      "prerelease": false,
      "notes": "## What's Changed\r\n* Support variable chunk_size for turbo ota bootloader by @oltaco in https://github.com/recrof/nrf_dfu_py/pull/1\r\n* Fix for MTU error by @lucidnx in https://github.com/recrof/nrf_dfu_py/pull/2\r\n* Better progress tracking by @oltaco in https://github.com/recrof/nrf_dfu_py/pull/4\r\n* Add variable PRN timeouts by @oltaco in https://github.com/recrof/nrf_dfu_py/pull/3\r\n\r\n## New Contributors\r\n* @oltaco made their first contribution in https://github.com/recrof/nrf_dfu_py/pull/1\r\n* @lucidnx made their first contribution in https://github.com/recrof/nrf_dfu_py/pull/2\r\n\r\n**Full Changelog**: https://github.com/recrof/nrf_dfu_py/compare/v1.0...v1.1",
      "notesHtml": "<h2>What's Changed</h2>\n<ul>\n<li>Support variable chunk_size for turbo ota bootloader by @oltaco in <a href=\"https://github.com/recrof/nrf_dfu_py/pull/1\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/recrof/nrf_dfu_py/pull/1</a></li>\n<li>Fix for MTU error by @lucidnx in <a href=\"https://github.com/recrof/nrf_dfu_py/pull/2\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/recrof/nrf_dfu_py/pull/2</a></li>\n<li>Better progress tracking by @oltaco in <a href=\"https://github.com/recrof/nrf_dfu_py/pull/4\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/recrof/nrf_dfu_py/pull/4</a></li>\n<li>Add variable PRN timeouts by @oltaco in <a href=\"https://github.com/recrof/nrf_dfu_py/pull/3\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/recrof/nrf_dfu_py/pull/3</a></li>\n</ul>\n<h2>New Contributors</h2>\n<ul>\n<li>@oltaco made their first contribution in <a href=\"https://github.com/recrof/nrf_dfu_py/pull/1\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/recrof/nrf_dfu_py/pull/1</a></li>\n<li>@lucidnx made their first contribution in <a href=\"https://github.com/recrof/nrf_dfu_py/pull/2\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/recrof/nrf_dfu_py/pull/2</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/recrof/nrf_dfu_py/compare/v1.0...v1.1\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/recrof/nrf_dfu_py/compare/v1.0...v1.1</a></p>\n"
    },
    {
      "version": "v1.0",
      "name": "v1.0",
      "datetime": "2025-12-08T17:16:59Z",
      "url": "https://github.com/recrof/nrf_dfu_py/releases/tag/v1.0",
      "prerelease": false,
      "notes": "**Full Changelog**: https://github.com/recrof/nrf_dfu_py/commits/v1.0",
      "notesHtml": "<p><strong>Full Changelog</strong>: <a href=\"https://github.com/recrof/nrf_dfu_py/commits/v1.0\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/recrof/nrf_dfu_py/commits/v1.0</a></p>\n"
    }
  ],
  "changelogSource": "github",
  "changelogUpdatedAt": "2026-06-25T18:55:16.647Z"
}
