cheggaaa
pb
Go

Console progress bar for Golang

Last updated Jul 7, 2026
3.7k
Stars
271
Forks
26
Issues
+1
Stars/day
Attention Score
85
Language breakdown
Go 100.0%
Files click to expand
README

Terminal progress bar for Go

Coverage Status

Installation

go get github.com/cheggaaa/pb/v3

Documentation for v1 bar available here.

Quick start

package main

import ( "time"

"github.com/cheggaaa/pb/v3" )

func main() { count := 100000

// create and start new bar bar := pb.StartNew(count)

// start bar from 'default' template // bar := pb.Default.Start(count)

// start bar from 'simple' template // bar := pb.Simple.Start(count)

// start bar from 'full' template // bar := pb.Full.Start(count)

for i := 0; i < count; i++ { bar.Increment() time.Sleep(time.Millisecond) }

// finish bar bar.Finish() }

Result will be like this:

> go run test.go
37158 / 100000 [---------------->_] 37.16% 916 p/s

Settings

// create bar
bar := pb.New(count)

// refresh info every second (default 200ms) bar.SetRefreshRate(time.Second)

// force set io.Writer, by default it's os.Stderr bar.SetWriter(os.Stdout)

// bar will format numbers as bytes (B, KiB, MiB, etc) bar.Set(pb.Bytes, true)

// bar use SI bytes prefix names (B, kB) instead of IEC (B, KiB) bar.Set(pb.SIBytesPrefix, true)

// set custom bar template bar.SetTemplateString(myTemplate)

// check for error after template set if err := bar.Err(); err != nil { return }

// start bar bar.Start()

Progress bar for IO Operations

package main

import ( "crypto/rand" "io" "io/ioutil"

"github.com/cheggaaa/pb/v3" )

func main() { var limit int64 = 1024 1024 500

// we will copy 500 MiB from /dev/rand to /dev/null reader := io.LimitReader(rand.Reader, limit) writer := ioutil.Discard

// start new bar bar := pb.Full.Start64(limit)

// create proxy reader barReader := bar.NewProxyReader(reader)

// copy from proxy reader io.Copy(writer, barReader)

// finish bar bar.Finish() }

Custom Progress Bar templates

Rendering based on builtin text/template package. You can use existing pb's elements or create you own.

All available elements are described in the element.go file.

All in one example:

tmpl := {{ red &quot;With funcs:&quot; }} {{ bar . &quot;&lt;&quot; &quot;-&quot; (cycle . &quot;↖&quot; &quot;↗&quot; &quot;↘&quot; &quot;↙&quot; ) &quot;.&quot; &quot;&gt;&quot;}} {{speed . | rndcolor }} {{percent .}} {{string . &quot;mygreenstring&quot; | green}} {{string . &quot;mybluestring&quot; | blue}}

// start bar based on our template bar := pb.ProgressBarTemplate(tmpl).Start64(limit)

// set values for string elements bar.Set("mygreenstring", "green").Set("mybluestring", "blue")

🔗 More in this category

© 2026 GitRepoTrend · cheggaaa/pb · Updated daily from GitHub