CircuitPython is an education friendly open source derivative of
MicroPython. CircuitPython supports use
on educational development boards designed and sold by
Adafruit. Adafruit CircuitPython features
unified Python core APIs and a growing list of Adafruit libraries and
drivers of that work with it.

See
CONTRIBUTING.md
for full guidelines but please be aware that by contributing to this
project you are agreeing to the Code of
Conduct.
Contributors who follow the Code of
Conduct
are welcome to submit pull requests and they will be promptly reviewed
by project admins. Please join the
Discord too.

includes a ports for MicroChip SAMD21 (Commonly known as M0 in Adafruit
product names) and SAMD51 (M4).

supports only SAMD21, SAMD51, and ESP8266 ports. An nRF port is under
development.

tracks MicroPython’s releases (not master).

Longints (arbitrary-length integers) are enabled for most M0
Express boards (those boards with SPI flash chips external
to the microcontroller), and for all M4 builds.
Longints are disabled on other boards due to lack of flash space.

The order that files are run and the state that is shared between
them. CircuitPython’s goal is to clarify the role of each file and
make each file independent from each other.

boot.py (or settings.py) runs only once on start up before
USB is initialized. This lays the ground work for configuring USB at
startup rather than it being fixed. Since serial is not available,
output is written to boot_out.txt.

code.py (or main.py) is run after every reload until it
finishes or is interrupted. After it is done running, the vm and
hardware is reinitialized. This means you cannot read state from
``code.py`` in the REPL anymore. CircuitPython’s goal for this
change includes reduce confusion about pins and memory being used.

After code.py the REPL can be entered by pressing any key. It no
longer shares state with code.py so it is a fresh vm.

Autoreload state will be maintained across reload.

Adds a safe mode that does not run user code after a hard crash or
brown out. The hope is that this will make it easier to fix code that
causes nasty crashes by making it available through mass storage
after the crash. A reset (the button) is needed after its fixed to
get back into normal mode.