All skills
denoland avatar

/deno-frontend

@d5f6ace official
by Denodenoland/skills99 stars
8

Use when building a web frontend with Deno — running React, Vite, Astro, SvelteKit, Next.js, Nuxt or other npm frameworks under Deno, or working with Fresh, Deno's own island-architecture framework. Covers which path to pick, Fresh 2.x routes, handlers, islands, Preact signals, Tailwind, and Fresh 1.x to 2.x migration.

Use this Skill: https://skilld.dev/gh/denoland/skills/deno-frontend

This session only. Nothing lands on disk.

referencesFRESH_MIGRATION.md

≈758 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Fresh 1.x and alpha migration

Check the version first

Read deno.json imports before changing anything. Three situations look similar and need different handling:

deno.json says Situation
jsr:@fresh/core@^2 Stable 2.x — see FRESH.md
jsr:@fresh/core@2.0.0-alpha.* Alpha 2.x — not 1.x, see below
$fresh/ import paths Fresh 1.x — migrate

Grep for $fresh/ to find 1.x imports; every one of them becomes fresh or fresh/runtime.

Migrating 1.x to 2.x

Run the migration tool:

deno run -Ar jsr:@fresh/update

It converts import paths to the fresh package, updates handler signatures to the single (ctx) parameter, removes the generated manifest and legacy config and dev entry points, creates vite.config.ts and client.ts, switches deno.json tasks to Vite, merges the separate error pages into a unified _error.tsx, and updates deprecated context methods.

If it misses anything, check by hand:

  1. Imports — everything from fresh or fresh/runtime.
  2. Handlers — single (ctx) parameter, request via ctx.req.
  3. Files — no generated manifest, dev entry point, or old config file.
  4. Tasks — vite, vite build, deno serve -A _fresh/server.js.
  5. Error pages — one _error.tsx replaces the separate _404.tsx and _500.tsx.
  6. Tailwind — @tailwindcss/vite, not the old Fresh Tailwind plugin.

Deprecated context APIs

1.x 2.x
renderNotFound() throw new HttpError(404)
bare render() with no JSX ctx.render(<MyComponent />)
basePath ctx.config.basePath
data passed through ctx.render() handler returns { data: {...} }

The last one is the most common error. ctx.render() takes JSX, never a data object — a handler passes data by returning { data: {...} }, and the page picks it up with define.page<typeof handler>. See FRESH.md.

Alpha releases (2.0.0-alpha.*)

Alpha projects are 2.x, but predate the Vite setup. A dev.ts in an alpha project is correct, not a 1.x leftover — do not "fix" it.

Alpha Stable 2.x
dev.ts entry point vite.config.ts
deno run -A --watch dev.ts vite
deno run -A dev.ts build vite build
@fresh/plugin-tailwind @tailwindcss/vite
dev server on port 8000 port 5173
no client.ts client.ts required

The handler pattern is already the same as stable: define.handlers({ GET(ctx) { ... } }) returning { data: {...} }.

Source: SKILL.md on GitHub

1 warning16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The skill provides instructions for frontend development using Deno and the Fresh framework. It includes standard commands for project initialization, dependency management, and local development. While it involves remote script execution and recommends granting broad permissions (-A flag), these are standard practices within the Deno/Fresh ecosystem and originate from the framework's official sources.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer7mo

    1/1 file flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at d5f6ace. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 days ago.

Steadyupdated 2 months ago
metadata
{
  "author": "denoland",
  "version": "3.0"
}
  • TypeScript
  • fresh
  • deno
  • preact
  • tailwind
  • island-architecture
  • server-rendering
  • web-framework

README badge

README badge for denoland/skills/deno-frontend

Builds server-rendered web pages and interactive components in Deno using Fresh 2.x, Preact, and Tailwind CSS with island architecture. Covers Fresh 2.x project structure, routes, islands, handlers, data fetching patterns, and migration from Fresh 1.x.

Generated from the current SKILL.md.

Does this skill cover Fresh 1.x?
No. This skill covers Fresh 2.x only. Fresh 1.x is deprecated. The skill includes guidance on migrating from Fresh 1.x to 2.x, but all code examples use Fresh 2.x patterns.
Can I use this skill for other frameworks like Next.js or Vue?
No. This skill applies only to Fresh/Deno frontend questions. For Next.js, Vue, Svelte, Angular, or other frameworks, use framework-specific approaches instead.
What's the difference between islands and regular components in Fresh?
Islands are interactive components that hydrate on the client and ship JavaScript to the browser. Regular components are server-only and send no JavaScript. Use islands for interactive UI and components for static content.
Does this cover data fetching patterns?
Yes. The skill covers two patterns: handler with data object (recommended for type safety and auth checks) and async server components (for simple queries). It includes the `createDefine` helper for type-safe handlers.
Can I use Tailwind CSS with Fresh?
Yes. Tailwind CSS is integrated via `@tailwindcss/vite` in the vite.config.ts file, which is included in Fresh 2.x project initialization.

Generated from the current SKILL.md. These answers refresh after source changes.