Skip to content

Releases: adafruit/circuitpython

CircuitPython 10.1.3

20 Feb 21:32
a750c5f

Choose a tag to compare

This is CircuitPython 10.1.3, the latest bugfix revision of CircuitPython, and is a new stable release.

(The 10.1.2 release was discarded due to incorrect tagging.)

Highlights of this release

  • Adafruit MagTag: auto-detect different versions of e-ink display on 2025 MagTag.
  • Espressif: fix board I2C object deinit(). Fixes crash with Adafruit Qualia library.

Download from circuitpython.org

Firmware downloads are available from the downloads page on circuitpython.org. The site makes it easy to select the correct file and language for your board.

Installation

To install follow the instructions in the Welcome to CircuitPython! guide. To install the latest libraries, see this page in that guide.

Try code.circuitpython.org or the latest version of the Mu editor for creating and editing your CircuitPython programs and for easy access to the CircuitPython serial connection (the REPL).

Documentation

Documentation is available in readthedocs.io.

Port status

CircuitPython has a number of "ports" that are the core implementations for different microcontroller families. Stability varies on a per-port basis. As of this release, these ports are consider stable (but see Known Issues below):

  • atmel-samd: Microchip SAMD21, SAMx5x
  • cxd56: Sony Spresense
  • espressif: Espressif ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-C61, ESP32-H2, ESP32-S2, ESP32-S3
  • nordic: Nordic nRF52840, nRF52833
  • raspberrypi: Raspberry Pi RP2040, RP2350
  • stm: ST STM32F4 chip family

These ports are considered alpha and will have bugs and missing functionality:

  • analog: Analog Devices MAX32690
  • broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
  • espressif: , ESP32-P4
  • litex: fomu
  • mimxrt10xx: NXP i.MX RT10xxx
  • renode: hardware simulator
  • silabs: Silicon Labs MG24 family
  • stm: ST non-STM32F4 chip families
  • zephyr: multiplatform RTOS: testing with Nordic nRF5340, nRF54H20, nRF54L15, nRF7002; NXP i.MX RT1170, MCXN947; Renesas RA6M5, RA8D1; ST STM32H7, STM32N657, STM32U7,

Changes

Fixes and enhancements

Port and board-specific changes

Analog Devices

Broadcom

Espressif

  • busio.I2C: Check if already deinited in unlock(). Fixes crash with board I2C objects. #10838. Thanks @dhalbert and thanks @rsbohn for issue.

i.MX

Nordic

renode

RP2

SAMx

SiLabs

Spresense

STM

Zephyr

Individual boards

Documentation changes

Build and infrastructure changes

Translation additions and improvements

New boards

Known issues

Thanks

Thank you to all who used, tested, and contributed toward this release, including the contributors above, and many others on GitHub and Discord. Join us on the Discord chat to collaborate.

CircuitPython 10.2.0-alpha.1

18 Feb 19:53
8a4c050

Choose a tag to compare

Pre-release

This is CircuitPython 10.2.0-alpha.1, an alpha release for 10.2.0. Further features, changes, and bug fixes will be added before the final release of 10.2.0.

Highlights of this release

  • Include 10.1.1 fix for performance regression.
  • Better entropy for RP2350 os.urandom().
  • Add supervisor.get_setting(), which retrieves a string, boolean, or integer typed value from settings.toml.

Notable changes in 10.2.0 from 10.1.x

  • os.getenv() always returns a string.
  • Add supervisor.get_setting(), which retrieves a string, boolean, or integer typed value from settings.toml.

Incompatibility warnings when upgrading to 10.2.0

  • os.getenv() now always returns a string, instead of returning an int when the value could be parsed as such.

Download from circuitpython.org

Firmware downloads are available from the downloads page on circuitpython.org. The site makes it easy to select the correct file and language for your board.

Installation

To install follow the instructions in the Welcome to CircuitPython! guide. To install the latest libraries, see this page in that guide.

Try code.circuitpython.org or the latest version of the Mu editor for creating and editing your CircuitPython programs and for easy access to the CircuitPython serial connection (the REPL).

Documentation

Documentation is available in readthedocs.io.

Port status

CircuitPython has a number of "ports" that are the core implementations for different microcontroller families. Stability varies on a per-port basis. As of this release, these ports are consider stable (but see Known Issues below):

  • atmel-samd: Microchip SAMD21, SAMx5x
  • cxd56: Sony Spresense
  • espressif: Espressif ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-C61, ESP32-H2, ESP32-S2, ESP32-S3
  • nordic: Nordic nRF52840, nRF52833
  • raspberrypi: Raspberry Pi RP2040, RP2350
  • stm: ST STM32F4 chip family

These ports are considered alpha and will have bugs and missing functionality:

  • analog: Analog Devices MAX32690
  • broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
  • espressif: , ESP32-P4
  • litex: fomu
  • mimxrt10xx: NXP i.MX RT10xxx
  • renode: hardware simulator
  • silabs: Silicon Labs MG24 family
  • stm: ST non-STM32F4 chip families
  • zephyr: multiplatform RTOS: testing with Nordic nRF5340, nRF54H20, nRF54L15, nRF7002; NXP i.MX RT1170, MCXN947; Renesas RA6M5, RA8D1; ST STM32H7, STM32N657, STM32U7,

