# Progress monitor with notify syntax

**URL:** <https://discourse.julialang.org/t/progress-monitor-with-notify-syntax/134485>\
**Category:** General Usage\
**Tags:** question\
**Created:** [December 10, 2025, 10:52pm UTC](https://discourse.julialang.org/t/progress-monitor-with-notify-syntax/134485 "2025-12-10T22:52:42Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Janis\_Erdmanis](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/janis_erdmanis/32/10869_2.png) [@Janis\_Erdmanis](https://discourse.julialang.org/u/Janis_Erdmanis)\
**Post date:** [December 10, 2025, 10:52pm UTC](https://discourse.julialang.org/t/progress-monitor-with-notify-syntax/134485/1 "2025-12-10T22:52:43Z")

</div>

I am exploring the addition of a progress meter for AppBundler.jl and am looking into a minimally invasive method. I would like a progress meter that displays all steps in advance, shows a running timer or time indicators, and uses colour changes for completed, active, and remaining tasks. I would like to drive it with a notify API something like:

```julia-auto
@enum ProcessStep Loading Processing Validating

const STEP_MESSAGES = Dict(
    Loading => "Loading data",
    Processing => "Processing data",
    Validating => "Validating results",
)

function multistep_process(data; progress::Condition=monitor([Loading, Processing, Validating]))
    sleep(0.5)
    notify(progress, Loading)
    sleep(0.5)
    notify(progress, Processing)
    sleep(0.5)
    notify(progress, Validating)
    return data .^ 2
end

```

As a first approximation Claude gave me:

```julia-auto
function monitor(steps::Vector{ProcessStep})
    cond = Condition()
    @async begin
        println("\nProgress:")
        for step in steps
            println("[] $(STEP_MESSAGES[step])")
        end
        print("\e[$(length(steps))A")
        notify(cond)
        
        for step in steps
            wait(cond)
            println("[●] $(STEP_MESSAGES[step])\e[K")
        end
    end
    wait(cond)
    return cond
end

```

But now I want to make it pretty. What are my options here?

---

<div class="post-metadata">

**Author:** ![tecosaur](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tecosaur/32/23206_2.png) [@tecosaur](https://discourse.julialang.org/u/tecosaur)\
**Post date:** [December 12, 2025, 5:28am UTC](https://discourse.julialang.org/t/progress-monitor-with-notify-syntax/134485/2 "2025-12-12T05:28:59Z")

</div>

It’s a lot heavier than what you’re using here, but [https://code.tecosaur.net/tec/ComposableAsyncStatus.jl](https://code.tecosaur.net/tec/ComposableAsyncStatus.jl) seems like the sort of design you’ve asked for.
