# Built-in development tools

## Common commands

| Goal | Command |
| --- | --- |
| Format / verify format | `deno fmt` / `deno fmt --check` |
| Static rules | `deno lint` |
| Type-check a module graph | `deno check main.ts` |
| Generate API docs | `deno doc --html --name=my-lib mod.ts` |
| Benchmark | `deno bench` |
| Compile an executable | `deno compile --allow-net main.ts` |
| Experimentally bundle a module graph | `deno bundle main.ts -o bundle.js` |

`deno compile` packages the entry graph and runtime, but permissions still follow the official compile/runtime rules. Verify cross-compilation, dynamic assets, and native dependencies separately. The current official docs mark `deno bundle` as experimental; prefer a framework or Vite build for frontend applications.

## Recommended tasks

```json title="deno.json"
{
  "tasks": {
    "dev": "deno run --watch --allow-net main.ts",
    "check": "deno fmt --check && deno lint && deno check **/*.ts && deno test"
  }
}
```

Do not run Deno's formatter and another formatter over the same files. During migration, choose one authority before making a mechanical formatting commit.

Official references: [Lint and format](https://docs.deno.com/runtime/lint_and_format/) and [Bundling](https://docs.deno.com/runtime/reference/bundling/).
