Create Saleor Package
saleor/apps
Scaffold a new shared package in the saleor-apps monorepo under ./packages/.
Guides writing, running and configuring Deno 2.9+ projects: installing npm and JSR dependencies, permissions, config file precedence and the built-in fmt, lint, test and compile toolchain.
$ npx skills add denoland/skills --skill deno -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install denoland/skills deno --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/denoland/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/deno .claude/skills/deno && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "deno" agent skill from https://github.com/denoland/skills/tree/main/skills/deno into .claude/skills/deno/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deno", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/denoland/skills/tree/main/skills/denoType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add denoland/skills --skill deno -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install denoland/skills deno --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/denoland/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/deno .agents/skills/deno && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "deno" agent skill from https://github.com/denoland/skills/tree/main/skills/deno into .agents/skills/deno/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deno", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add denoland/skills --skill deno -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install denoland/skills deno --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/denoland/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/deno .cursor/skills/deno && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "deno" agent skill from https://github.com/denoland/skills/tree/main/skills/deno into .cursor/skills/deno/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deno", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/denoland/skills.git --path skills/deno--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add denoland/skills --skill deno -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install denoland/skills deno --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/denoland/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/deno .gemini/skills/deno && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "deno" agent skill from https://github.com/denoland/skills/tree/main/skills/deno into .gemini/skills/deno/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deno", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install denoland/skills denoInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add denoland/skills --skill deno -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/denoland/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/deno .github/skills/deno && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "deno" agent skill from https://github.com/denoland/skills/tree/main/skills/deno into .github/skills/deno/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deno", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add denoland/skills --skill deno -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install denoland/skills deno --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/denoland/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/deno .opencode/skills/deno && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "deno" agent skill from https://github.com/denoland/skills/tree/main/skills/deno into .opencode/skills/deno/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deno", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
denoGuides writing, running and configuring Deno 2.9+ projects: installing npm and JSR dependencies, permissions, config file precedence and the built-in fmt, lint, test and compile toolchain.
The skill treats Deno as compatible with the npm ecosystem rather than a separate one to port code into: deno install reads an existing package.json and writes a real node_modules, deno add express installs from npm by default, deno task runs scripts.build from package.json or tasks.build from deno.json (deno.json wins if both define it), and both prefixed and unprefixed Node built-ins resolve. It tells the agent not to ask users to rewrite imports or adopt JSR as a precondition, since the two real differences from Node are permissions and npm lifecycle scripts not running automatically.
For dependency management, deno ci is the CI-specific command: it requires deno.lock, deletes node_modules and installs strictly from the lockfile, failing if it is stale, with --prod skipping dev dependencies. Deno refuses to install a package version published less than a day ago by default, overridable with --min-dep-age, and postinstall-style lifecycle scripts need an explicit deno approve-scripts or --allow-scripts to run. A references/CLI.md file and a separate migrate-to-deno skill cover converting an existing project.
Read from SKILL.md and the folder at commit d5f6ace. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
denonpmpnpmyarnFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
deno.landAlso links to:
docs.deno.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Deno Runtime and Package Manager loads about 2.7k tokens when it runs, and up to ~5.4k if it reads all its reference files. Until then it costs about 107 tokens; SKILL.md has 973 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from denoland/skills at commit d5f6ace, republished under its MIT licence (© denoland). 973 words, ~2,720 tokens.
.claude/skills/deno/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.A JavaScript and TypeScript runtime with a package manager, formatter, linter, test runner, type checker, and bundler in one binary. Runs TypeScript directly.
Needs Deno 2.9+. Check with deno --version, update with deno upgrade.
Deno is not a separate ecosystem to port code into:
deno install reads an existing package.json and writes a real
node_modules.deno add express installs from npm. Unprefixed names default to npm.deno task build runs scripts.build from package.json or tasks.build
from deno.json. If both define it, deno.json wins.node:fs and fs both resolve.deno main.js runs a file. deno run is optional.tsconfig.json.Don't tell users to rewrite imports, adopt JSR, or restructure as a precondition. The two real differences are permissions and npm lifecycle scripts not running by default.
Single-file scripts need no build step and no tsconfig.json. Applications and
framework projects keep their normal setup.
To convert an existing project, see the migrate-to-deno skill.
deno install # install everything declared
deno add express # from npm (unprefixed = npm)
deno add jsr:@std/path # from JSR
deno add -D vitest # dev dependency (package.json only)
deno remove express
deno outdated # list outdated deps
deno update # alias for `deno outdated --update`
deno update --latest # ignore existing semver ranges
deno list # declared deps + resolved versions (npm ls)
deno why express # why a package is in the tree
deno audit # vulnerability audit
deno ci # clean reproducible install for CI
dx cowsay hello # run a package binary without installing (npx)deno ci is the CI command, not deno install: it requires deno.lock,
deletes node_modules, installs strictly from the lockfile, and fails if the
lockfile is stale. --prod skips devDependencies.
dx is npx / bunx / pnpm dlx, and an alias for deno x. It runs with
the sandbox disabled, so treat it with the same care as npx.
Deno won't install a version published less than a day ago, limiting the window
for a compromised release. Override with --min-dep-age, which takes minutes
(120), an ISO-8601 duration (P7D), a cutoff date, or 0 to disable:
deno add --min-dep-age=0 npm:some-packageLifecycle scripts (postinstall) don't run by default — a common surprise when
a native addon looks broken after install. Approve once per project:
deno approve-scripts # interactive picker
deno install --allow-scripts=npm:better-sqlite3| File | Holds |
|---|---|
package.json | dependencies, scripts |
tsconfig.json | TypeScript compiler options |
deno.json | Deno config: fmt, lint, tasks, workspaces |
Put dependencies in package.json — every other tool reads it, and Deno
resolves it natively. Use deno.json for dependencies only when there is no
package.json: a standalone script, or a JSR package. Likewise prefer
tsconfig.json over compilerOptions in deno.json, so tsc and editors see
the same settings.
Commit deno.lock. Deno seeds it from an existing package-lock.json,
yarn.lock, bun.lock, or pnpm lockfile, preserving pins.
Deno uses pnpm's isolated layout: real files in node_modules/.deno/, exposed
by symlinks, so a package can't import what it never declared. For a tool that
needs npm's flat hoisted tree:
{ "nodeModulesLinker": "hoisted" }nodeModulesDir applies only to projects without a package.json, so it is
rarely the right knob.
Deno grants no filesystem, network, environment, or subprocess access unless asked.
deno run --allow-net=api.example.com --allow-read=./data main.ts
deno run -A main.ts # allow everything| Flag | Short | Grants |
|---|---|---|
--allow-read[=paths] | -R | filesystem read |
--allow-write[=paths] | -W | filesystem write |
--allow-net[=hosts] | -N | network |
--allow-env[=names] | -E | environment variables |
--allow-sys[=apis] | -S | OS information |
--allow-import[=hosts] | -I | imports from remote hosts |
--allow-run[=bins] | — | subprocesses |
--allow-ffi[=paths] | — | native libraries (unstable) |
--allow-all | -A | everything |
-S is --allow-sys, not --allow-run. Every flag takes an allowlist —
--allow-net=example.com:443 beats bare --allow-net. Matching --deny-*
flags always win.
On Requires net access to "...", add that specific permission. -A is fine
for trusted first-party code and during migration, but a poor default to commit
in a task.
deno.json (or .jsonc) is auto-discovered from the current directory upward.
{
"tasks": {
"dev": "deno watch -A main.ts",
"start": "deno run -A main.ts"
},
"fmt": { "exclude": ["build/"] },
"lint": { "rules": { "exclude": ["no-explicit-any"] } },
"exclude": ["build/", "dist/"]
}Top-level exclude applies to every subcommand; per-tool exclude narrows it.
deno.json also accepts imports, an import map pointing bare specifiers at
real ones. That is how a project without package.json declares dependencies,
and how a JSR package declares its own alongside name, version, exports.
npm, Yarn, and Bun workspaces work out of the box — Deno reads package.json
"workspaces" directly. pnpm is the exception: pnpm-workspace.yaml is
migrated into deno.json on first run, which must then be re-run.
{ "workspace": ["./packages/core", "./packages/cli"] }Members are explicit or single-level globs ("packages/*"); ** and negation
are unsupported. Run a task across members with deno task --filter '*' build.
Prefer npm — it is where the ecosystem is, and deno add express is the
normal case. Reach for JSR for the standard library (@std/*), or to publish
TypeScript that consumers get types for without a build step. Mixing is fine.
deno add jsr:@std/path npm:express
deno doc jsr:@std/path # read a package's API from the terminalDeno once used full URL imports (https://deno.land/x/...). They still run but
aren't recommended; to modernize, deno add the package and import the bare
specifier.
deno fmt # format (--check for CI)
deno lint # lint (--fix, --rules)
deno test # tests (--watch, --parallel, --coverage=dir)
deno check main.ts # type-check without running
deno bench # benchmarks
deno coverage # coverage report from --coverage output
deno compile main.ts # single-file executable (--target cross-compiles)
deno doc mod.ts # docs (--html for a site)
deno info main.ts # module graph and cache infoThese cover prettier, eslint, jest/vitest, tsc, and pkg/nexe with no config or dependencies — but they are not drop-in replacements. Parity is incomplete, so moving an established project is real work. There is no need to migrate: keep prettier, eslint, and vitest, and use Deno as runtime and package manager. Prefer the built-in tools for new projects.
Suppress with // deno-lint-ignore <rule>, // deno-lint-ignore-file,
// deno-fmt-ignore, // deno-fmt-ignore-file. In Markdown,
<!-- deno-fmt-ignore --> before a code block protects illustrative snippets
that aren't valid standalone code.
deno main.ts # deno run is optional
deno watch main.ts # reload on change (replaces nodemon)
deno task dev # task from package.json or deno.json
deno repl
deno eval "console.log(1)"deno watch hot-replaces modules, restarting if that fails; it aliases
deno run --watch-hmr.
An HTTP server needs no dependencies:
Deno.serve((_req) => new Response("Hello"));Scaffold rather than hand-writing the files:
deno init my-project # script + test + deno.json
deno init --empty my-project # just main.ts and deno.json
deno init --lib my-lib # library laid out for JSR
deno create vite my-app # scaffold from a package initializerdeno create is npm create / yarn create and covers that ecosystem
(deno create astro, etc). Unprefixed names are npm; --jsr selects JSR.
To npm the regular flow still works — npm publish, or deno pack to build
the tarball first. deno publish targets JSR only, from a deno.json with
name, version, and exports:
deno publish --dry-run
deno publishProvenance attestation is automatic on GitHub Actions. deno bump-version patch
bumps the version, across every member at a workspace root.
Guide: https://docs.deno.com/runtime/reference/cli/publish/
-A committed in a task where a scoped grant would work.deno.lock uncommitted, or CI running deno install instead of deno ci.jsr:/npm: specifiers in a project with a package.json — use
deno add so the version lives in one place. Fine in standalone scripts.deno.json when package.json or
tsconfig.json exists.deno fmt --check, deno lint, deno check in CI.Deno.* API referencereferences/CLI.md — fuller subcommand and flag referencedeno <subcommand> --help — authoritative and version-accurate; check it
before guessing at a flag.© denoland, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in skills/deno of denoland/skills.
Open the folder on GitHubat commit d5f6ace
Deno Runtime and Package Manager next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Deno Runtime and Package Manager this skilldenoland/skills | 100 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Create Saleor Packagesaleor/apps | 162 | — | ~608 | Automated safety check: Pass | Custom licence | |
| npm Packagejwynia/agent-skills | 166 | — | ~2.1k | Automated safety check: Pass | None | |
| Npx CLIjwynia/agent-skills | 166 | — | ~2.4k | Automated safety check: Pass | None | |
| npm Supply Chain Securitybodadotsh/npm-security-best-practices | 859 | — | ~1k | Automated safety check: Warn | MIT | |
| Pre Commitwellwelwel/poku | 1.2k | — | ~728 | Automated safety check: Pass | MIT |
saleor/apps
Scaffold a new shared package in the saleor-apps monorepo under ./packages/.
jwynia/agent-skills
Build and publish npm packages using Bun as the primary toolchain with npm-compatible output.
jwynia/agent-skills
Build and publish npx-executable CLI tools using Bun as the primary toolchain with npm-compatible output.
bodadotsh/npm-security-best-practices
Applies safer package manager defaults and dependency vetting to JavaScript and TypeScript projects to reduce supply-chain attack risk.
wellwelwel/poku
Run the mandatory pre-commit checks for the poku repository before staging a commit.
dmmulroy/anti-slop
Installs, updates or migrates the vendored anti-slop Oxlint plugin in a repository, keeping local rule changes and the plugin's license and provenance files.
denoland/skills
Chooses between running regular npm frontend frameworks under Deno and building with Fresh, Deno's island-architecture framework, with Fresh 2.x guidance.
denoland/skills
Guides deploying Deno apps with the deno deploy CLI, including pre-flight checks, environment variables, Deno KV, custom domains and the --tunnel flag for local development.
denoland/skills
Runs untrusted or AI-generated code in isolated Deno Sandbox microVMs using the @deno/sandbox SDK, with lifecycle, process and streaming guidance.
denoland/skills
Moves a Node.js, npm, Yarn, pnpm or Bun project to Deno in reversible steps, starting with Deno as the package manager and changing no code unless needed.
Works with
Categories
Guides writing, running and configuring Deno 2.9+ projects: installing npm and JSR dependencies, permissions, config file precedence and the built-in fmt, lint, test and compile toolchain. json wins if both define it), and both prefixed and unprefixed Node built-ins resolve. It tells the agent not to ask users to rewrite imports or adopt JSR as a precondition, since the two real differences from Node are permissions and npm lifecycle scripts not running automatically.
Deno Runtime and Package Manager fits situations like: scaffolding a new Deno project or adding dependencies to one; debugging why an npm package's native addon isn't working after install; deciding where a setting belongs across package.json, tsconfig.json and deno.json; running Deno's built-in formatter, linter, tests or bundler.
Run `npx skills add denoland/skills --skill deno -a claude-code`. Or copy the skill folder (skills/deno in denoland/skills) into .claude/skills/deno in your project. Claude Code loads it when a task matches its description.
Run `npx skills add denoland/skills --skill deno -a codex`. Or copy the skill folder (skills/deno in denoland/skills) into .agents/skills/deno in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add denoland/skills --skill deno -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/deno, .gemini/skills/deno, .github/skills/deno and .opencode/skills/deno in your project.
Going by SKILL.md and its folder, Deno Runtime and Package Manager needs the command-line tools its instructions call (deno, npm, pnpm and yarn). Our summary lists: Deno 2.9 or newer.
SKILL.md names 2 domains. In commands or code: deno.land; the agent is likely to contact it when it follows the instructions. As links in the text: docs.deno.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Deno Runtime and Package Manager is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Deno Runtime and Package Manager: Create Saleor Package (saleor/apps, 162 stars), npm Package (jwynia/agent-skills, 166 stars), Npx CLI (jwynia/agent-skills, 166 stars) and npm Supply Chain Security (bodadotsh/npm-security-best-practices, 859 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
denoland (a GitHub organization, an official publisher) maintains it in denoland/skills, which has 100 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on July 29, 2026.
Source: denoland/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.