Changes

Fixes and enhancements

  • Call port_yield() from background task only in zephyr builds right now. #10829, #10824. Thanks @daniel-alsen for discovery and diagnosis, and @dhalbert for PR.
  • os.getenv() now always returns a str from settings.toml. A new function supervisor.get_setting() returns a bool, int, or str, as appropriate. #10819. Thanks @dhalbert

Port and board-specific changes

Analog Devices

Broadcom

Espressif

i.MX

Nordic

renode

RP2

  • RP2350: Use the TRNG (True Random Number Generator) as an additional source of entropy for os.urandom(). #10826. Thanks @mimi89999.

SAMx

SiLabs

Spresense

STM

Zephyr

Individual boards

Documentation changes

Build and infrastructure changes

Translation additions and improvements

  • @arifpedia (Indonesian). Thanks for extensive additions. Indonesian is now a complete translation.

New boards

Known issues

Thanks

Thank you to all who used, tested, and contributed toward this release, including the contributors above, and many others on GitHub and Discord. Join us on the Discord chat to collaborate.

CircuitPython 10.1.1

17 Feb 20:20
9b72899

Choose a tag to compare

This is CircuitPython 10.1.1, the latest minor revision of CircuitPython, and is a new stable release.

CircuitPython 10.1.0 was withdrawn due to a show-stopper performance problem on Espressif. See Changes below.

Notable changes in 10.1.1 from 10.0.x

  • Add mipidsi module to support MIPI DSI displays. Currently enabled for ESP32-P4.
  • Fix problems with presenting user-mounted SD cards over USB.
  • Update espressif ESP-IDF to v5.5.1 and support ESP32-C61.
  • Fix long-standing Thonny disconnect issues.
  • Add hashlib.new("sha256").
  • Add bitmaptools.replace_color().

Download from circuitpython.org

Firmware downloads are available from the downloads page on circuitpython.org. The site makes it easy to select the correct file and language for your board.

Installation

To install follow the instructions in the Welcome to CircuitPython! guide. To install the latest libraries, see this page in that guide.

Try code.circuitpython.org or the latest version of the Mu editor for creating and editing your CircuitPython programs and for easy access to the CircuitPython serial connection (the REPL).

Documentation

Documentation is available in readthedocs.io.

Port status

CircuitPython has a number of "ports" that are the core implementations for different microcontroller families. Stability varies on a per-port basis. As of this release, these ports are consider stable (but see Known Issues below):

  • atmel-samd: Microchip SAMD21, SAMx5x
  • cxd56: Sony Spresense
  • espressif: Espressif ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-C61, ESP32-H2, ESP32-S2, ESP32-S3
  • nordic: Nordic nRF52840, nRF52833
  • raspberrypi: Raspberry Pi RP2040, RP2350
  • stm: ST STM32F4 chip family

These ports are considered alpha and will have bugs and missing functionality:

  • analog: Analog Devices MAX32690
  • broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
  • espressif: , ESP32-P4
  • litex: fomu
  • mimxrt10xx: NXP i.MX RT10xxx
  • renode: hardware simulator
  • silabs: Silicon Labs MG24 family
  • stm: ST non-STM32F4 chip families
  • zephyr: multiplatform RTOS: testing with Nordic nRF5340, nRF54H20, nRF54L15, nRF7002; NXP i.MX RT1170, MCXN947; Renesas RA6M5, RA8D1; ST STM32H7, STM32N657, STM32U7,

Changes since 10.0.0

See the release notes for:

Changes

Fixes and enhancements

  • Call port_yield() from background task only in zephyr builds right now. #10824. Thanks @daniel-alsen for discovery and diagnoses, and @dhalbert for PR.

Known issues

Thanks

Thank you to all who used, tested, and contributed toward this release, including the contributors above, and many others on GitHub and Discord. Join us on the Discord chat to collaborate.

CircuitPython 10.1.0-rc.1

11 Feb 19:02
34cdb47

Choose a tag to compare

Pre-release

This is CircuitPython 10.1.0-rc.1, a release candidate for 10.1.0 final. This release is believed to be stable, and is meant for testing before the final release of 10.1.0.

CircuitPython 10.1.0-rc.0 was discarded due to build issues.

Highlights of this release

  • Fix long-standing Thonny disconnect issues.
  • Add hashlib.new("sha256")
  • Add bitmaptools.replace_color().

Notable changes in 10.1.0 from 10.0.x

  • Add mipidsi module to support MIPI DSI displays. Currently enabled for ESP32-P4.
  • Fix problems with presenting user-mounted SD cards over USB.
  • Update espressif ESP-IDF to v5.5.1 and support ESP32-C61.
  • Fix long-standing Thonny disconnect issues.
  • Add hashlib.new("sha256").
  • Add bitmaptools.replace_color().

