usmanyunusov/nanospinner

🌀 The simplest and tiniest terminal spinner for Node.js

JavaScript

229

149 commits

updated Dec 10, 2024

See the code

README

Nano Spinner

The simplest and tiniest terminal spinner for Node.js

import { createSpinner } from 'nanospinner'

const spinner = createSpinner('Run test').start()

setTimeout(() => {
  spinner.success()
}, 1000)
  • Only single dependency (picocolors).
  • It 14 times smaller than ora.
  • Support both CJS and ESM projects.
  • TypeScript type declarations included.

Motivation

With nanospinner we are trying to draw attention to the node_modules size problem and promote performance-first culture.

Benchmarks

The space in node_modules including sub-dependencies:

$ node ./test/size.js
Data from packagephobia.com
  ora           280 kB
+ nanospinner    20 kB

API

.spin()

Looping over spin method will animate a given spinner.

setInterval(() => {
  spinner.spin()
}, 25)

.start(options?)

In order to start the spinner call start. This will perform drawing the spinning animation

spinner.start()
spinner.start('Start')
spinner.start({ text: 'Start', color: 'yellow' })

.stop(options?)

In order to stop the spinner call stop. This will finish drawing the spinning animation and return to new line.

spinner.stop()
spinner.stop('Done!')
spinner.stop({ text: 'Done!', mark: ':O', color: 'magenta' })

.success(options?)

Use success call to stop the spinning animation and replace the spinning symbol with check mark character to indicate successful completion.

spinner.success()
spinner.success('Successful!')
spinner.success({ text: 'Successful!', mark: ':)' })

.warn(options?)

Use warn call to stop the spinning animation and replace the spinning symbol with warn mark character to indicate warning completion.

spinner.warn()
spinner.warn('Warning!')
spinner.warn({ text: 'Warning!', mark: ':|' })

.error(options?)

Use error call to stop the spinning animation and replace the spinning symbol with cross character to indicate error completion.

spinner.error()
spinner.error('Error!')
spinner.error({ text: 'Error!', mark: ':(' })

.info(options?)

Use info call to stop the spinning animation and replace the spinning symbol with info mark character to indicate info completion.

spinner.info()
spinner.info('Info!')
spinner.info({ text: 'Info!', mark: 'i' })

.update(options?)

Use update call to dynamically change

spinner.update('Run test')
spinner.update({
  text: 'Run test',
  color: 'white',
  stream: process.stdout,
  frames: ['.', 'o', '0', '@', '*'],
  interval: 100,
})

.clear()

Clears the spinner`s output

spinner.clear()

.reset()

In order to reset the spinner to its initial frame do:

spinner.reset()

Roadmap

  • Multi spinners
spinner
spinners
terminal

usmanyunusov/nanospinner

🌀 The simplest and tiniest terminal spinner for Node.js

JavaScript

229

149 commits

updated Dec 10, 2024

See the code

README

Nano Spinner

The simplest and tiniest terminal spinner for Node.js

import { createSpinner } from 'nanospinner'

const spinner = createSpinner('Run test').start()

setTimeout(() => {
  spinner.success()
}, 1000)
  • Only single dependency (picocolors).
  • It 14 times smaller than ora.
  • Support both CJS and ESM projects.
  • TypeScript type declarations included.

Motivation

With nanospinner we are trying to draw attention to the node_modules size problem and promote performance-first culture.

Benchmarks

The space in node_modules including sub-dependencies:

$ node ./test/size.js
Data from packagephobia.com
  ora           280 kB
+ nanospinner    20 kB

API

.spin()

Looping over spin method will animate a given spinner.

setInterval(() => {
  spinner.spin()
}, 25)

.start(options?)

In order to start the spinner call start. This will perform drawing the spinning animation

spinner.start()
spinner.start('Start')
spinner.start({ text: 'Start', color: 'yellow' })

.stop(options?)

In order to stop the spinner call stop. This will finish drawing the spinning animation and return to new line.

spinner.stop()
spinner.stop('Done!')
spinner.stop({ text: 'Done!', mark: ':O', color: 'magenta' })

.success(options?)

Use success call to stop the spinning animation and replace the spinning symbol with check mark character to indicate successful completion.

spinner.success()
spinner.success('Successful!')
spinner.success({ text: 'Successful!', mark: ':)' })

.warn(options?)

Use warn call to stop the spinning animation and replace the spinning symbol with warn mark character to indicate warning completion.

spinner.warn()
spinner.warn('Warning!')
spinner.warn({ text: 'Warning!', mark: ':|' })

.error(options?)

Use error call to stop the spinning animation and replace the spinning symbol with cross character to indicate error completion.

spinner.error()
spinner.error('Error!')
spinner.error({ text: 'Error!', mark: ':(' })

.info(options?)

Use info call to stop the spinning animation and replace the spinning symbol with info mark character to indicate info completion.

spinner.info()
spinner.info('Info!')
spinner.info({ text: 'Info!', mark: 'i' })

.update(options?)

Use update call to dynamically change

spinner.update('Run test')
spinner.update({
  text: 'Run test',
  color: 'white',
  stream: process.stdout,
  frames: ['.', 'o', '0', '@', '*'],
  interval: 100,
})

.clear()

Clears the spinner`s output

spinner.clear()

.reset()

In order to reset the spinner to its initial frame do:

spinner.reset()

Roadmap

  • Multi spinners
spinner
spinners
terminal

Significant stargazers

Mohammad Bagher Abiyat

892 followers · starred Jul 2022

Miguel Ángel Durán

39,068 followers · starred Oct 2021

HoJeong Go

225 followers · starred Oct 2021

Bosco Domingo

18 followers · starred Sep 2024