30 releases

Uses new Rust 2024

0.3.5 Jan 8, 2026
0.3.4 Oct 23, 2025
0.3.2 Oct 23, 2024
0.2.2 May 14, 2024
0.1.7 Oct 13, 2018

#47 in Rust patterns

Download history 737917/week @ 2025-10-23 727790/week @ 2025-10-30 722915/week @ 2025-11-06 715986/week @ 2025-11-13 803519/week @ 2025-11-20 709530/week @ 2025-11-27 815939/week @ 2025-12-04 802001/week @ 2025-12-11 671246/week @ 2025-12-18 512440/week @ 2025-12-25 643449/week @ 2026-01-01 862574/week @ 2026-01-08 864946/week @ 2026-01-15 988323/week @ 2026-01-22 1062676/week @ 2026-01-29 1205712/week @ 2026-02-05

4,288,385 downloads per month
Used in 4,886 crates (378 directly)

MIT/Apache

45KB
947 lines

smol_str

CI Crates.io API reference

A SmolStr is a string type that has the following properties:

  • size_of::<SmolStr>() == 24 (therefore == size_of::<String>() on 64 bit platforms)
  • Clone is O(1)
  • Strings are stack-allocated if they are:
    • Up to 23 bytes long
    • Longer than 23 bytes, but substrings of WS (see src/lib.rs). Such strings consist solely of consecutive newlines, followed by consecutive spaces
  • If a string does not satisfy the aforementioned conditions, it is heap-allocated
  • Additionally, a SmolStr can be explicitly created from a &'static str without allocation

Unlike String, however, SmolStr is immutable. The primary use case for SmolStr is a good enough default storage for tokens of typical programming languages. Strings consisting of a series of newlines, followed by a series of whitespace are a typical pattern in computer programs because of indentation. Note that a specialized interner might be a better solution for some use cases.

Benchmarks

Run criterion benches with

cargo bench --bench \* -- --quick

MSRV Policy

Minimal Supported Rust Version: latest stable.

Bumping MSRV is not considered a semver-breaking change.

Dependencies

~180KB