Use when scaffolding new Deno projects. Provides templates for Fresh web apps, CLI tools, libraries, and API servers with modern best practices.
View on GitHubFebruary 5, 2026
Select agents to install to:
npx add-skill https://github.com/denoland/skills/blob/main/skills/deno-project-templates/SKILL.md -a claude-code --skill deno-project-templatesInstallation paths:
.claude/skills/deno-project-templates/# Deno Project Templates
This skill provides templates for creating new Deno projects with modern best practices.
## When to Use This Skill
- Creating a new Deno project from scratch
- Setting up project structure for different application types
- Scaffolding Fresh web apps, CLI tools, libraries, or API servers
## Project Types
Choose the appropriate template based on what you want to build:
| Type | Use Case | Key Files |
|------|----------|-----------|
| **Fresh web app** | Full-stack web application with Fresh framework | `main.ts`, `routes/`, `islands/` |
| **CLI tool** | Command-line application | `main.ts` with arg parsing |
| **Library** | Reusable package to publish on JSR | `mod.ts`, `mod_test.ts` |
| **API server** | Backend API without frontend | `main.ts` with HTTP handlers |
## Fresh Web App
For full-stack web applications, use the Fresh initializer:
```bash
deno run -Ar jsr:@fresh/init my-project
cd my-project
```
This creates:
- `deno.json` - Project configuration and dependencies
- `main.ts` - Entry point that starts the server
- `fresh.gen.ts` - Auto-generated manifest (don't edit manually)
- `routes/` - Pages and API routes (file-based routing)
- `islands/` - Interactive components that get JavaScript on the client
- `components/` - Server-only components (no JavaScript shipped)
- `static/` - Static assets like images, CSS
**Development:** Fresh uses Vite. The dev server runs at `http://localhost:5173` (not port 8000).
```bash
deno task dev
```
## CLI Tool
Create a command-line application with argument parsing.
**Template files:** See `assets/cli-tool/` directory.
### deno.json
```json
{
"name": "my-cli",
"version": "0.1.0",
"exports": "./main.ts",
"tasks": {
"dev": "deno run --allow-all main.ts",
"compile": "deno compile --allow-all -o my-cli main.ts"
},
"imports": {
"@std/cli": "jsr:@std/cli@^1",
"@std/fmt": "jsr:@std/fmt@^1"
}
}
```
### main.ts
```typescript
import { parseArgs } from "@std/cli/pa