This repository contains the source for the MicroBlocks
virtual machine.

MicroBlocks is a free, live, blocks programming system
for educators, learners, and makers. It runs on the BBC
micro:bit, the NodeMCU, ARM-based Arudino boards, and
other tiny computers such as the Raspberry Pi.

The MicroBlock virtual machine runs on 32-bit embedded processors
with as little as 8k of RAM. It is intended to be simple,
easily ported and extended, and offer decent performance.
It includes a low-latency task scheduler that works
at timescales down to about 20 microseconds.
It will eventually include a garbage collected memory
to allow working with dynamic data structures -- within
the limits of the available RAM, of course!

MicroBlocks supports both live development and autonomous operation.
Live development allows the user to see the results of program changes
immediately, without the overhead of compiling and downloading.
Autonomous operation means that programs continue to run when the board
is untethered from the host computer. Since the board retains the user's program
in persistent Flash memory, MicroBlocks will eventually
allow the user's program stored on the board to be read back into a
MicroBlocks development environment for inspection and
further development.

Built-in data types include integers, booleans, strings, and lists.

How do I build the VM?

First of all, you may not need to. If you have a BBC micro:bit,
Calliope mini, or an AdaFruit board such as the Circuit Playground
Express that supports loading programs by drag-and-drop, you can
just drop the appropriate .hex or .uf2 file onto the virtual
disk for your board to install it.

If you have an ARM-based Arduino or other board with
Arduino IDE support, or if you just want to build
the virtual machine yourself, read on.

The MicroBlocks virtual machine is written in C and C++.
The Arduino platform is preferred, but it has also
been built using the mbed platform (no longer supported).
It can also be built for Linux-based environments such
as the Raspberry Pi, and it should be portable to other
platforms that have a C compiler with minimal effort.

The MicroBlocks virtual machine can be compiled and loaded
onto a board using the Arduino IDE (version 1.8 or later)
with the appropriate board installed and selected.
Open the file "vm.ino", select your board from the
board manager, and click the upload button.

See <a href="">supported devices</a> for a list of currently supported boards.

Building for Raspberry Pi

To build the VM on the Raspberry Pi, run "./build" in the raspberryPi folder.
The Raspberry Pi version of MicroBlocks can control the digital I/O
pins of the Raspberry Pi.

On the Raspberry Pi, MicroBlocks can be run in two ways:

Desktop: If you run ublocks-pi with the "-p" switch,
it will create a pseudoterminal, and you can connect to that pseudoterminal
from the MicroBlocks IDE running in a window on the same Raspberry Pi.

Headless: If you configure your RaspberryPi Zero(W) to behave like a slave USB-serial
device, then it can be plugged into a laptop as if it were an Arduino or micro:bit.
The MicroBlocks VM can be started on a headless Pi either by connecting
to the Pi via SSH and running ublocks-pi from the command line
or by configuring Linux to start the VM at boot time.

Building for generic Linux

To build the VM to run on a generic Linux computer, run "./build" in the linux folder.
Running the resulting executable creates a pseudoterminal that you can connect
to from the MicroBlocks IDE running on the same computer.

The generic Linux version of the VM can't control pins or other microcontroller I/O devices
(there aren't any!), but it can be used to study the virtual machine.
It's also handy for debugging, since the Linux VM can print debugging information
to stdout without interfering with the VM-IDE communications (which goes over
the pseudoterminal connection).

MicroBlocks Website


MicroBlocks is released as alpha. The released version is stable and has been used by hundreds of people, many of them complete beginners. The "alpha" status is because MicroBlocks is still evolving. If you are writing documentation, plan to update it to track changes to the blocks, libraries, and UI.


We welcome your feedback, comments, feature requests, and
bug reports.

Since MicroBlocks is still under active development by the core team, we are not currently
soliciting code contributions or pull requests. However, if you are creating tutorials or other materials for MicroBlocks, please let us know so we can link to your website.


This project is a collaboration between John Maloney, Bernat Romagosa,
and Jens Moenig.


MicroBlocks is licensed under the Mozilla Public License 2.0 (MPL 2.0).