Design visually. Keep readable source. Present without the cloud.
Rayslides is a visual slide editor and presenter built with Zig and
raylib. Edit a deck on the canvas or in its
plain-text .sld source. Both views stay in sync.
With Rayslides, you can:
- edit slides directly and reuse items;
- author raster/SVG images, videos, rounded shapes, lines, arrows, aligned text, and rotated objects through source-backed Studio controls;
- add reveals, transitions, and semantic morph states, authored visually in Studio's Motion tab with a live preview;
- read private notes and control a deck from a phone;
- run Crowdplay polls on the local network;
- preflight the exact deck and create a verified portable show folder;
- save PNG screenshots and export a PDF; and
- build native programs for macOS, Linux, and Windows.
Rayslides requires Zig 0.16.x. The minimum version is Zig 0.16.0.
zig build -Doptimize=ReleaseSafe
zig-out/bin/rayslidesRun the program without a file to open Studio's new-deck chooser. Use
--studio to edit an existing deck:
zig-out/bin/rayslides --studio talk.sldBefore travel, run Showtime from Studio's Commands menu, write a CI-friendly report, or create a portable copy with ordinary source and assets:
zig-out/bin/rayslides --showtime-report=showtime.json talk.sld
zig-out/bin/rayslides --portable-show=talk-portable talk.sldBlockers make either command exit nonzero. The portable command refuses an
existing destination, rewrites copied asset references under assets/, then
re-opens and preflights the copy before it succeeds.
During development, use zig build run -- talk.sld. On macOS,
zig build -Doptimize=ReleaseSafe macos-app also creates
zig-out/Rayslides.app.
Live camera items use the video renderer and therefore support fitting, cropping, rotation, opacity, morphs, posters, and the existing playback pill:
@box cam=0 video_size=1920x1080 poster_image=assets/camera-off.png x=520 y=180 w=880 h=560 fit=cover rotation=-12
On macOS, run camera decks from the bundled Rayslides.app so the system can
request camera permission. On Linux, use the intended V4L2 path such as
cam=/dev/video0 or preferably its stable /dev/v4l/by-id/... symlink, and add
cam_format=mjpeg to reach a mode the camera offers in MJPEG alone - commonly
every mode above 640x480.
- Read the online documentation
- Create your first deck
- Learn the Studio interface
- Add reveals, transitions, and morph states
- Use Presenter Companion
- Run a Crowdplay poll
- Write
.sldsource - Browse controls and limits
Rayslides began as a raylib-based port of renerocksai/slides. It now combines visual editing with its text-based foundation.



