# egui_virtual_list
[](https://github.com/emilk/egui)
[](https://crates.io/crates/egui_virtual_list)
[](https://docs.rs/egui_virtual_list)
[](https://github.com/rust-secure-code/safety-dance/)
[](https://crates.io/crates/egui_virtual_list)
[content]:<>
This crate adds a virtual list widget to [egui](https://github.com/emilk/egui).
Egui has a basic build in virtual list in the
[ScrollArea](https://docs.rs/egui/0.25.0/egui/containers/scroll_area/struct.ScrollArea.html#method.show_rows) widget.
This crate has some extra features though:
- Supports items with varying heights
- Heights are calculated lazily and cached, as you scroll further down the list
- Supports custom layouts, so you could place multiple items in a single row
- Check the [Gallery Example](https://lucasmerlin.github.io/hello_egui/)
- Allows for adding items at the top without the scroll position changing
- Check the [Chat Example](https://lucasmerlin.github.io/hello_egui/)
There are some limitations though:
- If you want to support a crazy amounts of items (1000000+ items), where you can instantly jump anywhere in the list,
I recommend using egui's built in ScrollArea instead.
- Horizontal scrolling is not supported yet, but it should be easy to add if needed.
If you want to build a infinite scroll list, I recommend using
the [egui_infinite_scroll](https://crates.io/crates/egui_infinite_scroll) crate instead, which
is using this crate internally.