A standalone, event-driven TCP/IP stack for bare-metal, real-time systems written in Rust.
smoltcp is a standalone TCP/IP networking stack implemented in Rust for bare-metal and real-time systems. It provides a complete networking implementation without requiring an operating system or heap allocation, solving the problem of adding network connectivity to resource-constrained embedded devices. The stack supports Ethernet, IPv4, IPv6, TCP, UDP, and ICMP protocols with a focus on simplicity and reliability.
Embedded systems developers working on IoT devices, real-time systems, and bare-metal applications that require network connectivity without the overhead of a full operating system. Rust developers building networking infrastructure for constrained environments.
Developers choose smoltcp because it's one of the few production-ready TCP/IP stacks written in Rust with zero heap allocation, making it ideal for safety-critical and resource-constrained applications. Its clean design, extensive documentation, and focus on robustness differentiate it from heavier alternatives like lwIP.
a smol tcp/ip stack
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Uses only stack memory with zero dynamic allocation, critical for resource-constrained embedded systems, as emphasized in the no-std design and feature list.
Runs without an operating system, ideal for IoT and real-time applications, confirmed by its design for bare-metal, no-OS environments.
Supports IPv4, IPv6, TCP, UDP, and 6LoWPAN with full dual-stack implementation, detailed in the IP and transport layer sections of the README.
Achieves Gbps throughput in loopback tests against Linux TCP stack, demonstrated in the benchmark.rs example with real-world results.
Lacks selective acknowledgements, PLPMTU, and timestamping, which are important for TCP efficiency, as admitted in the TCP layer omissions list.
Hosted usage examples currently only work on Linux, limiting cross-platform testing, stated in the 'Hosted usage examples' section.
Requires manual configuration of tap interfaces and routing for testing, which is tedious compared to higher-level libraries, as shown in the installation steps.