Static Site Downloads
The download option packages the entire built site as a ZIP archive. It's the universal deploy escape hatch: if a host accepts a folder of static files, the download works. Cloudflare Pages, Vercel, AWS S3, GitHub Pages, Render, a server in your basement — they all serve a SleekCMS-built site without any platform-specific integration.
This page covers what's in the ZIP, how to deploy it, and a few common hosts with specific guidance.
What's in the ZIP
A download contains a complete static site:
my-site/
├── index.html Homepage
├── about/index.html Static page
├── blog/
│ ├── index.html Collection index page (if defined)
│ ├── hello-world/index.html
│ └── nextjs-tips/index.html
├── css/
│ ├── tailwind.css Compiled Tailwind (if enabled)
│ └── styles.css Your own CSS files
├── js/
│ └── app.js
├── favicon.ico
├── fonts/
│ └── inter-var.woff2
└── rss.xml Any custom page outputs (RSS, sitemap, etc.)
Every URL on your deployed site corresponds to a file in the ZIP. Page paths follow the directory-with-index.html convention (/about → about/index.html) which is the universally supported way to serve clean URLs from static hosts.
Images are not in the ZIP. Image content is served from the SleekCMS image CDN — your deployed HTML references those CDN URLs directly. This keeps downloads small and preserves the on-the-fly transformation capability. The same is true for hosted videos and uploaded files: they stay on their respective CDNs.
Generating a Download
From the deploy section in the CMS:
- Click Download (or the equivalent download option).
- The CMS triggers a fresh build using the current content and templates.
- When the build completes, the ZIP is offered as a browser download.
You can download as often as you want. Each download is a fresh build with the current state of your content.
Deploying the ZIP
The deployment steps depend on your host. A few common patterns:
Cloudflare Pages
- From the Cloudflare dashboard, create a new Pages project.
- Choose the "Direct Upload" option (not the Git-connected option).
- Upload the contents of the ZIP (or upload the ZIP itself — Cloudflare extracts it).
- The site is served at
<project>.pages.dev(or your custom domain).
Subsequent deploys: drag-and-drop a new ZIP into the same project, or use the wrangler CLI for scripted uploads.
Vercel
- Install Vercel CLI:
npm i -g vercel. - Extract the ZIP locally and
cdinto the folder. - Run
vercel. Follow the prompts; choose a project name; deploy.
Subsequent deploys: vercel --prod from the same folder.
AWS S3 + CloudFront
- Create an S3 bucket configured for static website hosting.
- Extract the ZIP and upload the contents to the bucket (e.g.,
aws s3 sync ./extracted-site s3://your-bucket --delete). - Front the bucket with CloudFront for HTTPS and edge caching.
- Invalidate the CloudFront distribution on each deploy (
aws cloudfront create-invalidation --distribution-id XXX --paths "/*").
GitHub Pages
- Extract the ZIP.
- Push the extracted folder's contents to the root of a
gh-pagesbranch (or to the configured Pages source branch) in a GitHub repository. - Enable Pages on the repo. The site is served at
<user>.github.io/<repo>.
Your own server
Extract the ZIP and serve the folder from any static-file-capable web server — nginx, Caddy, Apache, even Python's http.server for testing. Configure the server to serve index.html for directory requests and handle 404s by serving your 404.html (if you've defined one).
A minimal nginx config:
server {
listen 80;
server_name example.com;
root /var/www/my-site;
index index.html;
error_page 404 /404.html;
location / {
try_files $uri $uri/index.html =404;
}
}
Setting the Site Origin
If your deployed URL differs from any defaults (e.g., you're deploying to a custom domain like https://docs.example.com), set the site origin in Site Configuration before downloading. The url() template helper uses the origin when constructing absolute URLs in your HTML — canonical links, OG image URLs, RSS feed URLs, and <base> tags. Setting it correctly before download ensures the deployed HTML references the right public URLs.
Automating ZIP-Based Deploys
For hosts that don't have first-class SleekCMS integration but where you want automated deploys, you have two paths:
- Manual download per release. Download, upload to the host. Works fine for low-frequency deploys.
- API-driven build trigger from your CI. Use the content API to fetch site content into your own build pipeline, run a Node-based EJS builder there, and deploy from CI. This is essentially "build outside SleekCMS using SleekCMS content" — see Automating using Triggers for how to wire publish events to a CI build.
For most use cases, the first path is sufficient. The download option is fast (typically seconds), and most static hosts accept drag-and-drop uploads.
What's Next
- Deploying Sites — Overview of all deploy targets.
- Deploy site via Netlify — First-class Netlify integration.
- Deploy site via surge.sh — Quick public URLs.
- Automating using Triggers — Triggering external builds from publish events.
- Site Configuration — Setting the site origin for absolute URLs.