How to Guides

Exporting Your Website

Download your website as a portable bundle you can host on GitHub Pages, Netlify, Cloudflare Pages, or any static host

Exporting Your Website

Your website on r2ware is a normal Jekyll project stored in a git repository — nothing in it is locked to our platform. When you want to move it (or just keep a backup that can run anywhere), use the Export tool to download it as a portable bundle.

You don't lose anything by exporting. Your website on r2ware stays exactly where it is. Export is a one-way download — what you do with the bundle next is up to you.

Requires a paid plan. Export is available on any active paid subscription. Trial websites can't export — upgrade first if you're still in trial.

Limit: 3 exports per website per day. Failed exports don't count, so a flaky network on a media-included export won't burn a slot.

Two choices to make

Open your website in the dashboard, go to Developer → Export, and you'll see two questions:

1. What kind of bundle?

  • Static files only — A .zip of your built website. Plain HTML, CSS, images, ready to serve. No build step required. Use this if you just want to put the site on a host as-is.
  • Jekyll source — A .zip of your website's source files (_config.yml, _layouts/, _includes/, etc.) plus a Gemfile and a GitHub Actions workflow. Pick this if you want to keep editing the site after export, or if your destination host can rebuild Jekyll for you.

2. Include media files?

By default, images and other uploads stay on r2ware's CDN — your exported site keeps loading them from us. If you want a fully standalone bundle that doesn't depend on us at all, check Include media files.

When checked, the export builds the site, scans the rendered HTML for every media URL pointing at our CDN, downloads those files, and rewrites the URLs to be relative. We use the rendered output rather than parsing your templates so we don't miss images loaded by CSS, inline styles, or anywhere else a URL might end up.

A small caveat: if your templates build CDN URLs dynamically (e.g. /photo.jpg), the images will be bundled, but the Liquid that builds the URL won't be rewritten — you'll need to change the relevant _config.yml setting on the exported site so it produces relative paths.

That's it. Click Start export. We'll:

  1. Build the bundle in the background.
  2. Email you a download link when it's ready, to the address on your account.
  3. Show the same link in Developer → Export → Recent exports (and the full Export history page) if you'd rather not wait for email.

The link is good for 24 hours, then expires. If you miss the window, just run the export again.

Most exports finish in seconds. Larger ones (Jekyll source with media on a media-heavy site) can take a few minutes.

What survives an export, and what doesn't

These work the same on any host:

  • All your pages, posts, layouts, includes, data files, and assets
  • Your Jekyll configuration
  • Anything stored in git

These are r2ware platform features and will stop working on the exported site:

  • Form submissions — exported forms point at a placeholder. You'll need a third-party form backend (Formspree, Tally, your own server).
  • Shop / checkout — order processing runs on the platform. Exported shop pages will be static product listings without checkout.
  • E-signature flows — the agreement-signing workflow is platform-only.
  • Decap CMS — the admin config is removed from the Jekyll bundle. You can re-enable it after export by wiring Decap to a Git Gateway provider yourself.
  • Media uploads — if you didn't check "Include media files," exported pages still reference the r2ware CDN. They keep working as long as r2ware does.

Hosting the bundle

Once you have the zip, you can host it anywhere. Here are the most common destinations.

GitHub Pages

GitHub Pages is the most common host for Jekyll sites. The flow is slightly different for each bundle kind.

With the Jekyll source bundle (GitHub builds the site for you):

  1. On GitHub, click +New repository. Give it a name. Public or private both work.
  2. Don't initialize with a README — leave it empty.
  3. On your computer (replace the filename with whatever the export pipeline produced — <slug>-YYYY-MM-DD-<sha8>.zip):
    mkdir mysite && cd mysite
    unzip ../mysite-2026-05-20-a1b2c3d4.zip
    git init
    git add .
    git commit -m "Initial commit from r2ware export"
    git branch -M main
    git remote add origin git@github.com:YOUR-USER/YOUR-REPO.git
    git push -u origin main
    
  4. On GitHub, open the new repo → SettingsPages.
  5. Under Source, choose GitHub Actions.
  6. Wait 1–2 minutes. GitHub will run the workflow we included in your bundle and publish the site. The Pages URL appears at the top of the page.

