Your files never leave your device. All processing happens locally in your browser.
How do I make a slide deck online for free without uploading anything or installing PowerPoint?
Open the Presentation Maker, pick a starter deck (startup pitch, business report, lesson or minimal) or start blank, then build 16:9 slides using six layouts — title, title + bullets, two-column, section header, image + caption and blank. Edit text, shapes and uploaded images directly on a live canvas (drag, resize, rotate), restyle the whole deck with one of six themes, reorder slides in the thumbnail rail, and play it fullscreen in present mode. Export the current slide as a PNG or the whole deck as a flat PDF, and save the deck as JSON. Everything runs in your browser — your text and images never leave your device.
16:9 deck: add / duplicate / delete / reorder slides in a thumbnail rail
Six layouts + editable text, shape & uploaded-image layers you drag & resize
Deck-wide themes recolour titles, body, accents & backgrounds (system fonts)
Present fullscreen with arrow-key / click navigation, Esc to exit
Export a PNG per slide or a flat PDF; save / load the deck as JSON
What is
presentation maker
A presentation maker is a tool for building a slide deck — an ordered set of 16:9 slides carrying titles, bulleted text, shapes and images — and presenting or exporting it. A 100% client‑side presentation maker runs entirely in the browser: each slide is drawn onto an in‑browser canvas, uploaded images are composited locally, and the deck is exported as a PNG per slide or a flat PDF (one page per slide) rather than an editable .pptx, so nothing is uploaded to a server.
No. Slides are drawn on an in‑browser canvas and images are read locally, so nothing is uploaded.
The Presentation Maker is 100% client‑side. Each slide is a small object of text, numbers and colours that a pure engine draws straight onto an in‑browser <canvas>. Images you add are read locally with a FileReader and embedded in the deck as data‑URLs — they are never sent to a server or CDN. PNG export is a local canvas.toBlob, the PDF is assembled in memory with pdf‑lib, and the deck auto‑saves to your browser’s localStorage and to a JSON file you download. Nothing is fetched, uploaded, logged or stored on a server, and the tool works offline once cached.
No — it exports a flat PNG per slide or a raster PDF (one page per slide), not an editable .pptx or Slides file.
To keep everything on‑device and private, the deck exports as pictures: a high‑resolution PNG for the current slide, or a PDF with one 13.33×7.5 in widescreen page per slide, each page a raster image of that slide. So the PDF text is a picture, not selectable, and there is no editable .pptx or Google Slides output. To keep editing later, save the deck as JSON and re‑open it in this tool — the JSON is the editable, re‑loadable source of your deck.
Six slide layouts, six deck‑wide themes and four starter decks, plus a fullscreen present mode with keyboard navigation.
Every slide can use one of six layouts — title, title + bullets, two‑column, section header, image + caption and blank — and you can add extra editable text, shape and image layers on top. Six deck‑wide themes (Midnight, Ivory, Teal, Corporate, Sunset and Mono) recolour titles, body, accents and backgrounds and set a system‑font pairing in one click, and four starter decks (startup pitch, business report, lesson and minimal) give you a running start. Present mode plays the deck fullscreen: right‑arrow / space / click advances, left‑arrow goes back, Home / End jump to the first / last slide, and Esc exits.
On‑screen type uses your device’s system font stacks so it can look slightly different elsewhere; the exported PNG / PDF is fixed.
To avoid downloading any webfont and to work offline, text is set in system font stacks (Helvetica, Segoe/Roboto, Georgia, Rockwell, Impact, Trebuchet, Consolas). Your machine renders its own version of each stack, so live on‑screen type can look slightly different on another computer or OS. Once you export, the PNG and the PDF are flattened rasters, so those files look the same everywhere — only the live, editable deck depends on the viewing device’s fonts. Keep the JSON if exact type matters and re‑open it on the same kind of device.
Detailed Explanation
📖How It Works
What the Presentation Maker Does
The Presentation Maker is a 100% client-side slide-deck editor. You build an ordered set of 16:9 slides, each starting from one of six LAYOUTS (title, title + bullets, two-column, section header, image + caption, blank), then layer editable TEXT, SHAPES and uploaded IMAGES on top and drag, resize and rotate them on a live WYSIWYG canvas. A deck-wide THEME sets the colour scheme and a system-font pairing, a thumbnail rail adds / duplicates / deletes / reorders slides, PRESENT MODE plays the deck fullscreen, and you export a PNG per slide or a flat PDF and save / load the whole deck as JSON. Nothing is ever uploaded — every slide is drawn on an in-browser canvas.
16:9 deck with six layouts and a thumbnail rail (add / duplicate / delete / reorder)
Editable text, shape and uploaded-image layers — drag, resize, rotate
Six deck-wide themes recolour titles / body / accents / backgrounds and set fonts
Fullscreen present mode with arrow-key / click navigation and Esc to exit
Export PNG per slide or a flat PDF; save / load the deck as JSON
⚙️Methodology
How It Builds and Renders a Deck
Each slide is a plain, typed object — a background plus a list of layers, every layer positioned in resolution-independent DESIGN UNITS on a fixed 1280×720 (16:9) artboard. A single pure function, drawSlide(), paints that model onto a Canvas 2D context at whatever scale the caller sets, so the SAME code renders the editor preview, every thumbnail, present mode and every exported pixel — what you see is exactly what you get. Layers carry a semantic ROLE (title, subtitle, body, bullets, accent), which is how a deck-wide theme works: switching theme recolours each layer by its role and re-applies the theme’s background and system-font pairing across every slide at once, instead of forcing you to restyle slides one by one. Bulleted bodies wrap each source line to the column width with a hanging indent and a drawn bullet dot.
Slides stored in design units on a fixed 1280×720 (16:9) artboard
One drawSlide() paints preview, thumbnails, present mode and exports identically
Layers tagged by role so a theme recolours the whole deck consistently
Bulleted bodies wrap with a hanging indent; text height auto-fits content
🔧Technical Details
Export & Persistence Details
PNG export renders the current slide to an offscreen canvas at 1920px wide and calls canvas.toBlob. PDF export loops the deck, rasterises each slide to a PNG and embeds it full-bleed onto a pdf-lib page sized 960×540 pt (the standard 13.33×7.5 in widescreen), producing one 16:9 page per slide; pdf-lib is already a dependency and is dynamically imported so it only loads when you export. The deck auto-saves to localStorage on every edit and can be exported / imported as a JSON file; uploaded images are embedded in that JSON as data-URLs, so a saved deck restores its pictures on re-open. Imported JSON is parsed defensively — a malformed file is rejected rather than crashing the editor. Type is set only in system font stacks, so no webfont is fetched and the tool works offline once cached.
PNG: current slide rendered to 1920px, saved via canvas.toBlob
Auto-save to localStorage + JSON export/import with images embedded as data-URLs
Defensive JSON parsing; system-font stacks only, no CDN, works offline
⚠️Limitations
Honest Limitations
This is a deck builder, not PowerPoint. It exports a FLAT deck — a PNG per slide or those slides as raster pages in a PDF — NOT an editable .pptx or Google Slides file, so PDF text is a picture and cannot be selected; the JSON is the only editable, re-loadable source. Type uses your device’s system font stacks with no embedded webfont, so a face can look slightly different on another machine (the exported raster is fixed). There are no slide transitions, animations, speaker-notes / presenter view, charts or embedded video, and present mode simply plays your static slides fullscreen. Because uploaded images are embedded as data-URLs, an image-heavy deck can exceed the browser’s roughly 5 MB localStorage quota — if auto-save stops persisting, export the JSON to keep the deck. Very large decks are also memory-heavy to rasterise at export time on low-end devices.
Flat export (PNG / raster PDF) — not an editable .pptx or Slides file
System fonts only — on-screen type varies slightly across machines
No transitions, animations, speaker notes, charts or embedded video
Images embedded as data-URLs can exceed the ~5 MB localStorage quota — export JSON
🔒Privacy & Security
Private by Design
Everything happens on your device. Each slide is a small object of text, numbers and colours that a pure engine draws straight onto an in-browser <canvas>. Images you add are read locally with a FileReader and embedded in the deck — they are never sent to a server or CDN. PNG export is a local canvas.toBlob and the PDF is assembled in memory with pdf-lib. The deck auto-saves to this browser’s localStorage and to a JSON file you download, both of which stay on your machine. Nothing is fetched, uploaded, logged or stored on a server, there is no CDN in the render or export path, and fonts are the device’s own system stacks. The only optional network use is consent-gated ads; the tool works offline once cached, keeps no accounts and sets no tracking, and your work is discarded when you close the tab unless you saved it.
Slides are local data drawn onto an in-browser <canvas>
Uploaded images read locally with FileReader and embedded — never uploaded
PNG via canvas.toBlob; PDF assembled in memory with pdf-lib
No server, no CDN, system fonts only; optional consent-gated ads