# General Guidelines

The Smart Multibox uses [Micropython](https://www.micropython.org) as its scripting language. General information can be found on the [Micropython website](https://www.micropython.org). Most reference materials that cover Python 3 will also apply.

As of this writing, the Smart Multibox uses Micropython 1.24.1

The Micropython build is fairly minimal, most optional features have not been included, for example, file I/O and threads. In addition to the minimal Micropython configuration, these are the optional features that *have* been included:

- bytearrays
- floating point math
- The **array** module
- The **collections** module *(deque and namedtuple types)*
- The **micropython** module
- The **random** module
- The **struct** module

This section will explain the extensions that have been added to Micropython for the sending, receiving and manipulation of MIDI messages.

#### Callback Driven Operation

The Smart Multibox is designed to primarily use callback functions. User code should not implement loops that run for a long time or infinitely. Doing so will prevent the Smart Multibox from operating properly. Callbacks are available for a number of events, including incoming MIDI messages, button presses and timer ticks. See the [Callbacks](https://docs.rjmmusic.com/books/smart-multibox-programming-guide/page/callbacks "Callbacks") section for more details.