A lightweight asynchronous HTTP server for MicroPython, designed to run on resource-constrained IoT devices like ESP8266/ESP32.
TinyWeb is a lightweight, asynchronous HTTP server designed specifically for MicroPython, enabling web server capabilities on resource-constrained IoT devices like ESP8266 and ESP32. It solves the problem of adding web-based control and monitoring interfaces to embedded systems without overwhelming limited hardware resources. The server provides a simple API for handling HTTP requests and serving static content, making it accessible for IoT developers.
IoT developers and hobbyists working with MicroPython on devices such as ESP8266, ESP32, or other microcontrollers who need to add a web server for device configuration, data visualization, or remote control.
Developers choose TinyWeb for its minimal memory usage and asynchronous design, which are critical for microcontrollers. It offers a familiar Flask-like API, making it easy to adopt, and is specifically optimized for the constraints of embedded systems, unlike general-purpose web servers.
Simple and lightweight HTTP async server for micropython
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides a decorator-based routing system inspired by Flask, making it easy for Python developers to define endpoints quickly, as shown in the hello world example.
Optimized to run on devices with as little as 64K RAM, explicitly mentioned in the features, allowing room for other application logic on constrained hardware.
Built on uasyncio for non-blocking I/O, enabling efficient concurrent connections on single-threaded microcontrollers, per the README's emphasis on async operation.
Includes resource-based routing for RESTful APIs with methods like GET, POST, PUT, and DELETE, demonstrated in the resource class examples.
Supports serving static content directly from the filesystem with auto-detected MIME types, useful for hosting web interfaces on devices.
Only supports HTTP/1.0 (with partial HTTP/1.1 for REST), as admitted in the limitations section, which restricts compatibility with modern web standards.
Uses binary strings in the request class (e.g., b'GET'), requiring careful coding and extra conversions, increasing the risk of bugs in string operations.
Requires flashing custom firmware with esptool, erasing all device data—a non-trivial setup compared to simple pip installs, as detailed in the installation steps.
Default settings like max_body_size of 1024 bytes and low max_concurrency (3 for ESP8266) severely limit the scope of applications, forcing trade-offs in functionality.