The switch to C++

v1.0 “Vela” is the last MicroPython release  •  v2.0 is the same OS, written native

The short version

RPCortex is being rewritten in C++, running natively on the hardware with no interpreter underneath. It is the same operating system — the same shell, the same commands, the same accounts, the same package system. The goal is that you open PuTTY and cannot tell the codebase changed, except that everything is faster and the memory ceiling you kept running into is gone.

There is no v1.1. The work that would have gone into it goes into v2.0 instead. v1.0 keeps working, stays installable, and stays supported — nothing is being taken away from anyone.

Why

Most of the hard bugs in the last year were the same bug wearing different hats: not enough memory, in a way that was difficult to see and harder to fix.

The clearest example shipped in v1.0. HTTPS would stop working on a device that had been running a while, and the reason was not that memory had run out — a board would report 52 KB free and still fail. A TLS handshake needs one unbroken block of about 16.9 KB, and MicroPython's collector never moves anything, so once the heap is carved up there is no way to make a run that large again. The fix works, and it is a good fix, but it is a fix for a problem that only exists because of how the runtime manages memory.

The same shape turned up everywhere. Package installs that failed on large archives. Commands that could not be loaded when the heap was fragmented. A whole board — the original Pico and Pico W, with 264 KB of RAM — that had to be dropped from v1.0 because the multitasking build simply would not fit.

Underneath all of it, an interpreter was doing work that a microcontroller cannot really spare: parsing, allocating, tracing, collecting. Removing it removes the category.

What stays the same

This is a rewrite of the implementation, not a redesign of the product. Deliberately:

What gets better

Packages still work — this was the deciding question

The obvious objection to dropping an interpreter is that you lose the thing an interpreter gives you: the ability to load and run code that was not compiled into the firmware. An OS without a package system is a much smaller idea, and it was genuinely unclear whether this was possible.

It is. A package is a compiled object file, loaded from the filesystem at runtime, relocated in RAM, resolved against a firmware symbol table, and run — then unloaded cleanly, with its commands removed from the shell and its memory returned. It costs about 3.3 KB of flash and no static RAM. This was built and proven first, before any of the rest, because a "no" there would have ended the whole idea.

So packages still install, still register shell commands, still update independently of the OS. They are compiled ahead of time instead of shipped as source.

Existing packages will need rebuilding. A .py package cannot run on a machine with no Python on it. Support for running Python apps under v2 is wanted and is being looked at, but it is not promised and it is not what v2.0 will ship with.

What happens to v1.0

It stays. v1.0 is the current stable release, it is what the installer gives you, and it is what update online moves you to. It will keep working on the devices it works on today.

What ends is new feature development on the MicroPython line. The v1 source is not going anywhere — it is archived and readable, and the packages in the repository continue to work with it.

Where it stands

Further along than "planned". Working today, tested on the host and building for both the RP2350 and the RP2040:

Still to come: the package repository, the rest of the command set (ping, ntp, wget, the editor), OTA updates, USB HID, and the Nova D1 port. The roadmap tracks it.

When

When it is genuinely better than v1.0, and not before. Shipping a rewrite that is merely equivalent would be asking people to take a risk for nothing.

If you want to follow along or argue with any of this, the Discord is the place.