# micropython v1.25.0 — ROMFS, alif port, RISCV inline assembler, DTLS, mpremote recursive remove - Product: micropython (https://whatsnew.fyi/product/micropython) - Vendor: micropython - Date: 2025-04-15 - Version: v1.25.0 - Original notes: https://github.com/micropython/micropython/releases/tag/v1.25.0 - Permalink: https://whatsnew.fyi/product/micropython/releases/v1.25.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — ROMFS feature providing a read-only, memory-mappable filesystem for executing bytecode and storing resources in-place without copying to RAM - **added** — mpremote romfs command with query, build, and deploy sub-commands for building and deploying ROMFS partitions - **added** — New alif port supporting Alif Ensemble MCUs with USB, dual-core support, octal SPI flash, machine classes, and WiFi and BLE support - **added** — Support for 32-bit RISC-V assembly code via @micropython.asm_rv32 decorator on rp2 port when RP2350 runs in RISC-V mode - **added** — Datagram TLS (DTLS) support in tls module via tls.PROTOCOL_DTLS_CLIENT and tls.PROTOCOL_DTLS_SERVER modes - **added** — mpremote rm -r option for recursive removal of files and directories - **added** — Full support for tuples and start/end arguments in str.startswith() and str.endswith() methods - **added** — Two-argument version of built-in next() function on most ports - **added** — sys.implementation._build entry holding the build name of the target - **added** — marshal module with dumps() and loads() functions supporting code objects and function conversion - **added** — Support for 32-bit RISC-V code in native modules - **added** — Dynamic USB device support on ESP32-S2 and ESP32-S3 MCUs for runtime configuration - **added** — Pin.toggle() method on esp32 port - **added** — exFAT filesystem support on mimxrt port - **added** — PPP driver for mimxrt boards with lwIP networking - **added** — UF2 bootloader support on mimxrt port - **added** — ADC.read_uv() method on mimxrt port - **changed** — vfs.mount() with no arguments now returns a list of mounted filesystems - **changed** — esp32 port now supports IDF v5.3 and v5.4; support for versions below v5.2.0 dropped - **changed** — I2C bus identifier is now an optional argument on esp32 port with bus 0 as default After more than three years in development, the "ROMFS" feature has been finalised, its filesystem format specified, and the VFS driver and supporting code are included in this release of MicroPython. This feature builds on bytecode version 6 (available for many years now), which supports executing bytecode in-place, that is, without the need to copy it to RAM. ROMFS defines a read-only, memory-mappable, extensible filesystem that can contain arbitrary resources, including precompiled mpy files, and allows executing bytecode directly from the filesystem. This makes importing significantly faster and use a lot less memory. Also, data resources such as fonts can be used in-place on a ROMFS without loading into RAM. ROMFS is currently enabled only on selected boards: PYBD-SFx, all alif-port boards, a new ESP8266_GENERIC variant called FLASH_2M_ROMFS, and all stm32 Arduino boards. Other boards will have ROMFS enabled in the future, or it can be manually enabled on user-defined boards. To build and deploy a ROMFS, mpremote has a new `mpremote romfs` command, with "query", "build", and "deploy" sub-commands, which can build and deploy a directory structure to a ROMFS partition on a target device. These initial ROMFS features will be extended in the future, but for now they provide a way to try out this long-anticipated feature. This release also introduces a brand new "alif" port supporting Alif Ensemble MCUs. These MCUs offer multiple ARM cores, including Ethos-U55 machine-learning processors, and a comprehensive set of peripherals. Current features of the MicroPython alif port include USB support via TinyUSB, dual-core support using OpenAMP, octal SPI flash with XIP, the machine classes Pin, UART, SPI and I2C, and cyw43 WiFi and BLE support. Two alif board definitions are currently available: ALIF_ENSEMBLE for the official Alif Ensemble E7 DevKit, and OPENMV_AE3 for OpenMV's upcoming AE3-based camera board. MicroPython's inline assembler now supports 32-bit RISC-V assembly code via the newly implemented `@micropython.asm_rv32` decorator. This allows writing small snippets of RISC-V machine code that can be called directly from Python code. It is enabled on the rp2 port when the RP2350 is running in RISC-V mode. Datagram TLS (DTLS) is now supported by the `tls` module and enabled on the alif, mimxrt, renesas-ra, rp2, stm32 and unix ports. An `SSLContext` can be created in DTLS mode using `tls.PROTOCOL_DTLS_CLIENT` or `tls.PROTOCOL_DTLS_SERVER` as the mode option, and this context can then be used to wrap a normal UDP socket to get a secure UDP connection. The mpremote command-line tool now supports recursive remove via the new `rm -r` option; for example, `mpremote rm -rv :` can be used to remove all files and directories in the current working directory of the target device. mpremote also now supports relative URLs in the `package.json` file, installing from the local filesystem, and has optimised readline support in `mpremote mount`. Improvements to the core interpreter include: full support for tuples and start/end arguments in the `str.startswith()` and `str.endswith()` methods; enabling of the two-argument version of the built-in `next()` function on most of the ports; a new `sys.implementation._build` entry which holds the build name of the target; and `vfs.mount()` with no arguments now returns a list of mounted filesystems. The `marshal` module has been added with `dumps()` and `loads()` functions, which currently support code objects and, in combination with `function.__code__`, allow converting functions to/from a bytes object. This module is not enabled by default but can be used in custom build configurations. The MicroPython native linker `mpy_ld.py` now includes support for linking in static libraries automatically. This allows the native-module build scripts to look for required symbols from libraries such as `libgcc` and `libm` that are provided by the compiler. This now makes i _[Truncated at 4000 characters — full notes: https://github.com/micropython/micropython/releases/tag/v1.25.0]_