{"id":24997,"plugin_id":"plugin_asdk_app_691f1f8f72408191afdbbdf8242bdf86","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:18:59.272Z","digest":"9fff8edf1cd5f7738549a99f6ecb438440314c2b409149f54f73d4f4a557a1f3","against":5414,"payload":{"name":"netlify-frameworks","description":"Guide for deploying web frameworks on Netlify. Use when setting up a framework project (Vite/React, Astro, TanStack Start, Next.js, Nuxt, SvelteKit, Remix) for Netlify deployment, configuring adapters or plugins, or troubleshooting framework-specific Netlify integration. Covers what Netlify needs from each framework and how adapters handle server-side rendering.","included_files":[{"relative_path":"LICENSE.txt","size_in_bytes":10776},{"relative_path":"agents/openai.yaml","size_in_bytes":353},{"relative_path":"assets/netlify-small.svg","size_in_bytes":1291},{"relative_path":"assets/netlify.png","size_in_bytes":2686},{"relative_path":"references/astro.md","size_in_bytes":3066},{"relative_path":"references/nextjs.md","size_in_bytes":2425},{"relative_path":"references/tanstack.md","size_in_bytes":1449},{"relative_path":"references/vite.md","size_in_bytes":2406}],"skill_md_contents":"---\nname: netlify-frameworks\ndescription: Guide for deploying web frameworks on Netlify. Use when setting up a framework project (Vite/React, Astro, TanStack Start, Next.js, Nuxt, SvelteKit, Remix) for Netlify deployment, configuring adapters or plugins, or troubleshooting framework-specific Netlify integration. Covers what Netlify needs from each framework and how adapters handle server-side rendering.\n---\n\n# Frameworks on Netlify\n\nNetlify supports any framework that produces static output. For frameworks with server-side capabilities (SSR, API routes, middleware), an adapter or plugin translates the framework's server-side code into Netlify Functions and Edge Functions automatically.\n\n## How It Works\n\nDuring build, the framework adapter writes files to `.netlify/v1/` — functions, edge functions, redirects, and configuration. Netlify reads these to deploy the site. You do not need to write Netlify Functions manually when using a framework adapter for server-side features.\n\n## Detecting Your Framework\n\nCheck these files to determine the framework:\n\n| File | Framework |\n|---|---|\n| `astro.config.*` | Astro |\n| `next.config.*` | Next.js |\n| `nuxt.config.*` | Nuxt |\n| `vite.config.*` + `react-router` | Vite + React (SPA or Remix) |\n| `app.config.*` + `@tanstack/react-start` | TanStack Start |\n| `svelte.config.*` | SvelteKit |\n\n## Framework Reference Guides\n\nEach framework has specific adapter/plugin requirements and local dev patterns:\n\n- **Vite + React (SPA or with server routes)**: See [references/vite.md](references/vite.md)\n- **Astro**: See [references/astro.md](references/astro.md)\n- **TanStack Start**: See [references/tanstack.md](references/tanstack.md)\n- **Next.js**: See [references/nextjs.md](references/nextjs.md)\n\n## General Patterns\n\n### Client-Side Routing (SPA)\n\nFor single-page apps with client-side routing, add a catch-all redirect:\n\n```toml\n# netlify.toml\n[[redirects]]\nfrom = \"/*\"\nto = \"/index.html\"\nstatus = 200\n```\n\n### Custom 404 Pages\n\n- **Static sites**: Create a `404.html` in your publish directory. Netlify serves it automatically for unmatched routes.\n- **SSR frameworks**: Handle 404s in the framework's routing (the adapter maps this to Netlify's function routing).\n\n### Environment Variables in Frameworks\n\nEach framework exposes environment variables to client-side code differently:\n\n| Framework | Client prefix | Access pattern |\n|---|---|---|\n| Vite / React | `VITE_` | `import.meta.env.VITE_VAR` |\n| Astro | `PUBLIC_` | `import.meta.env.PUBLIC_VAR` |\n| Next.js | `NEXT_PUBLIC_` | `process.env.NEXT_PUBLIC_VAR` |\n| Nuxt | `NUXT_PUBLIC_` | `useRuntimeConfig().public.var` |\n\nServer-side code in all frameworks can access variables via `process.env.VAR` or `Netlify.env.get(\"VAR\")`.\n\n## Bundled References (Load As Needed)\n\n- [Vite + React guide](references/vite.md)\n- [Astro guide](references/astro.md)\n- [TanStack Start guide](references/tanstack.md)\n- [Next.js guide](references/nextjs.md)\n"},"changes":[{"path":"/included_files","type":"changed","before":[{"relative_path":"assets/netlify-small.svg","size_in_bytes":1291},{"relative_path":"assets/netlify.png","size_in_bytes":2686},{"relative_path":"references/astro.md","size_in_bytes":3066},{"relative_path":"references/nextjs.md","size_in_bytes":2425},{"relative_path":"references/tanstack.md","size_in_bytes":1449},{"relative_path":"references/vite.md","size_in_bytes":2406}],"after":[{"relative_path":"LICENSE.txt","size_in_bytes":10776},{"relative_path":"agents/openai.yaml","size_in_bytes":353},{"relative_path":"assets/netlify-small.svg","size_in_bytes":1291},{"relative_path":"assets/netlify.png","size_in_bytes":2686},{"relative_path":"references/astro.md","size_in_bytes":3066},{"relative_path":"references/nextjs.md","size_in_bytes":2425},{"relative_path":"references/tanstack.md","size_in_bytes":1449},{"relative_path":"references/vite.md","size_in_bytes":2406}]}],"summary":"Fields changed: 1. /included_files.","summary_kind":"deterministic","summary_metadata":{}}