> ## Documentation Index
> Fetch the complete documentation index at: https://docs.htmldrop.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Folders and .zip bundles

> Publish a multi-page site, a static-site-generator build, or a client-routed SPA.

A free account unlocks publishing a whole directory: drag a folder onto the
dashboard, or upload a `.zip`. Structure is preserved, so linked CSS, JS,
images and fonts resolve exactly as they would on any static host.

<Info>
  Folders and `.zip` bundles require an account. The homepage drop area, which
  needs no signup, accepts single `.html` and `.md` files only.
</Info>

`index.html` at the root of the upload is the landing page. Everything else is
served at its relative path.

## Static site generators

Ship the build output — `dist/`, `build/`, `_site/` — and every page works with
no configuration. Generators that write `about/index.html` for the page at
`/about` resolve automatically, as do flat builds that write `about.html`. A
directory page requested without its trailing slash redirects to the canonical
`/about/` form, so relative links inside the page resolve correctly.

Astro, Hugo, Eleventy, Jekyll and friends all work this way.

## Single-page apps

Ship `dist/` or `build/` as a bundle. For apps that route entirely on the
client, turn on **SPA fallback**:

<Tabs>
  <Tab title="Dashboard">
    Open the site and toggle **SPA fallback**.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    curl -X PATCH https://htmldrop.app/api/v1/sites/{id} \
      -H "Authorization: Bearer $HTMLDROP_API_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"spa_fallback": true}'
    ```
  </Tab>
</Tabs>

With it on, a path matching no file **and** no page — a client-side route like
`/settings` — serves `index.html` so your router takes over. Leave it off for
multi-page sites, so genuinely missing pages return a real 404.

## WebGL and canvas projects

p5.js sketches, Three.js scenes and similar multi-asset work deploy with their
textures, models and scripts intact — this is the case bundles exist for.

## Zipping a build

```bash theme={null}
cd dist && zip -r ../site.zip . && cd ..
```

Then drop `site.zip` on the dashboard, or publish it through the
[API](/api/sites) or an [agent](/agents/overview).

## Size limits

The cap applies to the upload as a whole: **10 MB** on free, **100 MB** on Plus,
**500 MB** on Business, with total storage of 50 MB, 2 GB and 20 GB. See
[plans and limits](/account/plans-and-limits). Over the cap, split the assets or
upgrade.
