Static apps
Use this path when your app is plain HTML, CSS, and JavaScript with no framework build.
This page covers no-framework static apps. For framework apps, including Vite static SPAs, see Optimizing your app for Webflow Cloud.
What qualifies as a static app
Webflow Cloud treats your app as static in either of these cases:
- You set
"framework": "static"inside thecloudobject inwebflow.json. - You don’t set a framework, and your repo meets static inference rules.
For inference, all of these conditions must hold:
- No root
package.json. - No nested
package.jsonbelow the repo root. - No other framework in
webflow.json. - A root
index.htmlthat is a regular file. - No build or runtime indicators in the published tree.
If a repo has a root index.html and build or runtime indicators, static inference fails.
The deploy exits with an error that lists the conflicting files.
Set "framework": "static" in cloud only if you intentionally want those files published as public static assets.
This override can publish framework source files if your repo also contains a framework app.
Deploy a static app
The recommended start is to fork hello-world-static-app.
It deploys by inference, with no package.json and no webflow.json.
Deploy with the CLI:
For later deployments, use the workflow configured for your app.
Dashboard setup can still warn when a static repo has no root package.json.
If you hit that warning, deploy with the CLI first, then continue with your normal deployment workflow.
Opt in explicitly with webflow.json
Set this when you need to force static mode:
For the full framework value list, see Bring your own app.
Mount paths and asset references
Webflow Cloud serves static app files exactly as committed. It doesn’t rewrite HTML, CSS, or JavaScript paths.
If your mount path is /app, an absolute path like /styles.css resolves at the domain root and can 404.
Use relative paths like ./styles.css, or prefix paths with your mount path.
Framework apps handle base paths differently. For that behavior, see Optimizing your app for Webflow Cloud.
_headers and _redirects files
If present, _headers and _redirects are moved to the asset root.
Cloudflare honors these files only at the asset root.
Rule-path semantics for _redirects under non-root mount paths are still being verified.
Test new rules in a non-production environment before rollout.
What static apps can’t do
Static apps are assets-only deployments:
- No worker deploys.
- No server runtime exists.
- No framework build step runs.
Webflow Cloud accepts and ignores worker-oriented configuration for static apps.
This includes D1, KV, and R2 bindings plus worker configuration in wrangler.json.
Environment variables don’t affect static apps. There is no build step or worker runtime to consume them.
What’s never published
Webflow Cloud copies from your whole checkout for static apps. Any file not excluded is published as a public asset. The exclusions include:
- Dot files and dot-directories, except
.well-known. node_modules,package.json, lock files,clouduser, andclouduser.wrangler.json.webflow.json,webflow.jsonc, andwrangler.*control files.terraform.tfstate,terraform.tfstate.*,*.tfvars, andauth.json.- Private key material like
*.pem,*.key,*.pfx,*.p12,id_rsa,id_rsa.*,id_dsa,id_ecdsa, andid_ed25519.
Symlinks are never followed.