# Static HTML Exports for Makie Proof of Concept

**URL:** https://discourse.julialang.org/t/static-html-exports-for-makie-proof-of-concept/137597
**Category:** General Usage
**Tags:** makie, html, wglmakie
**Created:** [June 13, 2026, 10:36am UTC](https://discourse.julialang.org/t/static-html-exports-for-makie-proof-of-concept/137597 "2026-06-13T10:36:06Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)
#### Post date: [June 13, 2026, 10:36am UTC](https://discourse.julialang.org/t/static-html-exports-for-makie-proof-of-concept/137597/1 "2026-06-13T10:36:06Z")

</div>

@bjarthur and I were exploring the state of static export of some dynamic Makie plots that vary in time. With the help of some AI agents (Google Antigravity CLI with Gemini Flash 3.5) we eventually found a path. I’ve created a demonstration by creating some 3D random walk simulations here:

> **[Bonito App](https://mkitti.github.io/BrownianMotionDemo.jl/)**

The main key was to use `onjs` to write some JavaScript to do the dynamic updates:

> <https://github.com/mkitti/BrownianMotionDemo.jl/blob/bb95062d212dbccd39fc85087f40d465048f24bf/src/BrownianMotionDemo.jl#L138-L190>

In particular, we (Ben, I, and Gemini Flash 3.5) had to parse through WGLMakie internals to find the name “positions\_transformed\_f32c” as a key name to update.

For now, please enjoy the plots. If you have any thoughts about how to generalize and upstream this approach, I would be interested in pursuing that.

---

<div class="post-metadata">

### Author: ![sdanisch](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sdanisch/32/1406_2.png) [@sdanisch](https://discourse.julialang.org/u/sdanisch)
#### Post date: [June 13, 2026, 11:19am UTC](https://discourse.julialang.org/t/static-html-exports-for-makie-proof-of-concept/137597/2 "2026-06-13T11:19:09Z")

</div>

Cool stuff! I’m also working on some WASM compilation for WGLMakie and improving the JS interface, for more standalone use cases!  
So hopefully this will become much easier in the future 🙂

---

<div class="post-metadata">

### Author: ![kbarros](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kbarros/32/7723_2.png) [@kbarros](https://discourse.julialang.org/u/kbarros)
#### Post date: [June 13, 2026, 2:29pm UTC](https://discourse.julialang.org/t/static-html-exports-for-makie-proof-of-concept/137597/3 "2026-06-13T14:29:08Z")

</div>

Wow, that sounds amazing, thanks all!

---

<div class="post-metadata">

### Author: ![bjarthur](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bjarthur/32/9638_2.png) [@bjarthur](https://discourse.julialang.org/u/bjarthur)
#### Post date: [June 15, 2026, 11:53am UTC](https://discourse.julialang.org/t/static-html-exports-for-makie-proof-of-concept/137597/4 "2026-06-15T11:53:10Z")

</div>

completely standalone interactive figures is the one killer feature that i sorely miss from [Gadfly](https://gadflyjl.org/stable/tutorial/#Interactivity)

---

<div class="post-metadata">

### Author: ![RoyiAvital](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/royiavital/32/571_2.png) [@RoyiAvital](https://discourse.julialang.org/u/RoyiAvital)
#### Post date: [June 16, 2026, 6:06am UTC](https://discourse.julialang.org/t/static-html-exports-for-makie-proof-of-concept/137597/5 "2026-06-16T06:06:07Z")

</div>

`Gadfly.jl` was (is) so elegant. I wish it will have some kind of a comeback now that AI based agents can assist with the development. Do you see it happen?

---

<div class="post-metadata">

### Author: ![gvannoye](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gvannoye/32/217463_2.png) [@gvannoye](https://discourse.julialang.org/u/gvannoye)
#### Post date: [June 25, 2026, 2:07pm UTC](https://discourse.julialang.org/t/static-html-exports-for-makie-proof-of-concept/137597/6 "2026-06-25T14:07:27Z")

</div>

It’s funny, I was working on a very similar project, for the KM3NeT event display that was featured here some times ago by @tamasgal !

I ended up taking a different approach than @mkitti to rely more on the `record_states` and `export_static` from Bonito.jl ([https://bonito.sh/stable/static.html](https://bonito.sh/stable/static.html)).

Time is represented with a slider, and the main logic of the code relies in the following lines:

```julia
app = App() do session::Session
    step = 20 # ns
    time_slider = Slider(0:step:Δt, value=Δt, id="time_range")

   on(time_slider) do idx
        t = t_min + idx

        RA.apply_frame!(RA.global_rba(), t)
    end

    return Bonito.record_states(
        session,
        RA.global_scene()
    )
end

export_static("event_display_dynamic.html", app)

```

I just added some manual javascript to make the slider increase automatically, you can find the project here: [https://codeberg.org/gvannoye/proto-html-export-raibowalga.jl](https://codeberg.org/gvannoye/proto-html-export-raibowalga.jl)

and the exported html file here: [https://gvannoye.codeberg.page/proto-html-export-raibowalga.jl/event\_display\_dynamic.html](https://gvannoye.codeberg.page/proto-html-export-raibowalga.jl/event_display_dynamic.html)

---

<div class="post-metadata">

### Author: ![lazarusA](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lazarusa/32/6571_2.png) [@lazarusA](https://discourse.julialang.org/u/lazarusA)
#### Post date: [June 25, 2026, 6:46pm UTC](https://discourse.julialang.org/t/static-html-exports-for-makie-proof-of-concept/137597/7 "2026-06-25T18:46:03Z")

</div>

some years ago I created a bunch of demos, using `record_states` as well. Good for small things, not so much for heavy loaded data apps.

[https://lazarusa.github.io/ClimateVisualisations/](https://lazarusa.github.io/ClimateVisualisations/)

code: [GitHub - lazarusA/ClimateVisualisations: Climate visualisation apps · GitHub](https://github.com/lazarusA/ClimateVisualisations)

Edit: all `JSServe` will now need to be `Bonito` 😃
