# tqdm Crates.io Version Crates.io Downloads Crates.io MSRV > > Instantly make your loops show a smart progress meter - just wrap any iterable with tqdm(iterable), and you're done! > Rust implementation of the popular Python command line progress bar tool [tqdm](https://github.com/tqdm/tqdm/). The name "tqdm" derives from the Arabic word taqaddum (تقدّم) which can mean "progress", and is an abbreviation for "I love you so much" in Spanish (te quiero demasiado). demo ## Quick Start Simply wrap `tqdm::tqdm()` around any [iterable](https://doc.rust-lang.org/core/iter/trait.Iterator.html): ```rust use tqdm::tqdm; for i in tqdm(0..10000) { /* Your loop logic here */ } ``` This function returns a wrapper iterator that controls multiple progress bars, advancing the meter when `next` is called. Methods on the original iterable are bypassed using the [auto-dereference](https://doc.rust-lang.org/std/ops/trait.Deref.html) trait, so they can be called with no overhead. ``` 76%|███████████████▉ | 7618/10000 [00:09<00:03, 782.14it/s] ``` ## Usage Styles and other parameters can be configured in-place: ```rust use tqdm::Style; for i in tqdm(0..100) .style(Style::Balloon) .desc(Some("some description")) { /* Your loop logic here */ } ``` ``` 47%|**********. | 4792/10000 [00:06<00:06, 783.39it/s] ``` Expose the `tqdm::Iter` trait to allow method chaining: ```rust use tqdm::Iter; for i in (0..).take(10000).tqdm() { /* Your loop logic here */ } ``` Alternatively, create a progress bar with `tqdm::pbar()` and manually update it: ```rust use tqdm::pbar; let mut pbar = pbar(Some(44850)); for i in 0..300 { pbar.update(i).unwrap(); /* Your loop logic here */ } ``` ### Advanced Usage Multi-bars are also supported! Tqdm maintains a global registry to handle multiple bars: ```rust use tqdm::tqdm; for t in (0..3) { std::thread::spawn(move || { for i in tqdm(0..).desc(Some(i)) { /* Your loop logic here */ } }) } ``` ``` 38%|##########0 | 77/200 [00:00<00:01, 83.24it/s] 77%|████████████████████ | 77/100 [00:00<00:00, 83.24it/s] 19%|*****. | 77/400 [00:00<00:03, 83.24it/s] ``` Async iterator items can be tracked using `tqdm::tqdm_async()` (you may need an async runtime like [tokio](https://tokio.rs)): ```rust use tqdm::tqdm_async; #[tokio::main] async fn main() { use tokio::time::{sleep, Duration}; let future_iter = (0..100).map(|i| sleep(Duration::from_secs_f64(i as f64 / 100.0))); futures::future::join_all(tqdm_async(future_iter)).await; } ``` For more usage, please refer to [doc](https://docs.rs/tqdm/latest/tqdm). ## License Crates.io License