How to define pre-compile workloads for Makie figures in a module?

RoyW
Mon, 16 Feb 2026 16:52:30 +0000
Visualization

I modified the interactive button counting example from the official Makie documentation. It has a mouse-hover and button-click interactive events.

May someone please help me with the pre-compilation workload code? I would like to reduce the compilation latency an user would experience when the user mouse-hover over any of the bars (DataInspector event) or click on any of the buttons (the on event).

My sample code:

module CounterTutorial

    using GLMakie

    function create_dashboard(initial_count_values::AbstractVector{<:Integer})

        num_buttons = length(initial_count_values)

        fig = Figure()

        ax = Axis(fig[1, 1])
        fig[2, 1] = buttongrid = GridLayout(tellwidth = false)

        counts = Observable(initial_count_values)

        button_labels = [lift(x -> "Count: $(x[i])", counts) for i in eachindex(initial_count_values)]

        buttons = buttongrid[1, 1:num_buttons] = [Button(fig, label = l) for l in button_labels]

        for i in 1:num_buttons
            on(buttons[i].clicks) do _
                counts[][i] += 1
                notify(counts)
            end
        end

        barplot!(counts, color = cgrad(:Spectral)[LinRange(0, 1, num_buttons)])
        ylims!(ax, 0, maximum(initial_count_values) * 2)

        DataInspector()

        return fig
    end

    using PrecompileTools

    @compile_workload begin

        vs_initial = [1, 2, 3]
        fig = CounterTutorial.create_dashboard(vs_initial)

        # Execute the code path for:
        #   - the DataInspector event for mouse-hover over a bar
        #   - the `on(buttons[i].clicks)` event
    end
end

println("Calling create_dashboard!")
vs_initial = [1, 4, 3, 7, 2]
fig = CounterTutorial.create_dashboard(vs_initial)
display(fig)

I’m on GLMakie v0.13.8, PrecompileTools v1.3.3, Julia v1.12.5. Please let me know if there are alternative approaches to reduce the compilation latency for the user for this type of Makie application. I didn’t managed to get JuliaC v0.3.0 to with this code under my setup.

2 posts - 2 participants