Why our slide decks are plain text files

Slaide keeps a slide deck in one plain-text file, so it diffs in git, reviews like code, and an agent can write it without touching a GUI.

I have written a lot of decks. Every one of them ended up as a binary sitting in a shared drive, and every one of them had the same three problems: I could not diff it, I could not review it, and I could not automate it. The fix turned out to be boring. Make the deck a text file.

What is a .slaide file?

It is Markdown for the words plus a short YAML block for the theme. That is the whole format.

theme:
  palette: ink
  font: IBM Plex Sans

# The problem
Decks are binaries.

- You cannot diff them
- You cannot review them
- You cannot generate them without a GUI

# The fix
Make the deck a text file.

That file renders to a web deck, to a PDF, and to a .pptx that opens and edits normally in PowerPoint. Same source, three outputs, no export dance in between.

Why does the source format matter so much?

Because everything you want to do with a deck downstream depends on it.

A binary deck cannot go through code review. You can attach it to a pull request, but nobody can see what changed between revision four and revision five, so nobody reviews it properly. A text deck shows up as a diff: three lines changed on the pricing slide, and the reviewer reads three lines.

A binary deck also cannot be written by an agent. This is the part that pushed me over. You cannot hand a model a .pptx and say “slide 12 is too wordy, fix it” - the model would have to drive a GUI or rewrite OOXML, and neither of those is a thing you want happening unattended. Hand it a text file and the job is ordinary text editing, which models are good at.

Slaide comes with an MCP server and an Agent Skill for exactly this. The agent reads the file, edits the file, and the renderer does the rest.

What about the PowerPoint problem?

This is the objection I get first, and it is a fair one. Nobody in a company runs on Markdown. “Send me the slides” means “send me something I can open and change”.

So .pptx export is not a screenshot dump. The exported file has real text boxes, real shapes and real editable content, and someone who has never heard of Slaide can open it and move a box around. Import works the other way too: give Slaide an existing .pptx and you get the text form back.

The round-trip was the hardest part of the project by a wide margin. OOXML is not a format that wants to be written by hand, and getting a slide to survive the trip out to PowerPoint and back without drifting took far longer than the renderer did.

Here is the honest limitation: a heavily designed deck does not survive a round trip perfectly. If your slides are full of hand-placed decorative elements and bespoke animations, importing them will flatten some of that. Slaide is best when the deck is mostly content, which in practice covers most working decks and not most conference keynotes.

What is open source and what is not?

Being specific about this matters more than being generous about it.

The core is Apache-2.0 and lives at github.com/aivorynet/slaide. That includes the renderer, the CLI, the .pptx import and export, the MCP server and the Agent Skill. If you want to render decks in CI, or generate them from a script, or build something on top of the format, that is the licence you are working under and there is no lock-in: the file is text, and the exporter is open.

The WYSIWYG editor is closed source. It is free once you sign in - that changed on 28 July 2026, and it changed because charging for the editor was getting me a number on a dashboard rather than users with a deck already in the thing.

The desktop viewer is Rust with a WebView, and it spawns the renderer as a separate binary.

Who is this actually for?

Three groups, in the order they show up:

Developers who already keep everything else in git and find it strange that the deck is the one artefact that cannot be reviewed. Teams who generate decks programmatically - weekly metrics, customer reports, anything where a human assembling slides by hand is a waste of a human. And people building with agents, who want a deck as an output format that a model can actually produce.

If you make a living designing beautiful bespoke presentations, this is not aimed at you and I would not try to convince you.

How do you start?

Install the core, write a file, render it.

npm install -g slaide
slaide render deck.slaide --out deck.pptx

That is the whole loop. The web deck and the PDF come out of the same command with a different --out.