deno-frontend — Claude Code skill: what it does, how to install
Guides frontend development on Deno. Helps run npm frameworks like Vite or Next.js and build island-based apps with Fresh 2.x.
npx skills add denoland/skills --skill deno-frontend -a claude-codeWhat deno-frontend does
The skill directs the agent on two distinct web paths under Deno. For regular npm frameworks such as Astro or React with Vite, it enforces standard workflows. The agent uses deno create, deno install, and deno task dev without creating runtime-specific wrappers. Routing logic stays framework-specific.
The alternative path covers Fresh 2.x, Deno's Vite-based server framework. The skill outlines file-based routing in routes/, server components, and isolated Preact islands in islands/ that ship minimal client JavaScript. It also covers Fresh 1.x migrations.
Next.js requires "nodeModulesDir": "auto" in deno.json to function properly. In Fresh, island component props must be serializable, meaning you cannot pass functions directly to islands.
What it helps with
- scaffold a Vite or Next.js app using Deno CLI commands
- build server-rendered pages with Fresh 2.x island architecture
- manage interactive client state with Preact signals in
islands/ - migrate an existing app from Fresh 1.x to Fresh 2.x
Example prompts for the agent
- Initialize a new React app with Vite running on Deno
- Create an interactive counter island for Fresh 2.x using Preact signals
- Fix package resolution for Next.js by updating deno.json
How to install deno-frontend
1Skills CLI (Vercel)
npx skills add denoland/skills --skill deno-frontend -a claude-code2Manually: put the files in place
~/.claude/skills/deno-frontend/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/deno-frontend/
1Skills CLI (Vercel)
npx skills add denoland/skills --skill deno-frontend -a codex2Manually: put the files in place
.agents/skills/deno-frontend/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add denoland/skills --skill deno-frontend -a cursor2Manually: put the files in place
.cursor/skills/deno-frontend/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install denoland/skills deno-frontend2Manually: put the files in place
.github/skills/deno-frontend/SKILL.md1Skills CLI (Vercel)
npx skills add denoland/skills --skill deno-frontend -a gemini-cli2Platform CLI
gemini skills install https://github.com/denoland/skills --path skills/deno-frontendManually: put the files in place
.devin/skills/deno-frontend/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add denoland/skills --skill deno-frontend -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about deno-frontend
How to install deno-frontend in Claude Code?
Run npx skills add denoland/skills --skill deno-frontend -a claude-code. The skill file will be stored at ~/.claude/skills/deno-frontend/SKILL.md.
What does deno-frontend do?
It instructs your assistant on building web frontends in Deno. It covers standard npm setups and the Fresh 2.x island model.
What constraints apply to Fresh islands?
Only components located in islands/ ship JavaScript to the browser. Props must be serializable, which prevents passing functions or callbacks into them.
Source text
SKILL.md · MIT
---
name: deno-frontend
description: 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.
license: MIT
metadata:
author: denoland
version: "3.0"
---
# Frontend development with Deno
Two paths. Pick by what the project already uses.
## Regular npm frameworks — the usual choice
Deno runs the normal frontend ecosystem: React, Vue, Svelte, Solid, Vite, Astro,
Next.js, Nuxt, SvelteKit, Remix, SolidStart. Nothing needs to be ported, and
there is no Deno-specific way to write them.
```bash
deno create vite my-app # or astro, next, nuxt, svelte…
cd my-app
deno install
deno task dev
```
`deno create` is `npm create`. `deno install` reads `package.json`.
`deno task <script>` runs `package.json` scripts. That is the whole difference.
**Follow the framework's own documentation for everything else** — routing,
components, data loading, and config are the framework's concern, not Deno's.
Don't invent Deno-flavoured variants of their APIs, and don't reach for Fresh
patterns in a React or Svelte project.
The only things worth knowing:
- Some frameworks need `"nodeModulesDir": "auto"` in `deno.json`; Next.js does.
- Permissions apply to the dev server too — framework tasks generally want `-A`.
- Deploying: see the `deno-deploy` skill, which lists per-framework build
commands and presets.
## Fresh — Deno's own framework
Fresh suits a new Deno-first project that wants server rendering with minimal
client JavaScript. It uses **island architecture**: pages render on the server,
and only components in `islands/` ship JavaScript.
```bash
deno run -Ar jsr:@fresh/init
cd my-project
deno task dev # http://localhost:5173
```
A Fresh project is Vite-based: `vite.config.ts` for the build, `main.ts` for the
server, file-based routes in `routes/`, islands in `islands/`, server-only
components in `components/`. Preact supplies the component model, with signals
for state.
```tsx
// islands/Counter.tsx — interactive, ships JS
import { useSignal } from "@preact/signals";
export default function Counter() {
const count = useSignal(0);
return <button onClick={() => count.value++}>Count: {count.value}</button>;
}
```
Three rules carry most of the weight:
1. Islands ship JavaScript — keep them small, leave everything else in
`components/`.
2. Island props must be serializable. Functions cannot be passed.
3. Handlers take a single `(ctx)` parameter.
Load `references/FRESH.md` for routes, handlers, `define` helpers, middleware,
islands, signals, and Tailwind.
Use **Fresh 2.x**, imported from `"fresh"`. For an existing 1.x project, or one
pinned to a `2.0.0-alpha.*` release, see `references/FRESH_MIGRATION.md`.
## Further reading
- <https://fresh.deno.dev/docs> — Fresh documentation
- `references/FRESH.md` — Fresh 2.x patterns in depth
- `references/FRESH_MIGRATION.md` — Fresh 1.x and alpha migration
© denoland · MIT · denoland/skills