Download from circuitpython.org

Firmware downloads are available from the downloads page on circuitpython.org. The site makes it easy to select the correct file and language for your board.

Installation

To install follow the instructions in the Welcome to CircuitPython! guide. To install the latest libraries, see this page in that guide.

Try code.circuitpython.org or the latest version of the Mu editor for creating and editing your CircuitPython programs and for easy access to the CircuitPython serial connection (the REPL).

Documentation

Documentation is available in readthedocs.io.

Port status

CircuitPython has a number of "ports" that are the core implementations for different microcontroller families. Stability varies on a per-port basis. As of this release, these ports are consider stable (but see Known Issues below):

  • atmel-samd: Microchip SAMD21, SAMx5x
  • cxd56: Sony Spresense
  • espressif: Espressif ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-C61, ESP32-H2, ESP32-S2, ESP32-S3
  • nordic: Nordic nRF52840, nRF52833
  • raspberrypi: Raspberry Pi RP2040, RP2350
  • stm: ST STM32F4 chip family

These ports are considered alpha and will have bugs and missing functionality:

  • analog: Analog Devices MAX32690
  • broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
  • espressif: , ESP32-P4
  • litex: fomu
  • mimxrt10xx: NXP i.MX RT10xxx
  • renode: hardware simulator
  • silabs: Silicon Labs MG24 family
  • stm: ST non-STM32F4 chip families
  • zephyr: multiplatform RTOS: testing with Nordic nRF5340, nRF54H20, nRF54L15, nRF7002; NXP i.MX RT1170, MCXN947; Renesas RA6M5, RA8D1; ST STM32H7, STM32N657, STM32U7,

Changes

Fixes and enhancements

Port and board-specific changes

Analog Devices

Broadcom

Espressif

i.MX

Nordic

renode

RP2

SAMx

SiLabs

Spresense

STM

Zephyr

Individual boards

Documentation changes

Build and infrastructure changes

Translation additions and improvements

New boards

Known issues

Thanks

Thank you to all who used, tested, and contributed toward this release, including the contributors above, and many others on GitHub and Discord. Join us on the Discord chat to collaborate.

CircuitPython 10.1.0-beta.1

06 Nov 19:59
fa4caf8

Choose a tag to compare

Pre-release

This is CircuitPython 10.1.0-beta.1, a beta release for 10.1.0. It has known bugs that will be fixed before the final release of 10.1.0.

Highlights of this release

  • Add mipidsi module to support MIPI DSI displays. Currently enabled for ESP32-P4.
  • Fix problems with presenting user-mounted SD cards over USB.

Download from circuitpython.org

Firmware downloads are available from the downloads page on circuitpython.org. The site makes it easy to select the correct file and language for your board.

Installation

To install follow the instructions in the Welcome to CircuitPython! guide. To install the latest libraries, see this page in that guide.

Try code.circuitpython.org or the latest version of the Mu editor for creating and editing your CircuitPython programs and for easy access to the CircuitPython serial connection (the REPL).

Documentation

Documentation is available in readthedocs.io.

Port status

CircuitPython has a number of "ports" that are the core implementations for different microcontroller families. Stability varies on a per-port basis. As of this release, these ports are consider stable (but see Known Issues below):

  • atmel-samd: Microchip SAMD21, SAMx5x
  • cxd56: Sony Spresense
  • espressif: Espressif ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-C61, ESP32-H2, ESP32-S2, ESP32-S3
  • nordic: Nordic nRF52840, nRF52833
  • raspberrypi: Raspberry Pi RP2040, RP2350
  • stm: ST STM32F4 chip family

These ports are considered alpha and will have bugs and missing functionality:

  • analog: Analog Devices MAX32690
  • broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
  • espressif: , ESP32-P4
  • litex: fomu
  • mimxrt10xx: NXP i.MX RT10xxx
  • renode: hardware simulator
  • silabs: Silicon Labs MG24 family
  • stm: ST non-STM32F4 chip families
  • zephyr: multiplatform RTOS: testing with Nordic nRF5340 and nRF54L15, Renesas RA6M5, ST STM32H7

Changes

Fixes and enhancements

  • Update frozen libraries. #10710. Thanks @dhalbert.
  • Add mipidsi module to support MIPI DSI displays. Currently enabled for ESP32-P4. #10703. Thanks @tannewt.
  • Fix multiple issues with USB access to SD cards. #10699. Thanks @dhalbert.
  • Support finalisers on busio.SPI() . #10699. Thanks @dhalbert.

Port and board-specific changes

Analog Devices

Broadcom

Espressif

i.MX

Nordic

renode

RP2

SAMx

SiLabs

Spresense

STM

Zephyr

Individual boards

  • Seed XIAO ESP32S3 Plus: add more pins. #10701. Thanks @chinh4thepro.

Documentation changes

Build and infrastructure changes

Translation additions and improvements

New boards

Known issues

Thanks

Thank you to all who used, tested, and contributed toward this release, including the contributors above, and many others on GitHub and Discord. Join us on the Discord chat to collaborate.

