There’s something weirdly satisfying about watching a progress indicator — that little animated bar or ring that quietly says, “hang in there, I’m working on it.”
Recently, while building a SwiftUI app, I needed just that. Nothing fancy — just a clean, customizable way to show progress.
So I did what any iOS dev would do: I hit Google in search of a quick fix.
And… nothing useful.
Well, not nothing, but what I found didn’t fit. Most of the options were:
- UIKit-based (I’m building for SwiftUI — and tvOS, at that)
- Archived and no longer maintained (looking at you, ProgressKit and RPCircularProgress)
- Or simply too rigid to adapt to my needs
I didn’t want to shoehorn UIKit components into a SwiftUI-first app. Especially not when trying to build something smooth and native.
So I built my own.
🚀 Introducing: ProgressUI
A simple, expressive progress indicator library built entirely with SwiftUI.
It supports:
- Determinate and indeterminate progress
- Custom shapes and animations
- Easy styling to match your app’s look and feel
- A clean, composable API — no UIKit glue required
And it’s not just an experiment — I’m already using it in a real-world SwiftUI app for tvOS (StorageAnalysis), where it plays a key role in the user experience.
🛠️ A Simple Example
Getting started with ProgressUI
is really straightforward. Here’s a quick example of how you might use it in a SwiftUI view:
import ProgressUI
struct CompletionProgressView: View {
@State private var progress: CGFloat = 0.2
var body: some View {
VStack {
ProgressUI(progress: $progress)
.setAnimation(.bouncy)
Button("Increase progress") {
progress += 0.1
}
}
}
}
Why I’m Sharing This
I don’t think I’m the only one who’s opened Xcode, dropped in a ProgressView, and thought,
“This is fine… but I wish it looked better. And animated. And fit my brand.”
So if you’ve ever been there — or you’re there now — give ProgressUI a look.
It’s open source. It works in production.
And hopefully, it saves you a few hours and a few head scratches.
✌️ Pierre
github.com/PierreJanineh-com/ProgressUI