DevSlides

Docs

Everything you need to write, style, and present a DevSlides deck. Every slide is plain Markdown — there is nothing else to learn to get a working deck on screen.

Getting started

How a deck comes together

A presentation is one Markdown document. In guest mode it lives in this browser (IndexedDB). Sign in and it syncs to your account in Postgres so you can open the same decks on another device. Open the Templates page to start from a full lesson, or press New on the home page for a blank deck.

  • The editor (left) is a plain-text Markdown editor with syntax highlighting.
  • The preview (right) renders the current slide at a real 16:9 aspect ratio.
  • The filmstrip along the bottom shows every slide as a thumbnail — click to jump, drag to reorder, or use the + button to add an empty slide.
  • The inspector (toggle from a slide) exposes layout, theme, motion, and image fields as form controls if you’d rather not hand-write frontmatter.
  • Changes autosave as you type — signed-in decks go to your account, guest decks stay local.

SaaS

Accounts, sync, and Pro

Sign in (top-right) with Google or email and password. Your name, decks, settings, and Pro status live in Postgres behind Row Level Security — only you can read or write them. Guest mode still works with no account; the first time you sign in, local decks in this browser are copied into your account.

Writing, themes, motion, and presenting stay free. PDF, PowerPoint, PNG, and standalone HTML exports are a one-time DevSlides Pro purchase via Razorpay, stored on your profile so it follows you across devices.

Markdown

Writing slides

Slides are separated by a line containing only ---. The first heading on a slide becomes its title.

# Binary Search

Search a sorted array in O(log n).

---

# The invariant

low <= mid <= high, and the answer is always inside [low, high].

Each slide can start with its own YAML frontmatter block to set layout, theme overrides, motion, and more:

---
layout: two-columns
motion: fade-up
---

# Two columns

Left column text.

---

Right column text.

Document-level settings (theme, title, default page transition) live in a frontmatter block at the very top of the file, before the first slide:

---
title: Binary Search Lesson
theme: ink
pageTransition: wipe
---

# Binary Search
...

Speaker notes are written as an HTML comment anywhere in a slide and never render on screen — only in presenter mode with N:

<!-- notes: Remind them binary search needs a sorted array first. -->

Structure

Layouts

Set layout: in a slide’s frontmatter to change how its content is arranged. Layouts are also available from the inspector’s Layout field.

Title + contenttitle-content

A big title with a body of Markdown underneath. The default layout.

Two columnstwo-columns

Splits the slide body into two columns at the first `---` on its own line.

Code + explanationcode-explain

Code on one side, explanation on the other — pairs well with `code-step`.

Image + textimage-text

The slide's first image sits beside the remaining text.

Centeredcentered

Everything center-aligned, useful for section breaks and big statements.

Comparisoncomparison

Two labeled panels side by side, great for before/after or option A vs B.

Array visualizationviz-array

A live, steppable array diagram (search, sort, pointers).

Binary treeviz-tree

A live binary tree diagram.

Linked listviz-list

A live singly linked list diagram.

Graphviz-graph

A live graph diagram for traversals like BFS/DFS.

Stackviz-stack

A live stack diagram, handy for recursion and call-stack explanations.

Queueviz-queue

A live queue diagram.

Time complexityviz-complexity

A live Big-O graph with draggable input size.

Asciinemaasciinema

Plays a `.cast` terminal recording, dropped in or pasted as a `cast` fence.

Style

Themes

Set theme: in the document frontmatter, or pick one from the editor’s Theme menu. Themes control background, ink color, accent color, and code highlighting together.

Inkink

Dark, high-contrast teaching

Paperpaper

Light classroom deck

Terminalterminal

Near-black with amber accents

Dotteddotted

White canvas with faint dots

Gridgrid

White graph paper

Rulerruler

Large faded squares with a scale

Ruledruled

Notebook paper with blue ruled lines

Media

Images

Add an image with the toolbar’s Image button, the inspector, by pasting from your clipboard, or by dropping a file on the slide. It’s stored in Markdown as a normal image tag:

