#stack #vec #no-std

no-std smallvec

'Small vector' optimization: store up to a small number of items on the stack

56 releases (24 stable)

2.0.0-alpha.12 Nov 16, 2025
2.0.0-alpha.11 Mar 20, 2025
2.0.0-alpha.10 Jan 15, 2025
2.0.0-alpha.9 Dec 17, 2024
0.1.5 Jun 30, 2015

#5 in Data structures

Download history 7048180/week @ 2025-10-24 6858575/week @ 2025-10-31 6999263/week @ 2025-11-07 7263803/week @ 2025-11-14 6686599/week @ 2025-11-21 6692751/week @ 2025-11-28 7984062/week @ 2025-12-05 8252227/week @ 2025-12-12 5688968/week @ 2025-12-19 4213669/week @ 2025-12-26 6973963/week @ 2026-01-02 8898822/week @ 2026-01-09 8772276/week @ 2026-01-16 9487375/week @ 2026-01-23 9773225/week @ 2026-01-30 10555591/week @ 2026-02-06

40,267,924 downloads per month
Used in 82,476 crates (2,563 directly)

MIT/Apache

130KB
3K SLoC

rust-smallvec

⚠️ Note: This is the code for smallvec 2.0, which is not yet ready for release. For details about the changes in version 2.0, please see #183, #240, and #284.

The source code for the latest smallvec 1.x.y release can be found on the v1 branch. Bug fixes for smallvec 1 should be based on that branch, while new feature development should go on the v2 branch.

About smallvec

Documentation

Release notes

"Small vector" optimization for Rust: store up to a small number of items on the stack

Example

use smallvec::{SmallVec, smallvec};
    
// This SmallVec can hold up to 4 items on the stack:
let mut v: SmallVec<i32, 4> = smallvec![1, 2, 3, 4];

// It will automatically move its contents to the heap if
// contains more than four items:
v.push(5);

// SmallVec points to a slice, so you can use normal slice
// indexing and other methods to access its contents:
v[0] = v[1] + v[2];
v.sort();

Dependencies

~175KB