ad4mx/spinoff
ad4mx/spinoff has 575 GitHub stars and 9 forks. GitHot measured 0 stars in 24 hours and 0 in 7 days. Last checked 2026-11-10 02:23 UTC. Last push 2025-01-16.
💫 Easy to use, robust Rust library for displaying spinners in the terminal
Measured star growth
- in 24h
- 0
- in 7 days
- 0
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Originalspinoff
an easy to use, robust library for displaying spinners in the terminal

🔨 Install
Add as a dependency to your Cargo.toml:
[dependencies]
spinoff = "0.8.0"
```
## ⚡ Usage
```rust
use spinoff::{Spinner, spinners, Color};
use std::thread::sleep;
use std::time::Duration;
let mut spinner = Spinner::new(spinners::Dots, "Loading...", Color::Blue);
sleep(Duration::from_secs(3));
spinner.success("Done!");
Update a spinner
use spinoff::{Spinner, spinners, Color};
use std::thread::sleep;
use std::time::Duration;
let mut spinner = Spinner::new(spinners::Aesthetic, "Loading...", Color::Red);
sleep(Duration::from_secs(3));
spinner.update(spinners::Dots2, "Retrying...", None);
sleep(Duration::from_secs(3));
spinner.stop()
Specify an output stream
use spinoff::{Spinner, spinners, Color, Streams};
use std::thread::sleep;
use std::time::Duration;
let mut spinner = Spinner::new_with_stream(spinners::Line, "Loading...", Color::Yellow, Streams::Stderr);
sleep(Duration::from_secs(3));
spinner.stop_and_persist("📜", "Task done.");
💫 Spinners
spinoff includes over 80+ spinner variants out of the box.
All spinner variants are treated as features that can be enabled or disabled. By default, all of them are enabled for ease of use.
To disable/enable variants, you will have to edit your cargo.toml file:
[dependencies]
spinoff = { version = "0.8.0", features = ["dots", "arc", "line"] }
Any suggestions for new spinner variants are welcome.
Creating your own spinner
You can create your own spinner using the spinner! macro:
use spinoff::*;
use std::thread::sleep;
use std::time::Duration;
let frames = spinner!([">", ">>", ">>>"], 100);
let mut sp = Spinner::new(frames, "Hello World!", None);
sleep(Duration::from_millis(800));
sp.stop();
Multiline messages
spinoff doesn't support spinners with multiline text out of the box. If you want to use it in your project, please look at #27.
❗Note for Windows Users
For colors to work properly, you need to add a few extra lines to your code:
use colored::control
control::set_virtual_terminal(true).unwrap();
📖 Documentation
- All relevant documentation can be found on the Docs.rs page.
- If you want to see all the available
spinneroptions, refer to thespinnermodule.
⚙ Examples
cargo run --example simple
cargo run --example stream
cargo run --example stop_and_persist
Other examples can be found in the documentation.
🚧 Contributing
Any contributions to this crate are highly appreciated. If you have any ideas/suggestions/bug fixes, please open an issue or a pull request. If you like the project, star this project on GitHub.
📑 License
This crate is licensed under the MIT license.
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,607 starspublic-apis/public-apis
A collective list of free APIs
497,930 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
449,872 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,297 stars