# Framework guide test results

On September 9, 2026, all 16 recipes across 11 frameworks passed a local build and a new cloud deployment with Lizard CLI 0.3.95. We followed the published setup, created a fresh project and service for each recipe, and uploaded source with `lizard up`. These results cover the versions and small test apps below.

The cloud run passed 100 checks of routes, APIs, and forms, plus 45 checks of linked JavaScript and CSS files. Django migrations, a database write and read, and the final Docusaurus and Hugo site URLs also passed.

## Tested recipes

| Recipe | Tested versions | Port | Cloud check |
|---|---|---|---|
| Next.js server | Next.js 16.3.4, React 19.2.8 | `3000` | Passed |
| Next.js static export | Next.js 16.3.4, React 19.2.8 | `80` | Passed |
| React with Vite | React 19.2.8, Vite 8.2.2 | `80` | Passed |
| Vue with Vite | Vue 3.5.42, Vue Router 5.3.1, Vite 8.2.2 | `80` | Passed |
| Astro static | Astro 7.3.1 | `80` | Passed |
| Astro Node server | Astro 7.3.1, Node adapter 11.1.5 | `3000` | Passed |
| Nuxt Node server | Nuxt 4.5.2 | `3000` | Passed |
| Nuxt generate | Nuxt 4.5.2 | `80` | Passed |
| SvelteKit Node server | SvelteKit 2.70.3, Svelte 5.57.0, adapter-node 5.5.7 | `3000` | Passed |
| SvelteKit static | SvelteKit 2.70.3, Svelte 5.57.0, adapter-static 3.0.10 | `80` | Passed |
| Docusaurus | Docusaurus 3.10.2 | `80` | Passed |
| VitePress, docs root | VitePress 1.6.4 | `80` | Passed |
| VitePress, project root | VitePress 1.6.4 | `80` | Passed |
| FastAPI | FastAPI 0.141.1, Uvicorn 0.52.4 | `8000` | Passed |
| Django | Django 6.1.1, Gunicorn 26.2.0, WhiteNoise 6.12.0, psycopg 3.3.5 | `8000` | Passed |
| Hugo | Hugo 0.165.0 (extended) | `80` | Passed |

JavaScript builds used Node 22; Python builds used Python 3.13. Uploads ran from macOS without `COPYFILE_DISABLE`. Package manifests and lockfiles pin the versions above. Container image tags can change independently of a package lockfile.

## What we checked on September 9

- Ran the documented local build and server commands in Linux containers, then ran `lizard init`, `lizard add`, and `lizard up` for each recipe. Read cloud build and runtime logs and checked the final service state and port.
- Requested the public home page, an inner route, a real asset, a missing page, and a missing JavaScript path. Static content sites returned real 404s; React and Vue kept their documented SPA fallback. Both VitePress layouts returned the right content at clean URLs.
- Checked request-time API responses, POST handlers, SvelteKit form results, and rejection of a form from an untrusted origin. Submitted the deployed Next.js Server Action form over HTTP using its generated action ID and checked the redirect and returned value.
- Rebuilt Docusaurus and Hugo after setting the generated hostname in the config. Docusaurus canonical URLs and both sitemaps used the public host.
- Ran Django migrations against Managed Postgres twice, wrote and read a test row, served collected static files, accepted a valid CSRF form, and rejected a form without its token.

Each recipe used a separate test project, with different names to keep the run isolated. Workspace, region, and JSON flags made the test context explicit. Build, start, and Dockerfile-path service overrides stayed unset. Only the Next.js static export, Nuxt generate, and Django recipes supplied the Dockerfiles documented in their guides. The Docusaurus, VitePress, Hugo, and SvelteKit Node tests included the [published source examples](https://github.com/lizard-build/docs/tree/main/_examples).

## Browser checks

The September 9 run confirmed a React button click in the browser. The browser connection then returned repeated timeouts during navigation and page reads, so this run does **not** claim a fresh browser pass for all 16 recipes. HTTP route and form checks passed independently.

The September 7 run included direct-route reloads, React interaction, Vue Router navigation, Next.js Server Actions, and SvelteKit form submissions in a browser. Those remain results from that earlier run.

## Fixes since the first run

The September 7 run found missing service-creation steps, a Nuxt static preset mismatch, static routing defects, macOS archive metadata, failed-build exit codes, and port-change errors. The guides now include `lizard add` and the corrected Nuxt static setup.

The September 8 static-routing recheck passed without custom Dockerfiles for Astro static, SvelteKit static, Docusaurus, Hugo, and both VitePress layouts. New builds include those routing rules; existing images need a rebuild.

Lizard CLI 0.3.95 includes the archive and failed-build exit-code fixes. The September 9 production checks also verified service port changes and preservation of an explicit port during upload and rebuild. See [known issues](https://lizard.build/docs/platform/known-issues) for the release notes and remaining limits.

## Limits of these results

These checks cover source uploads and the documented modes. They do not establish support for every plugin, adapter, theme, framework version, GitHub deployment path, database recovery procedure, or multiple-replica workload. Django's small test app still reports security warnings from `check --deploy`; it is not a complete production security setup. These tests do not measure search rankings or AI citations. Check your app's own routes and data operations before release.