CircuitPython 10.1.0-beta.0

20 Oct 22:39
6fe19f7

Choose a tag to compare

Pre-release

This is CircuitPython 10.1.0-beta.0, a beta release for 10.1.0. It has known bugs that will be fixed before the final release of 10.1.0.

Highlights of this release

  • Update espressif ESP-IDF to v5.5.1 and support ESP32-C61.

Download from circuitpython.org

Firmware downloads are available from the downloads page on circuitpython.org. The site makes it easy to select the correct file and language for your board.

Installation

To install follow the instructions in the Welcome to CircuitPython! guide. To install the latest libraries, see this page in that guide.

Try code.circuitpython.org or the latest version of the Mu editor for creating and editing your CircuitPython programs and for easy access to the CircuitPython serial connection (the REPL).

Documentation

Documentation is available in readthedocs.io.

Port status

CircuitPython has a number of "ports" that are the core implementations for different microcontroller families. Stability varies on a per-port basis. As of this release, these ports are consider stable (but see Known Issues below):

  • atmel-samd: Microchip SAMD21, SAMx5x
  • cxd56: Sony Spresense
  • espressif: Espressif ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-C61, ESP32-H2, ESP32-S2, ESP32-S3
  • nordic: Nordic nRF52840, nRF52833
  • raspberrypi: Raspberry Pi RP2040, RP2350
  • stm: ST STM32F4 chip family

These ports are considered alpha and will have bugs and missing functionality:

  • analog: Analog Devices MAX32690
  • broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
  • espressif: , ESP32-P4
  • litex: fomu
  • mimxrt10xx: NXP i.MX RT10xxx
  • renode: hardware simulator
  • silabs: Silicon Labs MG24 family
  • stm: ST non-STM32F4 chip families
  • zephyr: multiplatform RTOS: testing with Nordic nRF5340 and nRF54L15, Renesas RA6M5, ST STM32H7

Changes

Fixes and enhancements

Port and board-specific changes

Analog Devices

Broadcom

Espressif

  • Update ESP-IDF to v5.5.1 and support ESP32-C61. #10676. Thanks @tannewt.

i.MX

Nordic

renode

RP2

SAMx

SiLabs

Spresense

STM

Zephyr

Individual boards

Documentation changes

Build and infrastructure changes

Translation additions and improvements

New boards

Known issues

Thanks

Thank you to all who used, tested, and contributed toward this release, including the contributors above, and many others on GitHub and Discord. Join us on the Discord chat to collaborate.

CircuitPython 10.0.3

17 Oct 19:35
799f13c

Choose a tag to compare

This is CircuitPython 10.0.3, the latest bugfix revision of CircuitPython, and is a new stable release.

Highlights of this release

  • Fix SPI DMA on atmel-samd boards, which fixes SD card mounting problems.
  • Restore SD card USB presentation on atmel-samd boards.
  • No changes in this release for non-atmel-samd boards.

CircuitPython 10.0.2 was skipped due to a build problem.

Incompatibility warnings when upgrading to 10.0.x from 9.x.x

  • You must update the TinyUF2 bootloader on all ESP32-S2 and ESP32-S3 4MB flash boards to TinyUF2 0.33.0 or later.
    • The CircuitPython UF2 builds for these boards now assume a firmware partition size of 2.8MB (double the old size), as explained here. Updating the TinyUF2 bootloader will update the partition size. Failure to update the bootloader will likely cause a UF2 load to fail: you will remain in the bootloader, with the BOOT drive showing.
    • This bootloader update is only needed for ESP32-S2 and ESP32-S3 boards with 4MB flash boards; other ESP32-S2 and ESP32-S3 boards are fine. This bootloader update is compatible with CircuitPython 9.1.0 and later.
    • The proper updated bootloader will be installed by the "OPEN INSTALLER" buttons on each board download page and is also listed in the bootloader update section on those pages.
    • If you are loading CircuitPython using a .bin file instead of a UF2, the partition table is included in the .bin, and you don't need to do anything.
  • synthio.BlockBiquad has been renamed to synthio.Biquad. The old deprecatedsynthio.Biquad has been removed, as well as synthio.Synthesizer.low_pass_filter, synthio.Synthesizer.high_pass_filter, and synthio.Synthesizer.band_pass_filter. Coefficients from biquad_filter_state have been moved into synthio_biquad (biquad_filter_state is still used for input and output state).
  • The displayio bindings deprecated in 9.x.x have been removed:
    • busdisplay.BusDisplay replaces displayio.Display.
    • fourwire.FourWire replaces displayio.Fourwire.
    • epaperdisplay.EPaperDisplay replaces displayio.EPaperDisplay.
    • i2cdisplaybus.I2CDisplayBus replaces displayio.I2CDisplay.
  • os.uname().sysname and os.uname().nodename now are set to MICROPY_HW_MCU_NAME uniformly across all ports.
  • watchdog.WatchDogTimer.deinit() is removed.
  • _asyncio has removed push_head, push_sorted, pop_head. Ensure you are using the latest version of the asyncio CircuitPython library.
  • sys.print_exception() is removed. Use traceback.print_exception() instead. The exception object returned by sys.exc_info() is now a traceback module compatible object.

