Help us improve
Share bugs, ideas, or general feedback.
From deno-knowledge-patch
Provides knowledge of Deno 2.2-2.7 features: permission sets, deno audit, OpenTelemetry, Deno.spawn(), QUIC, test hooks, dx command. Use for Deno 2+ projects.
npx claudepluginhub nevaberry/nevaberry-plugins --plugin deno-knowledge-patchHow this skill is triggered — by the user, by Claude, or both
Slash command
/deno-knowledge-patch:deno-knowledge-patchThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Claude Opus 4.6 knows Deno through 1.x. This skill provides features from Deno 2.2 (2025-02-19) through 2.7 (2026-02-25).
Guides Deno project initialization, package management prioritizing JSR then npm, deno.json configuration, CLI commands like fmt/lint/test, import maps, and permissions.
Provides Node.js post-cutoff knowledge for v23.0-25.5.0: require(esm) default, node --run stable, URLPattern global, AsyncContextFrame, permission model, process.execve, test runner upgrades. Use for modern Node.js.
Generates PermissionRequest hooks that auto-approve safe operations, auto-deny dangerous ones, and tailor rules to detected project stack. Safer alternative to --dangerouslySkipPermissions for manual permission mode.
Share bugs, ideas, or general feedback.
Claude Opus 4.6 knows Deno through 1.x. This skill provides features from Deno 2.2 (2025-02-19) through 2.7 (2026-02-25).
| Topic | Reference | Key features |
|---|---|---|
| Permissions | references/permissions.md | Permission sets in config, --ignore-read/--ignore-env, subdomain wildcards, CIDR |
| CLI commands | references/cli-commands.md | dx, deno bundle, deno audit, deno create, deno compile enhancements |
| Testing & benchmarks | references/testing.md | Setup/teardown hooks, coverage auto-report, bench iteration control |
| Package management | references/package-and-config.md | links, minimumDependencyAge, jsr: in package.json, --npm/--jsr flags |
| Developer tooling | references/developer-tooling.md | Lint plugin API, deno fmt tagged templates, new lint rules |
| Runtime APIs | references/runtime-apis.md | Deno.spawn(), FsFile.tryLock(), Brotli, SHA3, OTel, WebSocket headers, QUIC |
| Module system & compat | references/module-system.md | Import text/bytes, Wasm source phase, --preload, DENO_COMPAT=1, node globals |
Define named permission sets in deno.json:
{
"permissions": {
"default": {
"read": [
"./data"
],
"env": true
},
"dev": {
"read": true,
"write": true,
"net": true
}
}
}
deno run -P main.ts # uses "default" set
deno run -P=dev main.ts # uses "dev" set
Return NotFound/undefined instead of throwing for denied resources:
deno run --ignore-read=/etc --ignore-env=AWS_SECRET_KEY main.ts
OTEL_DENO=1 deno --allow-net server.ts
Auto-instruments console.log, Deno.serve, fetch. Custom spans via npm:@opentelemetry/api.
| Command | Version | Purpose |
|---|---|---|
dx / deno x | 2.6 | Run package binaries (like npx) |
deno bundle | 2.4 | esbuild-based bundler (restored) |
deno audit | 2.6 | Scan deps for CVEs |
deno create | 2.7 | Scaffold from templates |
deno approve-scripts | 2.6 | Approve npm lifecycle scripts |
Deno.test.beforeAll(() => { /* once before all tests */ });
Deno.test.beforeEach(() => { /* before each test */ });
Deno.test.afterEach(() => { /* after each test */ });
Deno.test.afterAll(() => { /* once after all tests */ });
Deno.spawn() subprocess shorthands (2.7, unstable)const child = Deno.spawn("deno", ["fmt", "--check"], { stdout: "inherit" });
const output = await Deno.spawnAndWait("git", ["status"]);
const result = Deno.spawnAndWaitSync("echo", ["done"]);
import message from "./hello.txt" with { type: "text" }; // string
import bytes from "./image.png" with { type: "bytes" }; // Uint8Array
import source addModule from "./add.wasm";
const { add } = WebAssembly.instantiate(addModule).exports;
| Feature | Version |
|---|---|
DENO_COMPAT=1 (enables all compat flags) | 2.4 |
Buffer, global, setImmediate always available | 2.4 |
@types/node included by default | 2.6 |
jsr: scheme in package.json | 2.7 |
package.json overrides field supported | 2.7 |
patch){ "links": ["../path/to/local_npm_package"] }
Requires "nodeModulesDir": "auto" or "manual". Renamed from "patch" in 2.4.
deno test --coverage now auto-generates the report. Ignore comments:
// deno-coverage-ignore — single line
// deno-coverage-ignore-start — block start
// deno-coverage-ignore-stop — block end
// deno-coverage-ignore-file — entire file
{ "lint": { "plugins": ["./my-plugin.ts", "jsr:@scope/plugin"] } }
export default {
name: "my-plugin",
rules: {
"no-foo": {
create(context) {
return {
VariableDeclarator(node) {
if (node.id.type === "Identifier" && node.id.name === "foo") {
context.report({ node, message: "Don't use foo" });
}
},
};
},
},
},
} satisfies Deno.lint.Plugin;
| File | Contents |
|---|---|
| permissions.md | Permission sets, --ignore-read/--ignore-env, subdomain wildcards, CIDR, --deny-import |
| cli-commands.md | dx, deno bundle, deno audit, deno create, deno compile, deno install --compile, deno approve-scripts, deno task |
| testing.md | Test hooks, coverage auto-report and ignore comments, bench iteration control |
| package-and-config.md | links, minimumDependencyAge, jsr: in package.json, overrides, --npm/--jsr flags, "publish": false |
| developer-tooling.md | Lint plugin API, deno fmt tagged templates, deno check no-args, new lint rules |
| runtime-apis.md | Deno.spawn(), FsFile.tryLock(), Brotli, SHA3, OTel, ChildProcess methods, Deno.bundle() API, WebSocket headers, QUIC/WebTransport |
| module-system.md | Import text/bytes, Wasm source phase imports, --preload, --require, DENO_COMPAT=1, node globals, @types/node |