![alt text](https://example.com/diagram.png)

Small files are embedded directly as a data: URL so the deck stays a single, self-contained Markdown file. Large embedded images are automatically shown as a collapsed, clickable placeholder in the editor instead of one unreadable line — click it to expand and edit the raw data if you ever need to. Layout image-text places the slide’s first image beside the remaining text.

Animation

Motion & text effects

Framer Motion animates titles, text, images, and diagrams while presenting. Configure it per slide in frontmatter:

---
motion: fade-up
stagger: 0.08
duration: 0.45
---

motion accepts an enter preset for how a slide’s content appears:

nonefadefade-upfade-downslide-leftslide-rightzoompopbounce

…or a text preset that plays once when the slide enters:

revealtypewritersplittext-skewrollswaptext-filltext-strokepopoutweightdissolveperspectiveblurblur-outhighlight

Looping presets repeat continuously and are best applied to a single element rather than the whole slide (see below):

wavewobbleglitchneonmarqueecircleflowblobgradientshimmerrainbowaurorafirehueglintscanchromaticpulseheartbeatflickerblinktext-floatbounce-loopjittersparkleswingelastictype-loop

Override motion per element by writing the preset as an HTML attribute:

<p fade-up>This paragraph fades up.</p>

<p motion="slide-left" delay="0.2">This one slides in later.</p>

<p wave>Looping wave letters.</p>

<p gradient>Looping gradient color.</p>

<motion zoom stagger="0.1">- First - Second</motion>

delay and duration take seconds (0.2) or CSS time (200ms). Set motion: none to keep a slide static. For swap headings, put the options directly in the title: # Search | Sort | Graph with motion: swap.

Pacing

Page transitions & advance modes

pageTransition: in the document frontmatter sets the default animation between slides; transition: on a slide overrides it for the transition into that slide:

nonefadeslideappearpushcoverwipestagger-wipeblindsdoorsirisshutterpixelszoomflip

Two special transition: values change how behaves on a slide instead of animating the page:

Clicksclicks

Reveals paragraphs, list items, and blocks one at a time before moving to the next slide.

Code stepcode-step

Reveals a code block’s highlighted line groups one step at a time (pair with {1-2,4} line ranges on the fence).

Open the Page transitions and Text motion templates from the Studio category to try every preset live.

Teaching code

Code blocks & the C++ runner

Fenced code blocks get syntax highlighting for any language. Add line ranges in curly braces to progressively highlight lines with transition: code-step:

```cpp {1-2,4}
int left = 0;
int right = n - 1;

int mid = left + (right - left) / 2;
```

C++ fences become a small in-slide editor with a Run button. They compile with clang++ or g++ and print stdout beneath the code. Add run after the language to auto-execute the moment the slide opens in Present mode:

```cpp run
#include <iostream>
int main() {
    std::cout << "Hello\n";
}
```

Diagrams that run

Live visualizers

Seven layouts render an interactive diagram instead of static text — useful for stepping through an algorithm live instead of drawing on a whiteboard: viz-array, viz-tree, viz-list, viz-graph, viz-stack, viz-queue, and viz-complexity. Configure the data through slide frontmatter or the inspector’s Visualizer field. For example, a live Big-O graph:

---
layout: viz-complexity
curves: [logn, n, nlogn, n2]
algorithm: binary-search
inputSize: 32
---

Once presenting, drag the input-size handle directly on the slide, or use to step through the algorithm’s visualization frame by frame.

Beyond text

Diagrams & terminal recordings

A mermaid fence renders a live flowchart, sequence, or class diagram:

```mermaid
flowchart LR
  Hook --> Model
  Model --> View
```

Layout asciinema plays a terminal recording — drop a .cast file on the slide, or embed one directly in a cast fence for a fully self-contained deck.

Show time

Presenting

Press Present in the toolbar (or open /present/<id> directly) to go fullscreen with a floating toolbar for navigation, drawing, notes, adding a slide on the fly, and returning to the editor without leaving the stage.

  • Draw — freehand ink on top of the current slide; strokes are saved per slide and cleared per deck.
  • Notes — a speaker-notes panel that only you (the presenter) see.
  • Slide editor — a lightweight Markdown editor overlay so you can fix a typo or add a bullet without leaving presenter mode.
  • Add empty slide — insert a fresh slide right after the current one mid-talk, for a live tangent or a question from the room.

Muscle memory

Keyboard shortcuts

While presenting:

/Space/Enter/Page DownNext slide / step
/Backspace/Page UpPrevious slide / step
1//9Jump straight to slide 1–9
FToggle fullscreen
DToggle draw mode
NToggle speaker notes
EToggle the slide editor overlay
AAdd an empty slide after the current one
OSlide overview grid
EscClose overview / notes / editor, or exit drawing

In the editor’s own preview pane:

/Space/Enter/Page DownNext slide / step
/Backspace/Page UpPrevious slide / step
NToggle speaker notes

Ship it

Export & sharing

The toolbar’s Export menu turns your deck into a PDF (one 16:9 page per slide), a PowerPoint file, a PNG for every slide (zipped), the raw Markdown source, or a standalone HTML file that plays the whole deck — motion, drawings, and all — with no server or dependency, anywhere.

Writing, themes, motion, and presenting are free forever. PDF, PowerPoint, PNG, and standalone HTML exports are a one-time DevSlides Pro unlock — sign in, pay once with Razorpay, no subscription. Raw Markdown export is always free.

Share currently copies the Markdown or downloads a standalone HTML file. Signed-in decks already live in your account; public view links are still a later feature.

Ready to build something?

Browse templates