Download from circuitpython.org

Firmware downloads are available from the downloads page on circuitpython.org. The site makes it easy to select the correct file and language for your board.

Installation

To install follow the instructions in the Welcome to CircuitPython! guide. To install the latest libraries, see this page in that guide.

Try code.circuitpython.org or the latest version of the Mu editor for creating and editing your CircuitPython programs and for easy access to the CircuitPython serial connection (the REPL).

Documentation

Documentation is available in readthedocs.io.

Port status

CircuitPython has a number of "ports" that are the core implementations for different microcontroller families. Stability varies on a per-port basis. As of this release, these ports are consider stable (but see Known Issues below):

  • atmel-samd: Microchip SAMD21, SAMx5x
  • cxd56: Sony Spresense
  • espressif: Espressif ESP32, ESP32-S2, ESP32-S3, ESP32-C2, ESP32-C3, ESP32-C6
  • nordic: Nordic nRF52840, nRF52833
  • raspberrypi: Raspberry Pi RP2040, RP2350
  • stm: ST STM32F4 chip family

These ports are considered alpha and will have bugs and missing functionality:

  • analog: Analog Devices MAX32690
  • broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
  • espressif: ESP32-P4, ESP32-H2
  • litex: fomu
  • mimxrt10xx: NXP i.MX RT10xxx
  • renode: hardware simulator
  • silabs: Silicon Labs MG24 family
  • stm: ST non-STM32F4 chip families
  • zephyr: multiplatform RTOS: testing with Nordic nRF5340 and nRF54L15, Renesas RA6M5, ST STM32H7

Changes

Fixes and enhancements

Port and board-specific changes

Analog Devices

Broadcom

Espressif

i.MX

Nordic

renode

RP2

SAMx

  • Restore presenting mounted SD cards as USB drives. #10677. Thanks @dhalbert.
  • Fix SPI DMA implementation, which fixes SD card mounting problems. #10668. Thanks @dhalbert.

SiLabs

Spresense

STM

Zephyr

Individual boards

Documentation changes

Build and infrastructure changes

Translation additions and improvements

New boards

Known issues

Thanks

Thank you to all who used, tested, and contributed toward this release, including the contributors above, and many others on GitHub and Discord. Join us on the Discord chat to collaborate.

CircuitPython 10.0.1

09 Oct 20:34
0d88686

Choose a tag to compare

This is CircuitPython 10.0.1, the latest bugfix revision of CircuitPython, and is a new stable release.

Highlights of this release

  • Fix 10.0.0 regression preventing writing to a filesystem other than CIRCUITPY via USB.

Incompatibility warnings when upgrading to 10.0.x from 9.x.x

  • You must update the TinyUF2 bootloader on all ESP32-S2 and ESP32-S3 4MB flash boards to TinyUF2 0.33.0 or later.
    • The CircuitPython UF2 builds for these boards now assume a firmware partition size of 2.8MB (double the old size), as explained here. Updating the TinyUF2 bootloader will update the partition size. Failure to update the bootloader will likely cause a UF2 load to fail: you will remain in the bootloader, with the BOOT drive showing.
    • This bootloader update is only needed for ESP32-S2 and ESP32-S3 boards with 4MB flash boards; other ESP32-S2 and ESP32-S3 boards are fine. This bootloader update is compatible with CircuitPython 9.1.0 and later.
    • The proper updated bootloader will be installed by the "OPEN INSTALLER" buttons on each board download page and is also listed in the bootloader update section on those pages.
    • If you are loading CircuitPython using a .bin file instead of a UF2, the partition table is included in the .bin, and you don't need to do anything.
  • synthio.BlockBiquad has been renamed to synthio.Biquad. The old deprecatedsynthio.Biquad has been removed, as well as synthio.Synthesizer.low_pass_filter, synthio.Synthesizer.high_pass_filter, and synthio.Synthesizer.band_pass_filter. Coefficients from biquad_filter_state have been moved into synthio_biquad (biquad_filter_state is still used for input and output state).
  • The displayio bindings deprecated in 9.x.x have been removed:
    • busdisplay.BusDisplay replaces displayio.Display.
    • fourwire.FourWire replaces displayio.Fourwire.
    • epaperdisplay.EPaperDisplay replaces displayio.EPaperDisplay.
    • i2cdisplaybus.I2CDisplayBus replaces displayio.I2CDisplay.
  • os.uname().sysname and os.uname().nodename now are set to MICROPY_HW_MCU_NAME uniformly across all ports.
  • watchdog.WatchDogTimer.deinit() is removed.
  • _asyncio has removed push_head, push_sorted, pop_head. Ensure you are using the latest version of the asyncio CircuitPython library.
  • sys.print_exception() is removed. Use traceback.print_exception() instead. The exception object returned by sys.exc_info() is now a traceback module compatible object.

Download from circuitpython.org

