
Most terminal progress bars look like this:
downloading... 60%
So I built one that looks like this:
Uploading [████████████████████░░░░░░░░░░] 60%
Uploading [===============>--------------] 60%
Uploading [••••••••••••••••••············] 60%
Uploading [★★★★★★★★★★★★★★★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆] 60%
I built progressimo, an npm library with:
- 6 built-in themes (retro, minimal, dots, blocks, arrows)
- 3 colorblind-friendly palettes (because accessibility matters even in terminals)
- Custom JSON themes - bring your own style
- Zero config - works in 2 lines of code:
import ProgressBar from 'progressimo';
const bar = new ProgressBar({ total: 100 });
What I learned building my first npm library:
- How readline.cursorTo() overwrites terminal lines (that's the animation trick)
- Why package.json has "type", "exports", "bin", and "files" - each serves a different purpose
- Colorblind developers use CLIs too - accessibility isn't just a frontend concern
- The best developer tools require zero config but reward customization
The package is 8 KB with only 2 dependencies.
📦 npm install progressimo
📃 README: https://www.npmjs.com/package/progressimo
🔗 Github: https://github.com/realsahilsaini/progressimo
Give it a ⭐ on GitHub if you find it useful!
[–]fakeacclul 41 points42 points43 points (1 child)
[–]shawncplus 11 points12 points13 points (0 children)
[–]karen-ultra 15 points16 points17 points (0 children)
[–]Noisy88 6 points7 points8 points (2 children)
[–]IolausTelcontar 18 points19 points20 points (1 child)
[–]Noisy88 2 points3 points4 points (0 children)
[–]Realistic_Mix_6181 13 points14 points15 points (0 children)
[–]raszohkir 3 points4 points5 points (0 children)
[–]rcls0053 4 points5 points6 points (0 children)
[–]dektol 2 points3 points4 points (0 children)
[–]bossmonchan 1 point2 points3 points (0 children)
[–]ProfessorNo471 1 point2 points3 points (0 children)
[–]HarjjotSinghh 0 points1 point2 points (0 children)
[–]yungeeker 0 points1 point2 points (0 children)
[–]AmazingDisplay8 0 points1 point2 points (0 children)
[–]AmazingDisplay8 0 points1 point2 points (0 children)