With the static files bundle (GitHub just serves what's there):

  1. Create a repo and push the bundle the same way as above.
  2. On GitHub: SettingsPages.
  3. Under Source, choose Deploy from a branch, then main / / (root).
  4. Save. After a minute the site is live.

Heads up about baseurl — if your repo isn't named <username>.github.io, your site will live at https://<username>.github.io/<repo>/. Update baseurl: "/<repo>" in _config.yml (Jekyll bundle) or expect broken asset paths until you do.

Netlify

Netlify has two paths — drag-and-drop, or connect to a git repo.

Drag and drop (static bundle):

  1. Go to app.netlify.com/drop.
  2. Drag the unzipped bundle folder onto the page.
  3. Netlify hosts it at a random *.netlify.app URL. Click Site settings → Change site name to pick something readable.

Connect a repo (Jekyll bundle):

  1. Push the bundle to GitHub, GitLab, or Bitbucket (steps 1–3 from the GitHub Pages section above).
  2. On Netlify: New site from Git → pick the repo.
  3. Build settings:
    • Build command: bundle exec jekyll build
    • Publish directory: _site
  4. Add environment variable JEKYLL_ENV=production under Site settings → Environment variables.
  5. Click Deploy.

Netlify will rebuild your site on every push.

Cloudflare Pages

Cloudflare Pages also supports both flows.

Direct upload (static bundle):

  1. In the Cloudflare dashboard: Workers & PagesCreate applicationPagesUpload assets.
  2. Pick a project name.
  3. Drag the unzipped bundle folder.
  4. Cloudflare gives you a *.pages.dev URL.

Connect a repo (Jekyll bundle):

  1. Push the bundle to GitHub or GitLab.
  2. Cloudflare Pages: Create applicationPagesConnect to Git → pick the repo.
  3. Framework preset: Jekyll. Build command and output directory pre-fill correctly.
  4. Click Save and Deploy.

Your own server (nginx, caddy, apache)

The static bundle is the simplest path. Unzip onto the server and point your web server at it:

# nginx
server {
    listen 80;
    server_name example.com;
    root /var/www/mysite;
    index index.html;
    try_files $uri $uri/ $uri.html =404;
}
# Caddyfile example.com { root * /var/www/mysite file_server try_files {path} {path}/ {path}.html }

If you want the server to rebuild from source (Jekyll bundle): install Ruby 3.2+, run bundle install, then bundle exec jekyll build. Point the web server at _site/ and trigger a rebuild on each git pull.

S3 + CloudFront

The static bundle uploads cleanly:

aws s3 sync ./mysite/ s3://your-bucket/ --delete
aws cloudfront create-invalidation --distribution-id YOUR-DISTRO --paths "/*"

Make sure the bucket is configured for static website hosting and that CloudFront's origin is set to the S3 website endpoint (not the bucket directly) so try_files-style routing works for clean URLs.

Editing after export

If you took the Jekyll source bundle and pushed it to your own git host, you now have two independent copies of the website:

  • The original on r2ware (still editable in the dashboard).
  • The exported copy on GitHub/GitLab/wherever (editable however you normally edit code).

They're not synced. If you want both to stay in step, you'll need to manually copy changes between them — or stop editing on one side. We'll add a "push to GitHub and stay in sync" mode in a future release.

Troubleshooting

The export gets stuck on "Running"

Reload Developer → Export (or Export history) after a couple of minutes. If a Jekyll bundle with media is large (lots of images), give it up to 5 minutes. If it's still stuck after 10, contact support — the row in Recent exports will show the error text inline once the worker marks it failed.

I didn't get the email

The dashboard's export landing page always shows the same download link the email contains. If you don't see the email after a minute, open Developer → Export and grab the link from Recent exports.

If the link has expired (24 hours after the export finished), the download button disappears — run a fresh export.

"Export requires a paid subscription"

Your website is on a trial. Upgrade to any paid plan from Site settings → Billing and the Export option becomes available.

"You've used today's 3 exports"

You hit the daily cap. The message includes the timestamp when your next slot opens (24 hours after your oldest counted export). Failed exports don't consume slots — only pending, running, and succeeded exports count.

"Export exceeded 2 GB limit"

Your bundle hit the hard size ceiling. Most often this happens when Include media files is checked on a media-heavy site. Try exporting without media (the bundle will reference the r2ware CDN, but it'll fit). If you genuinely need a >2 GB bundle, contact support.

Pages 404 on the destination

Almost always a baseurl issue. If your destination URL is https://example.com/, set baseurl: "" in _config.yml. If it's https://username.github.io/repo/, set baseurl: "/repo". Then rebuild.

Images don't load on the exported site

Your bundle was probably exported without "Include media files," and you're hosting somewhere that can't reach the r2ware CDN (or you want fewer external dependencies). Re-run the export with Include media files checked.

Forms submitted on the exported site go nowhere

That's expected — we replaced platform form endpoints with a Formspree placeholder (action="https://formspree.io/your-id") and appended an HTML comment (<!-- r2ware-export: this form was platform-managed... -->) at the bottom of each affected file. Pick a form backend (Formspree, Tally, Netlify Forms if you're on Netlify) and update the <form action="..."> attribute. Grep for r2ware-export: to find every file the export pipeline touched.

bundle install fails

You need Ruby 3.2+ and Bundler installed. On macOS: brew install ruby then gem install bundler. On Ubuntu: sudo apt install ruby-full then gem install bundler.