PlutoSlides.jl — Beamer-style presentations for Pluto notebooks
Repository: https://github.com/dmetivie/PlutoSlides.jl
I’m happy to share PlutoSlides.jl, a package that brings Beamer-like slide formatting to Pluto.jl notebooks.
I love the interactivity and reactivity of Pluto, but I wanted a more natural slideshow experience for talks and lectures than the Pluto presentation mode.
Another way to put it: this package provides interactive beamer-like slides powered by Pluto! That’s the dream, at least.
I feel like this is new: Quarto can do slideshows but cannot have interactive codes (beside some sliders) e.g. adding/removing cells and so on. Pluto has interactivity but no real slideshow format.
Is it really useful? I don’t know yet. It is very experimental. See below for development details, it is far from perfect, but at this point I needed feedback and probably people with better knowledge of JavaScript/Pluto to help for a cleaner implementation.
I did try it live at JuliaCon Paris 2025 with an earlier version, see the YouTube video (it did bug out a bit toward the end).

What it does
PlutoSlides.jl defines a slide mode that can be turned on/off (as the presentation mode) to transform your Pluto notebook into a slide deck with:
-
Automatic slide detection:
# Section,## Subsection, and### Subsubsectionheadings define slide boundaries. The difference with Pluto’s built-in presentation mode is that the slides are truly separated, as opposed to having spacing as separators.
This allows having slide counters. -
Beamer-like
pause(n): Moreover, one can reveal content step-by-step withpause()(sequential) orpause(n)(numbered fragments like\pause[n]in LaTeX Beamer) -
Title bands: Section and subsection titles appear in persistent header bands at the top of each slide → I feel like it helps the audience.
And other features that already existed before:
-
Customizable appearance: Adjust fonts, colors, max-width, and footer text to match your style or institution’s branding
-
Title slide support: Display a formatted title slide with logos and author information using the
myTitle()helper -
Slide navigation: Arrow keys, PageUp/PageDown, or click left/right to navigate; Escape to exit slide mode
Current development state (
experimental)
This package is experimental and built with heavy use of LLM-powered coding assistance (I have minimal JavaScript/CSS experience — pure vibe coding!). It works well for some of my notebooks. Terrible for others in terms of performances.
The biggest development issue I encountered is how to keep Pluto’s reactivity while having separated slides that must update without breaking the slideshow.
-
Performance: On some larger notebooks, slide mode can slow down noticeably. I’m still investigating whether this is related to the number of slides, DOM size, or the MutationObserver setup. See issue #3.
-
Display variability: Layout depends on screen size and font settings. The
max_widthoption helps, but keep in mind that the size of slides depends on width and height of your screen.
Installation
PlutoSlides.jl is not yet in the General registry. Hence to deal with the Pluto package manager smoothly the simplest way is to add my Local Registry :
import Pkg
Pkg.pkg"registry add https://github.com/dmetivie/LocalRegistry"
then the Pluto using PlutoSlides should work on the notebook.
You can also use a global environment of Pluto and add it from the GitHub repo directly:
Pkg.add("https://github.com/dmetivie/PlutoSlides.jl")
I’m hesitating to register PlutoSlides.jl in the General registry until stability and performance improve. I want to collect more real-world feedback first and address the major known issues.
Example workflow
My typical workflow for preparing a talk:
-
Open Pluto with auto-reload:
import Pluto; Pluto.run(auto_reload_from_file=true) -
Edit the
.jlnotebook file in my IDE where I can use LLM assistance for quick HTML/CSS/LaTeX/Markdown/Code tweaks (especially useful for converting existing Beamer slides or more complex HTML layout). -
Preview on a second screen (the laptop I’ll use for the actual presentation) in full-screen browser mode
-
Iterate: changes to the
.jlfile reload instantly in Pluto
On the road without a second screen, I just open the notebook directly on my presentation laptop and toggle slide mode with the button or hotkey.
Feedback wanted
If you try PlutoSlides.jl for a talk, demo, or lecture, I’d love to hear:
-
What worked well?
-
What broke? Performance or reactivity?
-
Feature requests or design suggestions?
Please open issues or discussions on GitHub. Small PRs are also very welcome — this is a community experiment!
If you have experience with JavaScript and want to help, don’t hesitate!