Toit is a modern high-level language designed specifically for microcontrollers

Toit is optimised for live reloading on your microcontroller. Your code runs incrementally as you write it and you get instant feedback. Push changes over your local WiFi in two seconds and reserve your USB cable for charging your phone. You iterate quickly, learn fast, and build better things.

Hello, world!

Everyone likes to start with a simple program, so here is the obligatory "Hello, world!" program in Toit. Define your main function by writing its name, followed by a colon. The body of the function is indented by two spaces. The "print" function takes one argument - you don't need parentheses.

Learn more...
main:
  print "Hello, World!"

Toit + Jaguar = 🥳

Jaguar is a small application developed by the Toit team, that runs on your ESP32. It enables live reloading and lets you update and restart your ESP32 code over WiFi.

Wireless

Update your code and restart your ESP32 conveniently over WiFi. No need to flash over serial, reboot your device, or wait for it to reconnect to your network.

Efficient

Change your code in your editor, update it on your device, and restart it all within seconds.

Reliable

Updates contain compiled Toit programs that are relocated and installed in flash on the device. Old versions are stopped and their resources are freed automatically.

No ESP32?

The Toit language can also be used on the desktop. In fact, we use it to develop many of the tools that come with the SDK.

Get started

Follow this easy step-by-step guide to get up and running with Toit.

Download

Download and get started with the latest version of Toit.

Documentation

Learn how to code with Toit and how you can use it in your IoT projects.

Latest news

Toit v2.0.0-alpha.163 release

Update package dependencies.

Get it!

Toit v2.0.0-alpha.162 release

Optimize YAML parser helper functions to use less stack. Update to use the latest version of the CLI package.

Get it!

Toit v2.0.0-alpha.161 release

Add more commands to the 'toit' executable. Sign macOS release and include ARM executables for macOS. Enable asserts by default for -O0 and -O1 and add flag. Infer literal types. Warn when conditions are always true due to nullables. Check type when assigning to typed globals. Add cryptographic random. Use '--initial' for List and ByteArray constructors. Move UUID functions into class. Add support for generating random UUIDs. Add static typing for data-bytes of UUIDs. Add Duration.parse. Expose True and False and use it for flags that must be true. Add work-around for spurious first byte on the UART. Use correct network for DNS requests. Make wifi state management more robust. Improve and expose SPI devices for Linux. Don't timeout early if there is a sleep. Fix esptool lookup for 'toit tool firmware'. Fix I2C timeout. Fix RMT regression. Fix BLE on macOS. Fix UART flush.

Get it!

Toit v2.0.0-alpha.160 release

Use correct network for DNS requests. Fix RMT regression. Fix BLE on macOS. Fix UART flush.

Get it!

Toit v2.0.0-alpha.159 release

Improve error message for duplicated named arguments. Fix pins for ESP32S2 and ESP32C3.

Get it!

Toit v2.0.0-alpha.158 release

Strip trailing padding from encoded config ubjson.

Get it!

Writing a driver in Toit

Just a few lines of Toit code are needed to reap the full benefits of the Toit ecosystem — without having to rely on firmware developers.

Choosing Toit for your IoT project means that your ESP32-based devices become as easy to program as smartphones: develop your app, deploy it to the devices of your choice, and then update and reinstall as often as needed, even on a shaky connection — all that while the other apps on the device keep running. Welcome to the 21st century, IoT!

Visit blog.toit.io to Read more

Toit meets Visual Studio Code

The extension allows VSCode to provide a rich view of your programs as well as easy access to common functionality like running and deploying apps.

Visit blog.toit.io to Read more