Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ad4mx/spinoff

πŸ’« Easy to use, robust Rust library for displaying spinners in the terminal
https://github.com/ad4mx/spinoff

cli command-line command-line-tool spinner terminal

Last synced: about 2 months ago
JSON representation

πŸ’« Easy to use, robust Rust library for displaying spinners in the terminal

Awesome Lists containing this project

README

        

# spinoff
> an easy to use, robust library for displaying spinners in the terminal

[![Version](https://img.shields.io/crates/v/spinoff.svg)](https://crates.io/crates/spinoff) [![Downloads](https://img.shields.io/crates/d/spinoff)](https://crates.io/crates/spinoff) [![Docs](https://img.shields.io/docsrs/spinoff)](https://docs.rs/spinoff/latest/spinoff) [![License](https://img.shields.io/crates/l/spinoff)](https://crates.io/crates/spinoff) ![Actions](https://img.shields.io/github/actions/workflow/status/ad4mx/spinoff/rust.yml?branch=main)

![](assets/index.gif)
## πŸ”¨ Install
Add as a dependency to your `Cargo.toml`:

```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

```rust
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

```rust
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:

```toml
[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:

```rust
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();
```

## ❗Note for Windows Users
For colors to work properly, you need to add a few extra lines to your code:
```rust
use colored::control
control::set_virtual_terminal(true).unwrap();
```

## πŸ“– Documentation

* All relevant documentation can be found on the [Docs.rs page](https://docs.rs/spinoff/latest/spinoff/).
* If you want to see all the available `spinner` options, refer to [the `spinner` module](https://docs.rs/spinoff/0.7.0/spinoff/spinners/index.html).

## βš™ Examples

```bash
cargo run --example simple
```
```bash
cargo run --example stream
```
```bash
cargo run --example stop_and_persist
```
Other examples can be found in the [documentation](https://docs.rs/spinoff/latest/spinoff/).
## 🚧 Contributing

Any contributions to this crate are highly appreciated. If you have any ideas/suggestions/bug fixes, please open an [issue](https://github.com/ad4mx/spinoff/issues) or a [pull request](https://github.com/ad4mx/spinoff/pulls).
If you like the project, [star this project on GitHub.](https://github.com/ad4mx/spinoff)

## πŸ“‘ License

This crate is licensed under the [MIT license](LICENSE).