ESP8266_RTOS_SDK: FreeRTOS on the ESP8266, Without the Arduino Layer
Latest ESP8266 SDK based on FreeRTOS, esp-idf style.
At a glance
- What is it?
- Espressif's ESP8266_RTOS_SDK puts a FreeRTOS kernel and an esp-idf-style build system on the ESP8266. It is the right choice when the Arduino core's abstractions get in the way, and the wrong one when you want a maintained upstream.
- Who is it for?
- Adopt ESP8266_RTOS_SDK when you have an existing ESP8266 design that needs FreeRTOS tasks, lwIP and mbedTLS under your own control, and you are willing to pin the v8.4.0 toolchain and a release branch. Do not adopt it for new hardware; Espressif's own roadmap says the framework is outdated and points migration at esp-idf, and the newest release, v3.4, dates from 2021-04-08.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 84 days ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 27, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What the ESP8266_RTOS_SDK solves, and who it is for
The ESP8266 ships with a single-core Tensilica L106 and a small amount of RAM. Espressif's original SDK for it was a non-OS affair, and the popular Arduino core wraps that in a simplified API. ESP8266_RTOS_SDK takes a third path: it puts FreeRTOS underneath the Wi-Fi stack and exposes an esp-idf-style project layout on top. The README describes it as the "Latest ESP8266 SDK based on FreeRTOS, esp-idf style."
That matters for a specific kind of developer. If you need concurrent tasks with priorities, a real TCP/IP stack (lwIP is listed among the updated third-party libraries), TLS through mbedTLS, and a build that behaves like the ESP32 toolchain you already know, this SDK gives you those without the Arduino layer in between. The repository layout confirms the intent: components/, Kconfig, CMakeLists.txt, sdkconfig.rename and an export.sh sit at the top level, the same furniture you find in an esp-idf tree.
It is not for someone who wants the shortest path to a blinking LED. The README's own getting-started path runs through a cross toolchain download, an environment variable, menuconfig and make. That is a deliberate trade: more control, more setup.
FreeRTOS tasks, lwIP and the esp-idf-style build
The mechanism is a component tree. Application code lives in a project directory with its own component, and the SDK supplies the rest from components/ inside the checkout. Configuration is generated by Kconfig through make menuconfig into sdkconfig, which the build reads back. Nothing about that is unusual if you have used esp-idf; the difference is that the target underneath is the ESP8266 rather than the ESP32.
The README is explicit about why this exists as a separate line of work. The roadmap states that the ESP8266_RTOS_SDK framework is "quite outdated and different from the current esp-idf" and that Espressif plans to migrate it to esp-idf eventually after v2.0.0. The v3.0 work was the work-around: it shares the esp-idf framework because, as the README puts it, multi-CPU architecture is not supported by esp-idf at the time. So the esp-idf style here is a compatibility gesture rather than a claim that the two trees are interchangeable.
One structural detail worth internalising: the repository uses a master branch for integration and release branches named like release/v2.x.x for production work. The README says plainly that production-related work should be tracked with the release branches. If you build from master and something breaks, you have opted into the integration branch by choice.
Installing the toolchain and building hello_world
The README pins toolchain v8.4.0 for SDK 3.0 and later, with separate archives for Windows, Mac and 32-bit or 64-bit Linux. Older SDKs (below 3.0) need toolchain v4.8.5 instead, which is a different download entirely. Get that wrong and the build fails in ways that look like source errors.
With the toolchain on your PATH, clone the SDK and point IDF_PATH at it. The README's example clones into ~/esp and exports the variable by hand, noting that you can also define IDF_PATH in your user profile so it survives a restart.
cd ~/esp
git clone https://github.com/espressif/ESP8266_RTOS_SDK.git
export IDF_PATH=~/esp/ESP8266_RTOS_SDKThe SDK ships examples, and the README starts with examples/get-started/hello_world. Move into it and run menuconfig, then set the serial port under Serial flasher config > Default serial port. On Windows the port looks like COM1; on macOS it starts with /dev/cu.; on Linux it starts with /dev/tty.
cd ~/esp/ESP8266_RTOS_SDK/examples/get-started/hello_world
make menuconfigBuild, flash and watch the output. The README notes that make flash rebuilds whatever needs rebuilding, so you do not have to run make all first, and that make flash monitor does both in one pass. Exit the monitor with Ctrl-].
make flash monitorAfter the first flash, make app and make app-flash build and flash only the application, skipping the bootloader and init data bin. The README recommends those two once the initial flash is done. The Kconfig option names, the port prefixes and the target names above are copied from the README; the repository's requirements.txt lists the Python side (click, pyserial, future, cryptography, pyparsing, pyelftools) that the tooling expects.
Where the ESP8266_RTOS_SDK stops being the right tool
The clearest limitation is stated by the project itself. The roadmap calls the framework outdated relative to esp-idf and frames the v3.0 rewrite as a work-around, not a destination. If you are choosing a platform for a product with a five-year horizon, that sentence should carry more weight than any feature list.
The release cadence reinforces it. The newest release listed is v3.4 from 2021-04-08, preceded by v3.4-rc in February 2021 and v3.3 in June 2020. The repository's last push is 2026-07-08, so the tree is not frozen, but the gap between the last tagged release and that push means master carries work that is not in a release. Building production firmware from master means you are the one testing it.
There is also a hardware ceiling. The ESP8266 has a single core and limited RAM, so the FreeRTOS scheduling you gain is cooperative with what the Wi-Fi stack needs. The README's own note that multi-CPU architecture is not supported by esp-idf is about why the SDK exists in this shape, not a promise that the ESP8266 gains capability it lacks. If your design needs a second core, dual-band radio or a larger heap, the ESP8266 is the wrong chip and this SDK cannot fix that.
Finally, the documentation links point at Read the Docs and at esp-idf pages for the monitor tool. The README does not document rollback, and it does not describe a supported downgrade path between releases.
ESP8266_RTOS_SDK against the non-OS SDK and the Arduino core
The alternative most people weigh is the ESP8266 non-OS SDK. That one has no RTOS underneath: you write a callback-driven application and the Wi-Fi stack owns the scheduling. It is smaller and it has less machinery between your code and the radio, which is why it remains common in firmware that does one thing. The difference in approach is not cosmetic. With the non-OS SDK you structure around callbacks and yield points; with ESP8266_RTOS_SDK you create tasks and let FreeRTOS decide. If your application logic is naturally sequential and blocking, the RTOS version costs you stack per task and buys you little.
The Arduino core is the other alternative, and it is the one most tutorials assume. It hides the SDK behind a simplified API and a large ecosystem of libraries. The trade is control: you get less say over lwIP configuration, TLS settings and memory layout. ESP8266_RTOS_SDK exposes those through Kconfig and component configuration. If you have ever needed to change an lwIP option and found no supported way to do it from the Arduino layer, that is the gap this SDK fills.
There is also esp-idf itself. For a new design, Espressif's roadmap points there for the ESP8266 eventually, and esp-idf is the supported framework for the ESP32 family today. Choosing ESP8266_RTOS_SDK means accepting a framework the vendor describes as a work-around.
Licence, maintenance and what an upgrade actually costs
The SDK is Apache-2.0. That is a permissive licence, and it is the same identifier used across Espressif's SDK work. The repository carries a LICENSE file at the top level and separate SUPPORT_POLICY_CN.md and SUPPORT_POLICY_EN.md documents, so the support terms are stated rather than implied. Read those two files before you plan a product around the release branches; this article is not legal advice, and the support policy is the document that governs what Espressif commits to.
Upgrade cost is where the branching model bites. Because release branches are maintained separately and hot fixes land as release/v2.x.x-style branches, moving between major versions is not a merge. The README's own note that SDKs below 3.0 need a different toolchain (v4.8.5 rather than v8.4.0) shows the scale of a cross-version move: new compiler, new libraries, new framework shape. Budget for a rebuild-and-retest cycle, not a version bump in a manifest.
Within a release branch, the picture is calmer. make app-flash rebuilds only the application, so day-to-day iteration does not touch the bootloader or init data bin. That is the cheap path. The expensive path is the one the roadmap describes, where the framework eventually converges on esp-idf.
Editorial conclusion
Adopt ESP8266_RTOS_SDK when you have an existing ESP8266 design that needs FreeRTOS tasks, lwIP and mbedTLS under your own control, and you are willing to pin the v8.4.0 toolchain and a release branch. Do not adopt it for new hardware; Espressif's own roadmap says the framework is outdated and points migration at esp-idf, and the newest release, v3.4, dates from 2021-04-08. Before committing, verify that the release branch you pick still builds with the toolchain you download and that your board's flash layout matches the make flash defaults.
Frequently asked questions
Is the ESP8266 discontinued?
The repository does not say the chip is discontinued. What the README does say is that the ESP8266_RTOS_SDK framework is outdated and that Espressif plans to migrate it to esp-idf eventually, with v3.0 as a work-around in the meantime. The newest release listed is v3.4 from 2021-04-08.
Is there an IDE available to program the ESP8266 with ESP8266_RTOS_SDK?
The README describes a command-line workflow: a cross toolchain, IDF_PATH, make menuconfig, make flash and make monitor. It does not document an IDE. The repository does carry a .gitlab-ci.yml and a .github directory, but those are for the project's own automation, not an editor integration.
How much RAM is in the ESP8266?
The README does not state a RAM figure. It does note that esp-idf does not support multi-CPU architecture at the time, which is why ESP8266_RTOS_SDK v3.0 exists as a separate framework rather than a port. For memory specifics, the SDK's own documentation is the place to look.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/espressif-esp8266-rtos-sdk)