This is Swift port of the well known and awesome Python package tqdm. It allows you to add a fancy progress bar to your loops with minimal effort. It has common features of the original package.



You can add this package as a dependency of your product with the code snippet below in Package.swift of your project:

let Package = Package(
        name: "MyAwesomePackage",
        // ...
        dependencies: [
            .package(url: "https://github.com/ebraraktas/swift-tqdm.git", from: "0.1.2"),
            // ...
        // ...
        targets: [
            .target(name: "MyAwesomeTarget",
                    dependencies: ["Tqdm"])]


The package allows 2 usage scenarios:

Wrapping a Sequence

You can wrap your Sequence and iterate over TqdmSequence. This way, you will be printing progress bar while iterating. See example below.

import Tqdm
var sum = 0
let N = 1000
// Iterate over sequence and print progress bar
for i in TqdmSequence(sequence: 0..<N) {
    sum += i

Updating manually

If you need to update progress bar with different increments or under some conditions, you can use update(n: Int) method of the Tqdm object. You can also print messages using write(message: String) method. See example below.

import Tqdm
let N = 500
let tqdm = Tqdm(description: "swift-tqdm", total: N, color: .red)
for i in 0..<N {
    Thread.sleep(forTimeInterval: 0.005) // Simulate work
    // Update bar
    tqdm.update() // Increment iteration by 1 
    // tqdm.update(n: 3) // Increment iteration by 3
    if i == (N / 2) {
        // Print without overlap with the bar
        tqdm.write("Half of the job is done") 

You can observe TqdmExample executable to see other options.


Both Tqdm and TqdmSequence has other parameters which let you control behavior of the progress bar. Most of the parameters are same, except Tqdm accepts total: Int? while TqdmSequence accepts sequence : S.

  • sequence¹: Sequence to be wrapped and iterated over
  • description: Progress bar description before actual bar
  • total²: The number of expected iterations. If unspecified only basic progress statistics are displayed (no ETA, no progressbar).
  • columnCount: Total column count of the output
  • minInterval: Minimum progress display update interval (default: 0.1) seconds.
  • minIterations: Minimum progress display update interval, in iterations.
  • ascii: If unspecified or False, use unicode (smooth blocks) to fill the meter. The fallback is to use ASCII characters " 123456789#"
  • unit: String that will be used to define the unit of each iteration (default: "it")
  • unitScale: If True, the number of iterations will be reduced/scaled automatically and a metric prefix following the International System of Units standard will be added (kilo, mega, etc.) (default: false)
  • smoothing: Exponential moving average smoothing factor for speed. Ranges from 0 (average speed) to 1 (current/instantaneous speed) (default: 0.3).
  • initial: The initial counter value. Useful when restarting a progress bar (default: 0)
  • unitDivisor: (default: 1000), ignored unless unitScale is true
  • color: Output color. It colorizes whole output, not just the bar like the Python equivalent does.

1: Only in TqdmSequence

2: Only in Tqdm


All source code is hosted on GitHub. Contributions are welcome. To contribute code, fork the repository and open a pull request.

To report bugs, propose features, or raise miscellaneous issues, create an issue in the issue tracker.


Code is licensed under MIT License.


  • Swift Tools 5.0.0
View More Packages from this Author


  • None
Last updated: Tue Nov 08 2022 18:14:23 GMT-0500 (GMT-05:00)