• Stars
    star
    2,150
  • Rank 21,457 (Top 0.5 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created almost 10 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Go (golang) package with 90 configurable terminal spinner/progress indicators.

Spinner

GoDoc CircleCI

spinner is a simple package to add a spinner / progress indicator to any terminal application. Examples can be found below as well as full examples in the examples directory.

For more detail about the library and its features, reference your local godoc once installed.

Contributions welcome!

Installation

go get github.com/briandowns/spinner

Available Character Sets

90 Character Sets. Some examples below:

(Numbered by their slice index)

index character set sample gif
0 ←↖↑↗→↘↓↙ Sample Gif
1 ▁▃▄▅▆▇█▇▆▅▄▃▁ Sample Gif
2 ▖▘▝▗ Sample Gif
3 ┤┘┴└├┌┬┐ Sample Gif
4 ◢◣◤◥ Sample Gif
5 ◰◳◲◱ Sample Gif
6 ◴◷◶◵ Sample Gif
7 ◐◓◑◒ Sample Gif
8 .oO@* Sample Gif
9 |/-\ Sample Gif
10 ◡◡⊙⊙◠◠ Sample Gif
11 ⣾⣽⣻⢿⡿⣟⣯⣷ Sample Gif
12 >))'> >))'> >))'> >))'> >))'> <'((< <'((< <'((< Sample Gif
13 ⠁⠂⠄⡀⢀⠠⠐⠈ Sample Gif
14 ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ Sample Gif
15 abcdefghijklmnopqrstuvwxyz Sample Gif
16 ▉▊▋▌▍▎▏▎▍▌▋▊▉ Sample Gif
17 ■□▪▫ Sample Gif
18 ←↑→↓ Sample Gif
19 ╫╪ Sample Gif
20 ⇐⇖⇑⇗⇒⇘⇓⇙ Sample Gif
21 ⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈ Sample Gif
22 ⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈ Sample Gif
23 ⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁ Sample Gif
24 ⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋ Sample Gif
25 ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン Sample Gif
26 . .. ... Sample Gif
27 ▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▏▎▍▌▋▊▉█▇▆▅▄▃▂▁ Sample Gif
28 .oO°Oo. Sample Gif
29 +x Sample Gif
30 v<^> Sample Gif
31 >>---> >>---> >>---> >>---> >>---> <---<< <---<< <---<< <---<< <---<< Sample Gif
32 | || ||| |||| ||||| |||||| ||||| |||| ||| || | Sample Gif
33 [] [=] [==] [===] [====] [=====] [======] [=======] [========] [=========] [==========] Sample Gif
34 (*---------) (-*--------) (--*-------) (---*------) (----*-----) (-----*----) (------*---) (-------*--) (--------*-) (---------*) Sample Gif
35 █▒▒▒▒▒▒▒▒▒ ███▒▒▒▒▒▒▒ █████▒▒▒▒▒ ███████▒▒▒ ██████████ Sample Gif
36 [ ] [=> ] [===> ] [=====> ] [======> ] [========> ] [==========> ] [============> ] [==============> ] [================> ] [==================> ] [===================>] Sample Gif
37 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 Sample Gif
38 🕐 🕜 🕑 🕝 🕒 🕞 🕓 🕟 🕔 🕠 🕕 🕡 🕖 🕢 🕗 🕣 🕘 🕤 🕙 🕥 🕚 🕦 🕛 🕧 Sample Gif
39 🌍 🌎 🌏 Sample Gif
40 ◜ ◝ ◞ ◟ Sample Gif
41 ⬒ ⬔ ⬓ ⬕ Sample Gif
42 ⬖ ⬘ ⬗ ⬙ Sample Gif
43 [>>> >] []>>>> [] [] >>>> [] [] >>>> [] [] >>>> [] [] >>>>[] [>> >>] Sample Gif

Features

  • Start
  • Stop
  • Restart
  • Reverse direction
  • Update the spinner character set
  • Update the spinner speed
  • Prefix or append text
  • Change spinner color, background, and text attributes such as bold / italics
  • Get spinner status
  • Chain, pipe, redirect output
  • Output final string on spinner/indicator completion

Examples

package main

import (
	"github.com/briandowns/spinner"
	"time"
)

func main() {
	s := spinner.New(spinner.CharSets[9], 100*time.Millisecond)  // Build our new spinner
	s.Start()                                                    // Start the spinner
	time.Sleep(4 * time.Second)                                  // Run for some time to simulate work
	s.Stop()
}

Update the character set and restart the spinner

s.UpdateCharSet(spinner.CharSets[1])  // Update spinner to use a different character set
s.Restart()                           // Restart the spinner
time.Sleep(4 * time.Second)
s.Stop()

Update spin speed and restart the spinner

s.UpdateSpeed(200 * time.Millisecond) // Update the speed the spinner spins at
s.Restart()
time.Sleep(4 * time.Second)
s.Stop()

Reverse the direction of the spinner

s.Reverse() // Reverse the direction the spinner is spinning
s.Restart()
time.Sleep(4 * time.Second)
s.Stop()

Provide your own spinner

(or send me an issue or pull request to add to the project)

someSet := []string{"+", "-"}
s := spinner.New(someSet, 100*time.Millisecond)

Prefix or append text to the spinner

s.Prefix = "prefixed text: " // Prefix text before the spinner
s.Suffix = "  :appended text" // Append text after the spinner

Set or change the color of the spinner. Default color is white. The spinner will need to be restarted to pick up the change.

s.Color("red") // Set the spinner color to red

You can specify both the background and foreground color, as well as additional attributes such as bold or underline.

s.Color("red", "bold") // Set the spinner color to a bold red

To set the background to black, the foreground to a bold red:

s.Color("bgBlack", "bold", "fgRed")

Below is the full color and attribute list:

// default colors
red
black
green
yellow
blue
magenta
cyan
white

// attributes
reset
bold
faint
italic
underline
blinkslow
blinkrapid
reversevideo
concealed
crossedout

// foreground text
fgBlack
fgRed
fgGreen
fgYellow
fgBlue
fgMagenta
fgCyan
fgWhite

// foreground Hi-Intensity text
fgHiBlack
fgHiRed
fgHiGreen
fgHiYellow
fgHiBlue
fgHiMagenta
fgHiCyan
fgHiWhite

// background text
bgBlack
bgRed
bgGreen
bgYellow
bgBlue
bgMagenta
bgCyan
bgWhite

// background Hi-Intensity text
bgHiBlack
bgHiRed
bgHiGreen
bgHiYellow
bgHiBlue
bgHiMagenta
bgHiCyan
bgHiWhite

Generate a sequence of numbers

setOfDigits := spinner.GenerateNumberSequence(25)    // Generate a 25 digit string of numbers
s := spinner.New(setOfDigits, 100*time.Millisecond)

Get spinner status

fmt.Println(s.Active())

Unix pipe and redirect

Feature suggested and write up by dekz

Setting the Spinner Writer to Stderr helps show progress to the user, with the enhancement to chain, pipe or redirect the output.

This is the preferred method of setting a Writer at this time.

s := spinner.New(spinner.CharSets[11], 100*time.Millisecond, spinner.WithWriter(os.Stderr))
s.Suffix = " Encrypting data..."
s.Start()
// Encrypt the data into ciphertext
fmt.Println(os.Stdout, ciphertext)
> myprog encrypt "Secret text" > encrypted.txt
⣯ Encrypting data...
> cat encrypted.txt
1243hjkbas23i9ah27sj39jghv237n2oa93hg83

Final String Output

Add additional output when the spinner/indicator has completed. The "final" output string can be multi-lined and will be written to wherever the io.Writer has been configured for.

s := spinner.New(spinner.CharSets[9], 100*time.Millisecond)
s.FinalMSG = "Complete!\nNew line!\nAnother one!\n"
s.Start()                 
time.Sleep(4 * time.Second)
s.Stop()                   

Output

Complete!
New line!
Another one!

More Repositories

1

simple-httpd

Drop-in replacement for Python SimpleHTTPServer. Provides TLS via Let's Encrypt over HTTP2, and auto generated self-signed certificates.
Go
230
star
2

openweathermap

Go (golang) package for use with openweathermap.org's API.
Go
224
star
3

sky-island

FaaS platform for running raw Go functions.
Go
117
star
4

jail

Package jail provides native FreeBSD Jail syscalls in Go
Go
52
star
5

super-hacker

SuperHacker is the ultimate utility to make you look like a hacker.
Go
50
star
6

libspinner

A pure C single-header library with 90 configurable terminal spinner/progress indicators.
C
29
star
7

remindme

Go
28
star
8

todo-view

Extract info from TODO's in your code from formatted TODO comments
Go
27
star
9

liblogger

A simple and performant, single-header JSON structured logger for C applications.
C
16
star
10

GoPasswordUtilities

Simple library for working with passwords in Go (golang).
Go
13
star
11

pass

Simple CLI Password Manager
C
12
star
12

flotsam

Project Generator and Dependency Manager for C.
C++
11
star
13

heads-up

A simple example of using Tile38 to track the ISS and send notifications when it's overhead.
Go
10
star
14

presentations

Public repo for my slides
Go
9
star
15

simple-map

A simple and dynamic hash map in C.
C++
9
star
16

stockwatcher

A CLI application to monitor one or more stocks.
Go
7
star
17

smile

Smile. Why not?
Go
7
star
18

libdotenv

libdotenv is a C single-headerlibrary providing the ability to load values from a .env file into environment variables.
C
6
star
19

recipes

A collection of recipes I've created, found, and have been given.
6
star
20

struCtured-logger

A simple JSON structured logger for C applications.
C++
6
star
21

raceway

OpenStack Rally Job Controller
Go
6
star
22

roam-client

Roam by Tile38 API Client
Go
6
star
23

neustar

Package neustar is a SDK to access and work with the Neustar API
Go
5
star
24

cgo_calc

IGNORE. Meant as a descripton of some tech for ${DAY_JOB}
Go
5
star
25

nlog

Structured Logging for Nim
Nim
5
star
26

libmap

A simple map implementation in C
C
5
star
27

libweyl

Middle Random Weyl Sequence
C++
4
star
28

aion

WIP - Job and Task Scheduler Utilizing Cron Syntax
Go
4
star
29

ip

Go
4
star
30

pyopenvswitch

Python module to control and interact with Open vSwitch switches.
Python
2
star
31

doom-fire-c

C
2
star
32

stock-exchange

Go
2
star
33

libbenchmark

loads is a simple library to benchmark C functions across a given number of threads.
C++
2
star
34

mapledb

2
star
35

down-low

down-low is a secure messaging system written in Go (golang) with the ability to send AES and RSA encrypted messages to a number of different endpoints.
Go
2
star
36

games

Terminal games written in Go (golang)
Go
2
star
37

wanbli

1
star
38

gen-release-notes

Go
1
star
39

vms

Shell
1
star
40

kahless

Makefile
1
star
41

gail

Go
1
star
42

jail-builder

Go
1
star
43

logcolor

Go
1
star
44

dictu_modules

C
1
star
45

formatifier

formatifier is a Go (golang) package to quickly format strings in common formats.
Go
1
star
46

daily_tracker

C
1
star
47

r_time

C library providing the ability to get time from remote servers.
C
1
star
48

pwc

Pascal
1
star
49

anagram-primes

C
1
star
50

dictum

Makefile
1
star
51

itsnotgolang

Go
1
star
52

micro-chat

C
1
star
53

dictu.vim

Vim Script
1
star
54

Felix

Felix is an application to be run on Asterisk servers and Kamalio servers when there's an environment needing a process to register in and out carriers and Asterisk servers from the cluster.
Java
1
star
55

fips_dockerfiles

Dockerfile
1
star