Use when scaffolding new Deno projects. Provides templates for Fresh web apps, CLI tools, libraries, and API servers with modern best practices.
View on GitHubdenoland/skills
deno-skills
February 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