In a nutshell
RIOT powers the Internet of Things like Linux powers the Internet. RIOT is a free, open source operating system developed by a grassroots community gathering companies, academia, and hobbyists, distributed all around the world.
Out of the box usage
RIOT enables secure IoT applications.
RIOT supports DTLS transport layer security, IEEE 802.15.4 encryption, Secure Firmware Updates (SUIT), multiple cryptographic packages, and crypto secure elements.
RIOT breaks silos.
RIOT is modular to adapt to application needs. We aim to support all common network technologies and Internet standards. RIOT is open to new developments and often an early adaptor in networking.
RIOT is free and open source.
Most of the software developed by the RIOT community is available under the terms of the GNU LGPLv2.1, published by the Free Software Foundation. This ensures an open Internet and allows for building blocks under different licenses.
Program as you are used to. Save time with common environments.
- Standard programming in C or C++
- Standard tools: gcc, gdb, valgrind
- Zero learning curve for embedded programming
- Code mostly without hardware dependence
- Code once, run on 8-bit (e.g., Arduino Mega 2560), 16-bit (e.g., MSP430), and 32-bit platforms
- Benefit from POSIX APIs
- Develop under Linux, Mac OS, or Windows
- Use the native port, deploy on embedded device when running
Benefit from a microkernel and tickless scheduling on the lower end.
- Robust runtime system
- Modular for flexible code-footprint
- Fosters energy-efficiency
- Real-time capable by limiting interrupt latency (~50 clock cycles) and priority-based scheduling
- Multi-threading with ultra-low overhead (<25 bytes per thread)
Make your applications ready for the smaller things on the Internet.
- 6LoWPAN, IPv6, RPL, UDP, TCP, QUIC
- MQTT-SN, CoAP, and CBOR
- BLE, LoRaWAN, 802.15.4, WLAN, CAN
- LwM2M client integration
- Static and dynamic memory allocation
- High resolution and long-term timers
- Tools and utilities (System shell, Crypto primitives, ...)
- Automated testing on various embedded hardware in the loop
Get in touch
On the shoulders of a grassroots community
You want to participate and contribute to the kernel development or integrate new MCU and platform support? You're welcome!
The RIOT issue tracker informs about bugs and enhancement requests. You could also subscribe to the notifications mailing list to get informed about new issues, comments, and pull requests. All commits to the source code will be posted to the commits mailing list. Take a look at our coding conventions.
Whether you are looking for help with writing an application for RIOT, learn more about it, or just want to stay in the loop, you are invited to join the RIOT Forum. We are also available on Stack Overflow.
RIOTers meet face to face at the annual RIOT Summit.
RIOT in the wild
We use RIOT in our after-market product for connected car-sharing. RIOT's modular architecture helped us a lot to address the multiple challenges we faced, to design software and networking embedded on a low-power 32-bit microcontroller. Also, RIOT is fun to tinker with, and the RIOT community is very open minded!
IoT Software Architect, Continental
In Locha Mesh, we decided to use RIOT for a variety of reasons, including an active community surrounding it, the overall design of the Operating System that's coupled with a powerful and extensible network stack, and the support for a good variety of CPUs and boards.
Jean Pierre Dudey
Embedded Software Developer, Locha Mesh
At Sapienza University of Rome, we train our computer engineer students based on RIOT to gain practical skills and knowledge about the IoT. The wide range of tools and experimentation facilities for cross-layer debugging and profiling will be valuable for them when developing, testing, and evaluating IoT applications in future professions.
Professor of Computer Engineering, Sapienza University of Rome
We chose RIOT in our products because of the excellent support of microcontrollers, boards, and peripherals. Our customers benefit from the modular architecture in RIOT, which enables easy customization.
System Engineer, SSV Embedded Software Systems
At wolfSSL we love how easy it is to integrate all the components in the RIOT ecosystem, and the large selections of IoT targets supported. The wolfSSL TLS library and the wolfCrypt cryptography engine are available as built-in RIOT modules, distributed with a GPLv2 license.
Embedded Software Engineer, wolfSSL
Frequently Asked Questions
Under what license is RIOT code released?
The license is currently LGPLv2.1
Studies such as this one show that small companies and start-ups are going to determine IoT. More than bigger companies, such small structures need to spread development and maintenance costs for the kernel and all the software that is not their core business. Our analysis is that this is more compatible with LGPL than with BSD/MIT.
We are of the opinion that, compared to BSD/MIT, LGPL will improve final user experience, security and privacy, by hindering device lock-down, favoring up-to-date, and field-upgradable code. We think this a more solid base to provide a consistent, compatible, secure-by-default standard system which developers can build upon to create trustworthy IoT applications, while not hindering business models based on closed source linked with RIOT (see the automated tools provided to help check LGPL compliance, and/or this technical guide)
Since solutions competing with RIOT are quasi-exclusively BSD/MIT, we gauge that LGPL is a way to stand out favorably, and is a characteristic backing positive comparisons of RIOT with Linux.
Last but not least, we think that (L)GPL is a better base than BSD/MIT to keep the community united in the mid and long run.
For the record: we have also considered MIT/BSD (see this thread), but there was not enthusiastic majority supporting such a switch.
How is RIOT development organized?
In short there are certain Coding Conventions to follow and we are using Github’s pull requests for code review. So for new features and fixes create a fork of the RIOT repository and open a pull request with a detailed description of your changes.
For a more in depth description check out the dedicated document on development procedures.
Also, do check out the open community processes.
What should be my first steps to get started?
The Starter Guide might be just what you are looking for.
I want to contribute. How should I proceed?
First of all, welcome to the RIOT community! There is a dedicated README on contributing listing opportunities to interact with fellow RIOT enthusiasts and some suggestions how to get started.
I have an issue with RIOT code I can't solve. How can I get help?
For critical vulnerabilities we would appreciate you to report them with a 90 day heads-up to firstname.lastname@example.org first, before making them publicly available. You may use the GPG-Key 44C6AE441172F88D3423E81F5F7964D0F4239033 to encrypt your report.
It’s a very good idea to search our forum first, maybe someone has already solved your issue! You can also create an account there, and post via the forum website, or via email to email@example.com following this guide. Another option is to log an issue in GitHub.
You’re also welcome to ask in the IRC channel #riot-os at freenode.net, but don’t be disappointed if everyone there is busy.
Does RIOT run as-is on my hardware?
Check out this page on supported hardware. If your hardware is not listed there, you’re welcome to provide a port for your hardware!
How much memory (ROM/RAM) will it need?
This depends on the board and on the application. When you compile an application for a board, the last thing printed gives each sections memory footprint and looks like this:
text data bss dec hex filename 77732 296 24272 102300 18f9c applications/sixlowapp/bin/iot-lab_M3/sixlowapp.elf
The required RAM is
data + bss, ROM is
text + data.
Please note: Usually a big portion of RAM is consumed by the stack space for threads. Although RIOT maintainers try to optimize the default values, manual tweaking may be necessary to get the most efficient results. You can check the maximum stack usage at runtime with the shell command
psor the corresponding function
thread_print_all()from the module
My terminal doesn't recognize newlines coming from RIOT over serial!
See this page.
Does RIOT support Raspberry PI?
No. From the RIOT point of view the Raspberry PI is a supercomputer. RIOT targets mostly systems that are too constrained to run Linux (less than 1MB of RAM, no MMU). However, it is supported to run RIOT native on platforms like the Raspberry PI, and other hardware supported by Linux or BSD.
A good rule of thumb concerning RIOT support of a particular board is: can Linux support this board? If yes, then you should ask yourself why you really want to use RIOT (other than native) on this board. If no, then RIOT support is probably desirable.
(Why) is there no 64 bit support, at least in native?
There is not much to be gained from 64 bit support as RIOT does not target any other platforms that offer 64 bit. That being said there are pros and cons.
- improve RIOT’s code base by fixing 64 bit related errors
- simplify toolchain setup for native
- effort / gain (as it’s unlikely we will support any other 64 bit platform, fixing potential 64 bit errors in RIOT is less beneficial)
- decreased 32 bit testing (unless we make 32 the default in which case the toolchain setup argument is diminished)
From our perspective this does not justify pulling manpower from other tasks. Nobody will stop you from adding support if you want to, though ;)
See also: https://github.com/RIOT-OS/RIOT/issues/6603
I want to cite RIOT. Which reference should I use?
Please consider the following references for citation.
- Emmanuel Baccelli, Cenk Gündoğan, Oliver Hahm, Peter Kietzmann, Martine Lenders, Hauke Petersen, Kaspar Schleiser, Thomas C. Schmidt, Matthias Wählisch, RIOT: An Open Source Operating System for Low-End Embedded Devices in the IoT, IEEE Internet of Things Journal, Vol. 5, No. 6, pp. 4428-4440, December 2018.