Export
A static site, a PDF, or a PPTX of images — none of which need a server.
A deck has to leave the tool eventually: someone wants to read it who was not in the room, or a client wants it in the format their company uses. There are three ways out and none of them require anything running.
A static site
npx beem-slide build # emits dist/
npx beem-slide preview # serves dist/ so you can check itdist/ is ordinary files. Everything renders in the browser, but there is no
server component to keep alive — put it on Vercel, Cloudflare Pages, Netlify,
Zeabur, GitHub Pages, or an S3 bucket behind a CDN. The scaffold ships
vercel.json and netlify.toml so the first two need no configuration.
From the app
The download menu in the deck header offers three formats:
Export as HTML — one self-contained file. Opens by double-clicking it out of a folder, works from a USB stick, survives being emailed.
Export as PDF — a page per slide at 1920 × 1080 landscape, so nothing is letterboxed or reflowed. The export waits for fonts to load and for animations to settle before it captures, which is why a page with an entrance animation comes out in its final state rather than mid-flight.
Export as image PPTX — a PowerPoint file where each slide is a full-bleed image. Use it when the recipient's process is PowerPoint-shaped and they will not be editing the content. The slides are pictures: nobody can retype your headline, and nobody can fix your typo either.
Choosing what ships
beem-slide.config.ts decides what a build contains. This matters most for a
deck you are sending outside your team, where the framework's own furniture is
not something you want to hand over:
import type { BeemSlideConfig } from '@beem-slide/core';
const config: BeemSlideConfig = {
build: {
slides: ['q2-launch'], // only this deck; omit for all of them
showSlideBrowser: false, // no deck index
showSlideUi: false, // no on-canvas chrome
allowHtmlDownload: false, // no download button in the viewer
basePath: '/decks/q2', // if it is not served from the domain root
},
};
export default config;Two things worth knowing about that block.
slides only applies to build. dev always serves everything under
slides/, so restricting what you publish never costs you decks to work
against locally.
Naming exactly one deck and turning showSlideBrowser off makes that deck the
site — it renders at the root, instead of the root being the deck index that no
longer exists.
basePath sets the asset base and the router basename together, so the same
bundle works under any path prefix without touching a link.