Skip to main content
A Site Bundle is the folder or ZIP file that you upload to Liteshop. It contains the Site’s static files and a liteshop.json manifest.

Structure

index.html and liteshop.json must be at the root of the bundle:
Paths are relative and case-sensitive. Don’t include symbolic links, paths with .., server code, dependency folders such as node_modules, environment files, or secrets. References in your files can be relative, such as assets/hero.webp, or start at the root, such as /assets/hero.webp. Both resolve from the root of the bundle, so the default output of build tools such as Vite works without extra configuration. Every reference must name a file in the bundle.

Files

A bundle can contain these file types:
  • HTML, CSS, JavaScript (.js, .mjs), and JSON
  • Plain text, such as robots.txt, and XML, such as sitemap.xml
  • Web app manifests
  • Images: JPEG, PNG, WebP, AVIF, GIF, SVG, and ICO. A PNG saved as .ico is accepted.
  • Fonts: WOFF, WOFF2, TTF, and OTF
Each file’s contents must match its extension. SVG files can’t contain scripts or external references.

Security rules

Every Site runs with a strict security policy. The policy and the validator enforce these rules:
  • Load scripts and stylesheets from the bundle only. Scripts from other websites are rejected.
  • Put JavaScript in bundled files loaded with <script src="...">, or in inline <script> elements. Liteshop allows each inline script by its hash, up to 100 per HTML file.
  • Don’t use HTML event attributes such as onclick, or javascript: links. Use addEventListener instead.
  • Don’t use frames or forms that post to a server.
  • Images can use data:image/... URLs. Links to other websites, mailto: links, and tel: links work normally.
The policy also blocks network requests to other websites, WebSockets, web workers, service workers, and eval. When code appears to use one of these features, validation reports a warning instead of an error, because framework code often mentions these APIs without using them. A Site with warnings can be published, but the blocked feature doesn’t work.

Manifest

The manifest is liteshop.json at the root of the bundle. It follows the JSON Schema for Site Specification version 0.1:
Declare a capability only if the Site uses it. Don’t add an empty one, such as "forms": []. IDs of Forms, fields, Resources, Offers, Calendar Connections, and Catalogue Items use lowercase kebab case, such as contact-form. Keep them unchanged across updates, because messages, bookings, and orders refer to them. The Site Owner can change the Site’s name, languages, and time zone in Settings > Site details, which publishes a new Deployment.

How Liteshop serves pages

Liteshop finds the Site from the request’s address and serves its live Deployment:
  • / serves frontend.entry.
  • A path ending with / serves index.html in that folder.
  • A path without an extension, such as /about, serves about.html. If only about/index.html exists, Liteshop redirects to /about/.
  • A path without an extension that matches no file serves frontend.fallback, if declared.
  • Any other missing file serves frontend.notFound with status 404, if declared.
The fallback and not-found pages are served at any path, so reference their files from the root, such as /assets/app.js. The /_liteshop/ path is reserved for Liteshop, and liteshop.json itself is never served.

Checklist

Before you upload a bundle, check the following:
  1. index.html and liteshop.json are at the root.
  2. Every reference names a file in the bundle, with matching case.
  3. liteshop.json follows the schema, and every label has text in the default language.
  4. IDs are lowercase kebab case and unchanged from earlier versions.
  5. The bundle contains no secrets and loads nothing from other websites.
  6. An update keeps baseDeployment unchanged.