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.
With nanospinner
we are trying to draw attention to the node_modules
size problem and promote performance-first culture.
The space in node_modules
including sub-dependencies:
$ node ./test/size.js
Data from packagephobia.com
ora 280 kB
+ nanospinner 20 kB
.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()
- Multi spinners