SolarOS is a small ESP32 operating environment for pocket terminals, reflective displays, serial consoles, and low-power embedded tools. It provides a shell, foreground applications, background jobs, storage, networking, hardware services, Python, and Lua.
The SolarOS User Manual is the canonical source for:
help tree and man;It contains the complete command, application, job, board, expansion, Python,
Lua, package, and workflow documentation. Edit the topic in doc/manual/;
do not maintain a separate device or website copy.
SolarOS uses PlatformIO with ESP-IDF through the pioarduino Espressif32 platform:
pio run -e solar_term
pio run -e freenove_esp32_s3_display_4_0
pio run -e cl_32
pio run -e t_lora_pager
pio run -e t_deck_plus
pio run -e waveshare_esp32_s3_sim7670g_4g
pio run -e elecrow_crowpanel_esp32_s3_4_2_epaper
pio run -e odroid_go
pio run -e freenove_esp32_wrover_v3
pio run -e esp32_devkitc_v4_wrover
pio run -e ttgo_vga32_v14
pio run -e esp32_s3_devkitc1_n16r8
pio run -t upload
pio device monitor -b 115200
The default build uses the full firmware flavor, except the 4 MB VGA32 target,
which defaults to rover. For a smaller image or an explicit override:
SOLAR_OS_FLAVOR=core pio run -e solar_term
SOLAR_OS_FLAVOR=writerdeck pio run -e elecrow_crowpanel_esp32_s3_4_2_epaper
SOLAR_OS_VGA_MODE=320x200 pio run -e ttgo_vga32_v14
SOLAR_OS_VGA_MODE=320x240 pio run -e ttgo_vga32_v14
For an interactive board, update-layout, group, build, and flash workflow, run:
python3 scripts/os_builder.py
The VGA32 target supports build-time 640x480 (default), 640x400, 320x240,
and 320x200 VGA modes through SOLAR_OS_VGA_MODE.
See Boards and hardware targets and Firmware packages and flavors for the complete build and target reference.
PlatformIO builds from one checkout are serialized on POSIX hosts to protect shared ESP-IDF component state. Windows prints a warning because POSIX file locking is unavailable; do not run concurrent builds from the same checkout.
SolarOS follows the principle "Everything you need. Nothing you don't." Changes to the upstream firmware must elevate the supported hardware and provide clear value to SolarOS users in general. A feature existing in a personal fork does not by itself make that feature a candidate for the upstream firmware.
Keep each pull request focused on one feature and base it on the current upstream branch. Acceptance is decided case by case; contributors should discuss large native applications, new boards, and expansion drivers before investing in a substantial implementation.

src/apps/ foreground applications
src/jobs/ background job implementations
src/services/ shared OS services and runtime policy
src/shell/ shell command implementations
src/drivers/ low-level hardware drivers
boards/ TOML board profiles and expansion-driver catalog
scripts/ board-profile generation and desktop configuration tools
packages/ package and flavor catalog
doc/manual/ canonical user manual for GitHub, device, agent, and website
doc/ developer contracts and documentation-system design
SolarOS is licensed under the Apache License 2.0. It also includes the third-party software below under each project's own license. Copyright, attribution, patent, and license notices supplied with these components remain applicable and must be preserved in redistributions.
| Component | Used for | License and attribution |
|---|---|---|
| Lua 5.4.8 | Embedded Lua VM and selected standard libraries | MIT; copyright Lua.org, PUC-Rio. The upstream notice is retained in lua.h. |
MicroPython d901e98349 | Embedded Python runtime | MIT; Damien P. George and MicroPython contributors. Notices are retained in the vendored source files. |
| ESP-DSP 1.8.x | ESP32-S3 PIE-accelerated DSP kernels | Apache-2.0; Espressif Systems and contributors. The managed component includes the upstream LICENSE and notice metadata. |
PicoTTS bf1a8df | Offline speech synthesis with runtime-loaded voices | Apache-2.0; DiUS Computing, SVOX AG, and contributors. See the retained NOTICE. |
minimp3 ca7c706 | MP3 decoding | CC0-1.0. The pinned header history credits lieff, Jörn Heusipp, Alibek Omarov, Chris Robinson, Darryl T. Agostinelli, David Reid, Martin Fiedler, and Matthijs van Duin. |
stb_image 2.30 (013ac3b) | PNG, JPEG, GIF, and other image decoding | MIT or public domain/Unlicense. The detailed upstream contributor and feature credits are retained in stb_image.h. |
U8g2 e4a5822 | Monochrome graphics, text rendering, and selected display drivers | BSD-2-Clause; olikraus and contributors. See the retained LICENSE, including its separate font notices. |
libwebp 3757b8a | WebP decoding | BSD-3-Clause; Google and contributors. See the retained AUTHORS, COPYING, and PATENTS. |
MeshCore 03b6ef4 | Mesh packet, identity, contact, channel, and chat protocol subset | Separate notices are retained for MeshCore, rweather/Crypto, and Ed25519. See the provenance and notice index. |
Peanut-GB 8e65698 | Game Boy emulation and minigb_apu audio | MIT; Mahyar Koshkouei, Alex Baines, and contributors. See the retained provenance and notices. |
The SolarOS ports and local adaptations of minimp3, stb_image, U8g2, and libwebp were integrated by nilseuropa.
C
94.3%
C++
2.5%
Python
2.4%
SolarOS is a small ESP32 operating environment for pocket terminals, reflective displays, serial consoles, and low-power embedded tools. It provides a shell, foreground applications, background jobs, storage, networking, hardware services, Python, and Lua.
The SolarOS User Manual is the canonical source for:
help tree and man;It contains the complete command, application, job, board, expansion, Python,
Lua, package, and workflow documentation. Edit the topic in doc/manual/;
do not maintain a separate device or website copy.
SolarOS uses PlatformIO with ESP-IDF through the pioarduino Espressif32 platform:
pio run -e solar_term
pio run -e freenove_esp32_s3_display_4_0
pio run -e cl_32
pio run -e t_lora_pager
pio run -e t_deck_plus
pio run -e waveshare_esp32_s3_sim7670g_4g
pio run -e elecrow_crowpanel_esp32_s3_4_2_epaper
pio run -e odroid_go
pio run -e freenove_esp32_wrover_v3
pio run -e esp32_devkitc_v4_wrover
pio run -e ttgo_vga32_v14
pio run -e esp32_s3_devkitc1_n16r8
pio run -t upload
pio device monitor -b 115200
The default build uses the full firmware flavor, except the 4 MB VGA32 target,
which defaults to rover. For a smaller image or an explicit override:
SOLAR_OS_FLAVOR=core pio run -e solar_term
SOLAR_OS_FLAVOR=writerdeck pio run -e elecrow_crowpanel_esp32_s3_4_2_epaper
SOLAR_OS_VGA_MODE=320x200 pio run -e ttgo_vga32_v14
SOLAR_OS_VGA_MODE=320x240 pio run -e ttgo_vga32_v14
For an interactive board, update-layout, group, build, and flash workflow, run:
python3 scripts/os_builder.py
The VGA32 target supports build-time 640x480 (default), 640x400, 320x240,
and 320x200 VGA modes through SOLAR_OS_VGA_MODE.
See Boards and hardware targets and Firmware packages and flavors for the complete build and target reference.
PlatformIO builds from one checkout are serialized on POSIX hosts to protect shared ESP-IDF component state. Windows prints a warning because POSIX file locking is unavailable; do not run concurrent builds from the same checkout.
SolarOS follows the principle "Everything you need. Nothing you don't." Changes to the upstream firmware must elevate the supported hardware and provide clear value to SolarOS users in general. A feature existing in a personal fork does not by itself make that feature a candidate for the upstream firmware.
Keep each pull request focused on one feature and base it on the current upstream branch. Acceptance is decided case by case; contributors should discuss large native applications, new boards, and expansion drivers before investing in a substantial implementation.

