grob
I'm Zach, Lead Software Engineer on the SHERPA project at NASA ARC. I've been doing rover strategic simulations and mission planning for the VIPER project for a few years now. I dabble in indie game development, I released my game Vector Prospector on Steam in 2020. I've been programming since I was eight, and I live in Newport Beach, California.
Session
Julia has great tools for computation, but if you want to build an interactive desktop application with maps, real-time overlays, and custom visualizations, your options are limited. The usual answer is to reach for a web framework or Electron, which means maintaining a split codebase with a server layer in between.
That's what we did initially for SHERPA, a mission planning tool for NASA's lunar surface operations. We had a React frontend talking to a Julia backend over a local server, and it was clunky. Two languages, constant serialization, and every UI change meant context-switching between JavaScript and Julia. So we scrapped it and rebuilt the entire GUI in Julia using Dear ImGui (via CImGui.jl) for the interface and Mirage.jl, a custom OpenGL wrapper I wrote that gives you an HTML5 Canvas2D-style API for 2D and 3D rendering. No shader code or buffer management, just draw_image() and fill_rect() calls.
The real win is how this integrates with Julia's REPL. Our workflow is: start the GUI, use it, close the window, edit a function, reopen the GUI with all your state intact. Maps stay loaded, camera position is preserved, your scenario is right where you left it. This made it possible for a small team to go from nothing to a production tool in a few months, iterating on the GUI the same way you'd iterate on any Julia code.
This approach isn't specific to aerospace. Anything that needs interactive visualization on top of a Julia computation backend (lab instruments, geospatial tools, simulation dashboards, data exploration) could use the same stack. This talk covers how it all fits together, a live demo of the tools, and practical advice for building your own.