This is CircuitPython 10.3.0-rc.0, a release candidate for CircuitPython 10.3.0 final. CircuitPython 10.3.0 will be the latest minor revision of CircuitPython, and will be a new stable release.
Notable additions, changes, and fixes in 10.3.0 from 10.2.1
Gaming and Display
picogamegame engine module, a performant game-oriented alternative todisplayio.- E-ink display quality improvements, including on MagTag 2025.
Audio
audio.AudioOut, using DAC, now available on STM.audio_i2sin, available on Espressif and RP2xxx.audiofilewriter, to send an audio pipeline stream to a file.audiodelays.Flanger,audiodelays.GranularPitchShift.audiospeed.Resampler.audiodelays,audiofilters, andaudiofreeverbnow available on RP2xxx.synthio.Biquadfilters now available inaudiodelays.Echoandaudiofreeverb.Freeverb.usb_audio.USBMicrophoneandusb_audio.USBSpeaker, which provide audio source and sink USB devices.- Duplex I2S.
settings.toml
CIRCUITPY_BLE_WORKFLOWtoggle.CIRCUITPY_HEAP_SRAM_SIZE.CIRCUITPY_SAFE_MODE_DELAYtime value.CIRCUITPY_SDCARD_USBtoggle.CIRCUITPY_WIFI_HOSTNAME.- Float values can now be specified.
Storage
sdioionow available on RP2xxx.storage.unsafe_disable_usb_drive()can disable the USB CIRCUITPY drive after the host has mounted it.
Fixes
- ESP-NOW works again.
- USB host fixes.
- BLE workflow fixes (more to come).
Highlights of this release
- Add
picogamegame engine module. - Add
CIRCUITPY_HEAP_SRAM_SIZEsetting insettings.toml. - Add
audiodelays.Flanger. - Add
synthio.Biquadfilters toaudiodelays.Echoandaudiofreeverb.Freeverb. - Implement duplex I2S.
- Add stereo support to
usb_audio. - BLE workflow fixes (more to come).
- Zephyr BLE support.
- Many other Zephyr, additions, fixes, and new boards.
Incompatibility warnings when upgrading to 10.3.0 from 10.2.1
- The
baudratespecified inbusio.SPI.configure()is now a ceiling, and will not be exceeded. Previously, on some ports, the actual baudrate chosen could have been the nearest available baudrate, but higher than the specified baudrate, sometimes by a substantial amount. UseSPI.frequencyto fetch the actual baudrate. Limitations: On Zephyr,SPI.frequencyis the specified, not the actual baudrate, and some Zephyr ports may violate the ceiling behavior.
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, SAMx5xcxd56: Sony Spresenseespressif: Espressif ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-C61, ESP32-H2, ESP32-S2, ESP32-S3nordic: Nordic nRF52840, nRF52833raspberrypi: Raspberry Pi RP2040, RP2350stm: ST STM32F4 chip family
These ports are considered alpha and will have bugs and missing functionality:
analog: Analog Devices MAX32690broadcom(will be removed in CircuitPython 11): Raspberry Pi boards such as RPi 4, RPi Zero 2Wespressif: ESP32-P4litex: fomumimxrt10xx: NXP i.MX RT10xxxrenode: hardware simulatorsilabs: Silicon Labs MG24 familystm: ST non-STM32F4 chip familieszephyr: multiplatform RTOS, running on multiple chip families
Changes since 10.3.0-alpha.4
Fixes and enhancements
- Keep BLE workflow connection alive across VM restarts when possible. #11255. Thanks @dhalbert.
- Update frozen libraries. #11244. Thanks @dhalbert.
- Fix card size for SDXC cards larger than 32 GB. #11243, #11013. Thanks @mikeysklar.
- On boards that use a button to enter safe mode or BLE discovery, provide LED feedback the user successfully entered those modes. #11232. Thanks @dhalbert.
- Fix some cross-platform BLE bugs. #11225. Thanks @dhalbert.
- Prevent
MP3Decoderinput corruption. #11219. Thanks @FoamyGuy. - Report individual error code for
gaierrorinsocketpool. #11215. Thanks @mikeysklar. - Prevent
audiomixer.Mixerfrom resetting all voices when played. #11211. Thanks @relic-se. - Check
tracebackarguments more carefully. #11209. Thanks @dhalbert. - Check for failures when creating web workflow listening socket. #11207. Thanks @mikeysklar.
- Add
picogamegame engine module. #11199. Thanks @lynt-smitka. - Add
synthio.Biquadfilters toaudiodelays.Echoandaudiofreeverb.Freeverb. #11196. Thanks @relic-se. - Improve
usb_audio.Microphone. #11195. Thanks @mikeysklar. - Prevent click noise on
audiomixer.Mixerandsynthio.Synthesizerduring volume updates. #11194. Thanks @relic-se. - Fix
synthio.Note.panning. #11191. Thanks @relic-se. - Merge overlapping dirty rectangles in
busdisplay. #11189. Thanks @lynt-smitka. - Return text errors for SSL certificat verification failures. #11183. Thanks @dhalbert.
- Fix
mdnscrashes. #11181. Thanks @dhalbert. - Remove previously added
I2SIninvert_bit_clockargument. #11177. Thanks @FoamyGuy. - Add
CIRCUITPY_HEAP_SRAM_SIZEsetting insettings.toml. #11176. Thanks @lynt-smitka. - Add
audiodelays.Flanger. #11175. Thanks @FoamyGuy. - Fix crashes caused by deinited audiosample objects. #11154. Thanks @FoamyGuy.
- For
_bleioHCI, fill in error information for ATT Error Response. #11145. Thanks @annejan. - Validate that an expected audiosample argument is really one, in many places. #11138. Thanks @dhalbert.
- Add
raise_on_timeout=Falseoption tousb_core.Device.read. #11137. Thanks @lynt-smitka. - Implement duplex I2S. #11136. Thanks @FoamyGuy.
- Add stereo support to
usb_audio. #11102. Thanks @relic-se.
Port and board-specific changes
Analog Devices
Broadcom
Espressif
- Read MAC address from eFuse so WiFi does not need to be enabled to fetch the address. #11238. Thanks @mikeysklar.
- Accept a BLE re-pairing request from a peer already bonded to the board. #11237. Thanks @dhalbert.
- Require encryption to write CCCD of an encrypted characteristic. #11236. Thanks @dhalbert.
- Fix
busio.UARTCTS flow control. #11162. Thanks @tannewt.
i.MX
Nordic
- Fix
AnalogInissue: value sometimes 0. #11253. Thanks @FoamyGuy. - Support
external_clockonI2SOut. #11252. Thanks @FoamyGuy. - Allow SoftDevice to be optional, for boards that don't use BLE. #11251. Thanks @FoamyGuy.
- Fix some platform-specific BLE bugs. #11225. Thanks @dhalbert.
- Support two stop bits in
busio.UART. #11169. Thanks @dhalbert.
renode
RP2xxx
- Add GD25Q64 flash chips as an alternative for W25Q64 on several boards. #11249. Thanks @tannewt.
- Turn off
CIRCUITPY_I2CIOEXPANDERexcept on yoto boards. #11241. Thanks @dhalbert. - Add
Framebuffer.wait_for_vblank()to allow tear-free repaints. #11187. Thanks @lynt-smitka. - Support multicast TTL sockets. #11174. Thanks @Daniiiil1.
- Update
mbedtlsfrom 2.28.3 to 4.2.0. #11156. Thanks @dhalbert. - Add
wiznetPIO SPI support. #10440. Thanks @wizhannah.
SAMx
SiLabs
Spresense
- Raise
NotImplementedErrorforos.urandom()instead of returning a non-TRNG value. #11184. Thanks @dhalbert.
STM
Zephyr
- Support saved words across hard resets. #11254. Thanks @tannewt.
- Use WiFi MAC for
cpu.uidwhen hardware unique ID is not available. #11246. Thanks @mikeysklar. - Add
ulab. #11245. Thanks @mikeysklar. - Fix BLE name. #11239. Thanks @tannewt.
- Keep board overlays and Kconfig fragments in the board folder. #11235. Thanks @lynt-smitka.
- Fix flash partition specification. #11234. Thanks @lynt-smitka.
- Turn on some
MICROPYspeed improvement options that were off by default. #11233. Thanks @lynt-smitka. - Handle heap regions that are too small for use. #11230. Thanks @mikeysklar.
- Add WiFi station connect, IPv4 address fetching,
wifi.radio.addresses, proper authmode reporting, MAC address fetching. #11228. Thanks @mikeysklar. - Route WiFi diagnostics through the log subsystem. #11227. Thanks @mikeysklar.
- Enable BLE workflow. #11226. Thanks @tannewt.
- Fix WiFi network scanning. #11223. Thanks @mikeysklar.
- Handle reading vendor index from vendor directory. #11220. Thanks @mikeysklar.
- Handle missing labels for keys/buttons. #11210. Thanks @mikeysklar.
- Add
usb_hid. #11201. Thanks @tannewt. - Add BLE pairing and bonding. #11200. Thanks @tannewt.
- Enable
asyncio,binascii,json,re, andselect. #11180. Thanks @tannewt. - Implement
_bleioGATT functionality. #11179. Thanks @tannewt. - Update to latest version of Zephyr. #11171. Thanks @tannewt.
- Fix left justified
I2SInwith external clock. #11170. Thanks @relic-se.
Individual boards
- Adafruit Memento: turn off presenting SD card on USB by default. #11240. Thanks @dhalbert.
- M5Stack CoreS3: fix crash on boot. #11155. Thanks @CDarius.
Documentation changes
Build and infrastructure changes
- Allow
sys.platformto contain spaces indetect_test_platform(). #11242. Thanks @mikeysklar. - Update to
tekktrik/issue-labeled-ping@v3. #11208. Thanks @tekktrik. - Handle CI check suites with no
workflowRunwhen determining which jobs to run. #11205. Thanks @mikeysklar. - Stop doing Windows test builds. #11173. Thanks @dhalbert.
- Fix build error when BLE workflow serial is enabled but BLE file service is not. #11147. Thanks @annejan.
Translation additions and improvements
New boards
- Adafruit CLUE on Zephyr (already has
nordicbuild). #11206. Thanks @tannewt. - Espressif ESP32-S3-DevKitC-1-N32R16. #11192. Thanks @mikeysklar.
- Ikea Alpstuga Drop-In board: ESP32S3 4MB Flash 2MB PSRAM. #11163. Thanks @BlitzCityDIY.
- Nordic nRF54L15Tag. #11166. Thanks @tannewt.
- Nordic nRF54LM20DK. #11166. Thanks @tannewt.
- Seeed Studio TRMNL 7.5" (OG) DIY-Kit. #11222. Thanks @bablokb.
- Silicon Labs SiWx917-DK2605A, on Zephyr. #11218. Thanks @mikeysklar.
- Teenage Engineering EP2-350: #11153, #11136. Thanks @FoamyGuy.
- WIZnet W55RP20-EVB-Pico. #10440. Thanks @wizhannah.
Known issues
- See https://github.com/adafruit/circuitpython/issues for other issues, including issues still to be addressed for:
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.