Firmware downloads are available from the downloads page on circuitpython.org. The site makes it easy to select the correct file and language for your board.

Installation

To install follow the instructions in the Welcome to CircuitPython! guide. To install the latest libraries, see this page in that guide.

Try code.circuitpython.org or the latest version of the Mu editor for creating and editing your CircuitPython programs and for easy access to the CircuitPython serial connection (the REPL).

Documentation

Documentation is available in readthedocs.io.

Port status

CircuitPython has a number of "ports" that are the core implementations for different microcontroller families. Stability varies on a per-port basis. As of this release, these ports are consider stable (but see Known Issues below):

  • atmel-samd: Microchip SAMD21, SAMx5x
  • cxd56: Sony Spresense
  • espressif: Espressif ESP32, ESP32-S2, ESP32-S3, ESP32-C2, ESP32-C3, ESP32-C6
  • nordic: Nordic nRF52840, nRF52833
  • raspberrypi: Raspberry Pi RP2040, RP2350
  • stm: ST STM32F4 chip family

These ports are considered alpha and will have bugs and missing functionality:

  • analog: Analog Devices MAX32690
  • broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
  • espressif: ESP32-P4, ESP32-H2
  • litex: fomu
  • mimxrt10xx: NXP i.MX RT10xxx
  • renode: hardware simulator
  • silabs: Silicon Labs MG24 family
  • stm: ST non-STM32F4 chip families
  • zephyr: multiplatform RTOS: testing with Nordic nRF5340 and nRF54L15, Renesas RA6M5, ST STM32H7

Changes

Fixes and enhancements

Port and board-specific changes

Analog Devices

Broadcom

Espressif

i.MX

Nordic

renode

RP2

SAMx

SiLabs

Spresense

STM

Zephyr

Individual boards

  • SparkFun STM32 MicroMod: fix USB PID. #10654. Thanks @cgnd.

Documentation changes

  • Add TilePaletteMapper to pixel_shader allowed types. #10662. Thanks @FoamyGuy.

Build and infrastructure changes

  • Fix mpy-cross build failure when using clang (e.g., macOS). #10656. Thanks @dhalbert.
  • circuitpython_setboard: import importlib Traversable from new location. #10661. Thanks @dhalbert.

Translation additions and improvements

New boards

Known issues

Thanks

Thank you to all who used, tested, and contributed toward this release, including the contributors above, and many others on GitHub and Discord. Join us on the Discord chat to collaborate.

CircuitPython 10.0.0

01 Oct 20:47
a54ddb3

Choose a tag to compare

This is CircuitPython 10.0.0, the latest major revision of CircuitPython, and is a new stable release.

This release is identical to 10.0.0-rc.0 except for its version number.

Incompatibility warnings when upgrading to 10.0.0 from 9.x.x

  • You must update the TinyUF2 bootloader on all ESP32-S2 and ESP32-S3 4MB flash boards to TinyUF2 0.33.0 or later.
    • The CircuitPython UF2 builds for these boards now assume a firmware partition size of 2.8MB (double the old size), as explained here. Updating the TinyUF2 bootloader will update the partition size. Failure to update the bootloader will likely cause a UF2 load to fail: you will remain in the bootloader, with the BOOT drive showing.
    • This bootloader update is only needed for ESP32-S2 and ESP32-S3 boards with 4MB flash boards; other ESP32-S2 and ESP32-S3 boards are fine. This bootloader update is compatible with CircuitPython 9.1.0 and later.
    • The proper updated bootloader will be installed by the "OPEN INSTALLER" buttons on each board download page and is also listed in the bootloader update section on those pages.
    • If you are loading CircuitPython using a .bin file instead of a UF2, the partition table is included in the .bin, and you don't need to do anything.
  • synthio.BlockBiquad has been renamed to synthio.Biquad. The old deprecatedsynthio.Biquad has been removed, as well as synthio.Synthesizer.low_pass_filter, synthio.Synthesizer.high_pass_filter, and synthio.Synthesizer.band_pass_filter. Coefficients from biquad_filter_state have been moved into synthio_biquad (biquad_filter_state is still used for input and output state).
  • The displayio bindings deprecated in 9.x.x have been removed:
    • busdisplay.BusDisplay replaces displayio.Display.
    • fourwire.FourWire replaces displayio.Fourwire.
    • epaperdisplay.EPaperDisplay replaces displayio.EPaperDisplay.
    • i2cdisplaybus.I2CDisplayBus replaces displayio.I2CDisplay.
  • os.uname().sysname and os.uname().nodename now are set to MICROPY_HW_MCU_NAME uniformly across all ports.
  • watchdog.WatchDogTimer.deinit() is removed.
  • _asyncio has removed push_head, push_sorted, pop_head. Ensure you are using the latest version of the asyncio CircuitPython library.
  • sys.print_exception() is removed. Use traceback.print_exception() instead. The exception object returned by sys.exc_info() is now a traceback module compatible object.

Notable changes to 10.0.0 not in 9.x.x

