smol is a small and fast async runtime for Rust that re-exports a collection of smaller, focused async crates rather than implementing everything monolithically.
The project addresses the need for a lightweight async runtime by composing specialized subcrates that handle distinct concerns: async-executor provides composable executors, async-io wraps I/O types and timers, async-fs offers filesystem primitives, async-net handles networking, async-lock provides synchronization primitives, async-channel implements message passing, and async-process manages subprocess interaction. This modular approach allows developers to use only what they need while maintaining fast compilation and small binary footprints. The tool also includes futures-lite as a lighter alternative to the standard futures crate and polling as a portable abstraction over platform-specific I/O multiplexing mechanisms.
Developers should choose smol if they prioritize minimal dependencies, fast compile times, and a composable architecture over a monolithic runtime. It suits projects where lightweight async support matters more than ecosystem integration with tokio-specific libraries. For code that needs to interoperate with tokio-based libraries, the project documents the async-compat adapter as a bridge. The README also mentions smol-macros for developers who want convenient proc-macro-free setup of async main functions and multi-threaded executors.
The project maintains active development across its subcrate ecosystem, with regular updates to core components like async-executor, async-io, and async-lock. Development activity shows consistent attention to platform support and I/O abstraction improvements. The maintainers enforce a clear minimum supported Rust version policy tied to Debian Stable availability, ensuring predictable compatibility guarantees for users.