shipslides
← Back to blog

How to Host a Reveal.js Presentation for Free (Without GitHub Pages)

Reveal.js is the go-to framework for building HTML slide decks, and nearly every tutorial ends the same way: push your deck to a GitHub repo, flip on GitHub Pages, wait for the build, and share the URL. If you already live in git, that is fine. But if you just want to host a Reveal.js presentation without GitHub Pages, the whole routine can feel like a lot of ceremony for one slide deck.

This guide covers the fastest free Reveal.js hosting path -- exporting your deck to a single self-contained HTML file and publishing it in about 30 seconds -- and gives a fair rundown of the other GitHub Pages alternatives and where each one bites you.

Why people look for a GitHub Pages alternative

GitHub Pages is genuinely great for what it is. It just was not designed for “I have one HTML file and I want a link.” To use it you typically have to:

  • Create a repository and commit your deck to it
  • Configure a publishing source -- a gh-pages branch or a /docs folder -- and wait for the build to run
  • Deal with base-path issues, since a project site lives at username.github.io/repo/ and relative asset paths often break
  • Optionally wrangle a custom domain and DNS records if you do not want the default URL

There is also a licensing wrinkle worth knowing: GitHub Pages is intended for personal, project, and organization sites, and its terms prohibit running a commercial hosting service or using Pages primarily for commercial, transactional purposes. For a conference talk that is a non-issue, but if the deck is a sales pitch or a paid client deliverable, it is a reason people go looking for something else.

The fast path: one file, one upload

Shipslides takes a single self-contained HTML file and hands you back a clean, permanent public URL plus an embed. No repo, no branch, no build step, no DNS. Drag the file onto the drop zone and you have a shareable link before GitHub Pages would have finished its first build.

A few things make it a good fit specifically for Reveal.js decks rather than generic file hosting:

  • Free and permanent -- the link does not expire and does not roll onto a paid tier, and there is no ToS clause banning commercial use.
  • Clean URL -- a short, readable share address instead of a random subdomain or a deep user.github.io/repo/ path.
  • Sandboxed JavaScript -- your deck runs inside a strict iframe sandbox with a tight Content Security Policy, so viewers can open the link without worrying about what the scripts touch.
  • Slide-aware -- Shipslides extracts a crawlable text transcript from your slides, so the share page carries real content for search engines and link previews instead of an opaque blob of HTML.

Export your Reveal.js deck to a single self-contained HTML file

The one requirement is that everything the deck needs -- CSS, JavaScript, fonts, and images -- travels inside the file you upload. A default Reveal.js project pulls those from a dist/ folder and a plugin/ folder, so you need to inline or bundle them first. You have two clean options.

Here is the one detail that trips people up: Shipslides runs your deck in a strict sandbox that blocks external scripts and stylesheets -- that is exactly what makes it safe to open a link from someone you do not know. So unlike hosting on your own server, you cannot point at a CDN for Reveal.js at runtime; the framework code has to travel inside the file. (Google Fonts stylesheets are the one external exception the policy allows -- everything else must be inlined.)

The reliable way to get there is a single-file bundle. A bundler such as vite-plugin-singlefile (or an inliner like inline-source) folds your CSS, the Reveal.js JavaScript, your theme, and images -- as base64 data URIs -- into one self-contained document:

# in a Vite-based reveal.js project
npm i -D vite-plugin-singlefile
# add viteSingleFile() to plugins in vite.config.js, then:
npm run build   # -> dist/index.html with everything inlined

Prefer to do it by hand? Paste the contents of reveal.css, your theme, and reveal.js directly into <style> and <script> tags, and swap image src paths for base64 data URIs.

Either way, do a quick sanity check: open the exported file directly from your filesystem (double-click it) with no dev server running. If it renders and navigates correctly offline, it will render correctly once uploaded.

Then head to the upload page, drop the file in, and copy your link. That is the whole workflow. If you want the longer, framework-agnostic version, the guide on how to share HTML presentations walks through Slidev, impress.js, and plain HTML too.

The other free options (and their catches)

GitHub Pages is not the only alternative, and depending on your needs one of these might suit you better. Here is an honest look at where each free tier falls short for a slide deck you want to keep around:

  • Netlify Drop -- genuinely drag-and-drop and instant, but deploys made this way are temporary and land on a random, unmemorable URL. It is great for a throwaway preview, less so for a link you will paste into a resume or a client email months later.
  • Vercel / Netlify free tiers -- polished and permanent, but the free (hobby) plans are for non-commercial use per their terms, so a paid deck or a business landing page technically needs a paid plan. You also still deploy from a git repo or CLI.
  • Tiiny.host -- upload a single HTML file and get a link, which is close to what you want, but on the free tier you get one site that expires after 7 days; keeping it live moves you onto a paid plan (around $15/month at present time).

The gap those options leave -- free, permanent, a clean URL, no repo, and no commercial-use asterisk -- is exactly the slot Shipslides fills. It also works well if your deck did not start life in an editor at all: see sharing an AI-generated HTML deck for that flow, and the Reveal.js decks on Shipslides page for live examples.

Frequently asked questions

Do Reveal.js transitions and plugins still work?

Yes. Your deck runs as real HTML, CSS, and JavaScript inside a sandboxed iframe, so slide transitions, fragments, auto-animate, and plugins like highlight.js, math, and search behave exactly as they do locally -- as long as their code is inlined or bundled into the single HTML file you upload. Anything that phones home to a live server at present time is the only thing you need to inline first.

Is it really free forever?

Yes. Uploading a deck and getting a public share URL plus an embed is free, and the link is permanent -- it does not expire after 7 days or roll onto a paid plan. There is no git repo to maintain and no build minutes to run out of. Unlike a GitHub Pages project, there is also no ToS clause forbidding commercial use, so you can link a Shipslides deck from a product page or a client proposal.

Can I use a custom theme or speaker notes?

Custom themes work fine -- write your own CSS or override the built-in Reveal.js theme, then make sure that CSS is inlined in the file you upload. Speaker notes stored in the deck are preserved, and Reveal.js speaker view opens in a second window as usual when you present. Shipslides serves the exact file you give it, so whatever renders on your machine renders for your viewers.

How is this different from slides.com?

slides.com is a hosted editor: you build decks in their web app and hosting is tied to that account, with a free tier that keeps your decks public and paid tiers for private ones. Shipslides is not an editor -- you keep authoring in Reveal.js however you like, then upload the finished HTML file for a clean public URL and embed. If you already have a deck, or you generated one with an AI tool, there is nothing to rebuild.

Have a Reveal.js deck ready?

Upload the HTML file and get a free, permanent, shareable link instantly.

Upload to Shipslides