Audio

  • Add effects: audiodelays.Chorus, audiodelays.MultiTapDelay, audiofreeverb.Freeverb, audioFilters.Phaser.
  • Add audiomixer.MixerVoice.panning, with synthio.BlockInput support.
  • Add synthio.MidiTrack.tempo.
  • Rename synthio.BlockBiquad to synthio.Biquad. See Incompatibility warnings above.
  • Convert mono audio to stereo when going through a stereo audiomixer.Mixer.
  • Add MixerVoice.end().

Built-in modules

  • Initial experimental implementation of MicroROS.
  • Improve accuracy of time.sleep() and similar functions.

Graphics

  • Support quad-color and "Spectra6" six-color e-ink displays.
  • tilepalettemapper.TilePaletteMapper now supports displayio.ColorConverter.
  • Add lvfontio.OnDiskFont to support on-disk fonts for terminalio.
  • Add Terminal.cursor_x and .cursor_y.
  • Add picodvi.Framebuffer.color_depth.
  • Improve picodvi timing to accomodate more monitors.

Internal

  • Improved garbage collection times: skip scanning inside objects with no pointers.
  • Update TinyUSB.
  • Merge MicroPython updates up to MicroPython v1.25.0.
  • Update Espressif ESP-IDF to 5.4.1.
  • Update Raspberry Pi pico-sdk to 2.2.0 and cyw43-driver to v1.1.0.

Networking

  • Use full Mozilla SSL root certificate list for all network-capable boards.
  • Add wifi.radio.power_management to control WiFi power consumption while listening.

Python interpreter

Storage

  • Add CPSAVES partition (currently only on Adafruit Fruit Jam).

Supervisor

USB

  • Present mounted SD cards and CPSAVES as additional USB drives.

Download from circuitpython.org

Firmware downloads are available from the downloads page on circuitpython.org. The site makes it easy to select the correct file and language for your board.

Installation

To install follow the instructions in the Welcome to CircuitPython! guide. To install the latest libraries, see this page in that guide.

Try code.circuitpython.org or the latest version of the Mu editor for creating and editing your CircuitPython programs and for easy access to the CircuitPython serial connection (the REPL).

Documentation

Documentation is available in readthedocs.io.

Port status

CircuitPython has a number of "ports" that are the core implementations for different microcontroller families. Stability varies on a per-port basis. As of this release, these ports are consider stable (but see Known Issues below):

  • atmel-samd: Microchip SAMD21, SAMx5x
  • cxd56: Sony Spresense
  • espressif: Espressif ESP32, ESP32-S2, ESP32-S3, ESP32-C2, ESP32-C3, ESP32-C6
  • nordic: Nordic nRF52840, nRF52833
  • raspberrypi: Raspberry Pi RP2040, RP2350
  • stm: ST STM32F4 chip family

These ports are considered alpha and will have bugs and missing functionality:

  • analog: Analog Devices MAX32690
  • broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
  • espressif: ESP32-P4, ESP32-H2
  • litex: fomu
  • mimxrt10xx: NXP i.MX RT10xxx
  • renode: hardware simulator
  • silabs: Silicon Labs MG24 family
  • stm: ST non-STM32F4 chip families
  • zephyr: multiplatform RTOS: testing with Nordic nRF5340 and nRF54L15, Renesas RA6M5, ST STM32H7

Changes

Fixes and enhancements

Port and board-specific changes

Analog Devices

Broadcom

Espressif

i.MX

Nordic

renode

RP2

SAMx

SiLabs

Spresense

STM

Zephyr

Individual boards

Documentation changes

Build and infrastructure changes

Translation additions and improvements

New boards

Known issues

Thanks

Thank you to all who used, tested, and contributed toward this release, including the contributors above, and many others on GitHub and Discord. Join us on the Discord chat to collaborate.

CircuitPython 10.0.0-rc.0

30 Sep 23:08
a54ddb3

Choose a tag to compare

Pre-release

This is CircuitPython 10.0.0-rc.0, a release candidate for 10.0.0 final. This release is believed to be stable, and is meant for testing before the final release of 10.0.0.

Highlights of this release

  • Allow chained calls for audio effects and audio mixer.
  • Bug fixes.