src/apps/ foreground applications
src/jobs/ background job implementations
src/services/ shared OS services and runtime policy
src/shell/ shell command implementations
src/drivers/ low-level hardware drivers
boards/ TOML board profiles and expansion-driver catalog
scripts/ board-profile generation and desktop configuration tools
packages/ package and flavor catalog
doc/manual/ canonical user manual for GitHub, device, agent, and website
doc/ developer contracts and documentation-system design
SolarOS is licensed under the Apache License 2.0. It also includes the third-party software below under each project's own license. Copyright, attribution, patent, and license notices supplied with these components remain applicable and must be preserved in redistributions.
| Component | Used for | License and attribution |
|---|---|---|
| Lua 5.4.8 | Embedded Lua VM and selected standard libraries | MIT; copyright Lua.org, PUC-Rio. The upstream notice is retained in lua.h. |
MicroPython d901e98349 | Embedded Python runtime | MIT; Damien P. George and MicroPython contributors. Notices are retained in the vendored source files. |
| ESP-DSP 1.8.x | ESP32-S3 PIE-accelerated DSP kernels | Apache-2.0; Espressif Systems and contributors. The managed component includes the upstream LICENSE and notice metadata. |
PicoTTS bf1a8df | Offline speech synthesis with runtime-loaded voices | Apache-2.0; DiUS Computing, SVOX AG, and contributors. See the retained NOTICE. |
minimp3 ca7c706 | MP3 decoding | CC0-1.0. The pinned header history credits lieff, Jörn Heusipp, Alibek Omarov, Chris Robinson, Darryl T. Agostinelli, David Reid, Martin Fiedler, and Matthijs van Duin. |
stb_image 2.30 (013ac3b) | PNG, JPEG, GIF, and other image decoding | MIT or public domain/Unlicense. The detailed upstream contributor and feature credits are retained in stb_image.h. |
U8g2 e4a5822 | Monochrome graphics, text rendering, and selected display drivers | BSD-2-Clause; olikraus and contributors. See the retained LICENSE, including its separate font notices. |
libwebp 3757b8a | WebP decoding | BSD-3-Clause; Google and contributors. See the retained AUTHORS, COPYING, and PATENTS. |
MeshCore 03b6ef4 | Mesh packet, identity, contact, channel, and chat protocol subset | Separate notices are retained for MeshCore, rweather/Crypto, and Ed25519. See the provenance and notice index. |
Peanut-GB 8e65698 | Game Boy emulation and minigb_apu audio | MIT; Mahyar Koshkouei, Alex Baines, and contributors. See the retained provenance and notices. |
The SolarOS ports and local adaptations of minimp3, stb_image, U8g2, and libwebp were integrated by nilseuropa.
C
94.3%
C++
2.5%
Python
2.4%