Incompatibility warnings

  • You must update the TinyUF2 bootloader on all ESP32-S2 and ESP32-S3 4MB flash boards to TinyUF2 0.33.0 or later.
    • The CircuitPython UF2 builds for these boards now assume a firmware partition size of 2.8MB (double the old size), as explained here. Updating the TinyUF2 bootloader will update the partition size. Failure to update the bootloader will likely cause a UF2 load to fail: you will remain in the bootloader, with the BOOT drive showing.
    • This bootloader update is only needed for ESP32-S2 and ESP32-S3 boards with 4MB flash boards; other ESP32-S2 and ESP32-S3 boards are fine. This bootloader update is compatible with CircuitPython 9.1.0 and later.
    • The proper updated bootloader will be installed by the "OPEN INSTALLER" buttons on each board download page and is also listed in the bootloader update section on those pages.
    • If you are loading CircuitPython using a .bin file instead of a UF2, the partition table is included in the .bin, and you don't need to do anything.
  • synthio.BlockBiquad has been renamed to synthio.Biquad. The old deprecatedsynthio.Biquad has been removed, as well as synthio.Synthesizer.low_pass_filter, synthio.Synthesizer.high_pass_filter, and synthio.Synthesizer.band_pass_filter. Coefficients from biquad_filter_state have been moved into synthio_biquad (biquad_filter_state is still used for input and output state).
  • The displayio bindings deprecated in 9.x.x have been removed:
    • busdisplay.BusDisplay replaces displayio.Display.
    • fourwire.FourWire replaces displayio.Fourwire.
    • epaperdisplay.EPaperDisplay replaces displayio.EPaperDisplay.
    • i2cdisplaybus.I2CDisplayBus replaces displayio.I2CDisplay.
  • os.uname().sysname and os.uname().nodename now are set to MICROPY_HW_MCU_NAME uniformly across all ports.
  • watchdog.WatchDogTimer.deinit() is removed.
  • _asyncio removed push_head, push_sorted, pop_head. Ensure you are using the latest version of the asyncio CircuitPython library.
  • sys.print_exception() is removed. Use traceback.print_exception() instead. The exception object returned by sys.exc_info() is now a traceback module compatible object.

Download from circuitpython.org

Firmware downloads are available from the downloads page on circuitpython.org. The site makes it easy to select the correct file and language for your board.

Installation

To install follow the instructions in the Welcome to CircuitPython! guide. To install the latest libraries, see this page in that guide.

Try code.circuitpython.org or the latest version of the Mu editor for creating and editing your CircuitPython programs and for easy access to the CircuitPython serial connection (the REPL).

Documentation

Documentation is available in readthedocs.io.

Port status

CircuitPython has a number of "ports" that are the core implementations for different microcontroller families. Stability varies on a per-port basis. As of this release, these ports are consider stable (but see Known Issues below):

  • atmel-samd: Microchip SAMD21, SAMx5x
  • cxd56: Sony Spresense
  • espressif: Espressif ESP32, ESP32-S2, ESP32-S3, ESP32-C2, ESP32-C3, ESP32-C6
  • nordic: Nordic nRF52840, nRF52833
  • raspberrypi: Raspberry Pi RP2040, RP2350
  • stm: ST STM32F4 chip family

These ports are considered alpha and will have bugs and missing functionality:

  • analog: Analog Devices MAX32690
  • broadcom: Raspberry Pi boards such as RPi 4, RPi Zero 2W
  • espressif: ESP32-P4, ESP32-H2
  • litex: fomu
  • mimxrt10xx: NXP i.MX RT10xxx
  • renode: hardware simulator
  • silabs: Silicon Labs MG24 family
  • stm: ST non-STM32F4 chip families
  • zephyr: multiplatform RTOS: testing with Nordic nRF5340 and nRF54L15, Renesas RA6M5, ST STM32H7

Changes

Fixes and enhancements

  • Update frozen libraries. #10649. Thanks @dhalbert.
  • Ensure that additional mounted filesystems are read-only to the host if read-write to CircuitPython, and vice versa. #10648. Thanks @dhalbert.
  • Prevent spurious auto-reloads when host writes the filesystem dirty bit. #10645. Thanks @dhalbert.
  • Allow chained calls for audio effects and audio mixer. #10635. Thanks @relic-se.
  • Ensure USB host buffers are in DMA-capable RAM. #10633. Thanks @tannewt.
  • Always include module name for clarity when reporting an import failure. #10629. Thanks @dhalbert.
  • Give better error when mistakenly importing a MicroPython .mpy file. #10622. Thanks @dhalbert.
  • Improve usb.core.Device error handling. #10616. Thanks @samblenny.

Port and board-specific changes

Analog Devices

Broadcom

Espressif

  • Return correct error code on network connect failure. #10631. Thanks @dhalbert.
  • Use standard LWIP defaults in sdkconfig.defaults to allow more sockets. #10609. Thanks @dhalbert.

i.MX

Nordic

renode

RP2

SAMx

  • Disable SD card mount presented as USB drive, due to a SAMD-specific issue. #10645. Thanks @dhalbert.
  • Release SERCOM on I2C deinit. #10402. Thanks @eightycc.

SiLabs

Spresense

STM

Zephyr

Individual boards

Documentation changes

  • Improve struct_time and time.localtime() documentation and type annotations. #10603. Thanks @proveskit.
  • Improve wifi.Radio type annotations. #10602. Thanks @proveskit.

Build and infrastructure changes

  • Move adabot cron workflows to circuitpython repo. #10596. Thanks @FoamyGuy.
  • Use RUN_BACKGROUND_TASKS as MICROPY_INTERNAL_EVENT_HOOK, so it doesn't have to be called explicitly from mp_event_wait_*(). #10379. Thanks @jepler.

Translation additions and improvements

New boards

Known issues

Thanks

Thank you to all who used, tested, and contributed toward this release, including the contributors above, and many others on GitHub and Discord. Join us on the Discord chat to collaborate.