{"slug": "deno-2-5-permissions-in-the-config-file", "title": "Deno 2.5: Permissions in the config file", "summary": "Deno 2.5 introduces the ability to define permission sets directly in the `deno.json` config file, allowing users to pre-configure and reuse specific permission flags for different commands like `deno run` or `deno test`. The update also adds setup and teardown lifecycle APIs (`beforeAll`, `beforeEach`, `afterAll`, `afterEach`) to `Deno.test` for easier test management, alongside other improvements such as WebSocket headers and performance enhancements.", "body_md": "To upgrade to Deno 2.5, run the following in your terminal:\n\n```\ndeno upgrade\n```\n\nIf Deno is not yet installed, run one of the following commands to install or\n[learn how to install it here](https://docs.deno.com/runtime/manual/getting_started/installation).\n\n```\n# Using Shell (macOS and Linux):\ncurl -fsSL https://deno.land/install.sh | sh\n\n# Using PowerShell (Windows):\niwr https://deno.land/install.ps1 -useb | iex\n```\n\nWhat’s new in Deno 2.5\n\n[Permission sets in config](#permission-sets-in-config)[Setup and teardown APIs to](#setup-and-teardown-apis-to-denotest)`Deno.test`\n\n[WebSocket headers](#websocket-headers)[Runtime API for](#runtime-api-for-deno-bundle)`deno bundle`\n\n[HTML entrypoint support in](#html-entrypoint-support-in-deno-bundle)`deno bundle`\n\n[Permissions audit log](#permissions-audit-log)`deno run`\n\nlists all tasks and scripts[Simpler stdio from](#simpler-stdio-from-denochildprocess)`Deno.ChildProcess`\n\n[More consistent behavior for formatting options](#more-consistent-behavior-for-formatting-options)[Dependency management](#dependency-management)[Node.js](#nodejs-settimeout-and-setinterval-with---unstable-node-globals)`setTimeout`\n\nand`setInterval`\n\nwith`--unstable-node-globals`\n\n`--watch`\n\nenvironment variables with`--env-file`\n\n[Set TCP backlog size to](#set-tcp-backlog-size-to-denoserve)`Deno.serve`\n\n[TSConfig compatibility for frameworks](#tsconfig-compatibility-for-frameworks)[Performance improvements](#performance-improvements)[Other features](#other-features)[V8 14.0 and TypeScript 5.9.2](#v8-140-and-typescript-592)[Acknowledgments](#acknowledgments)\n\nPermission sets in config\n\nOftentimes, granular permissions vary depending on context and subcommand: you\nmay run `deno main.ts`\n\nwith a certain set of permissions that differ from\n`deno test`\n\nor `deno compile`\n\n.\n\nTo simplify managing permissions in these scenarios, we have added permission\nsets that you can set in your `deno.json`\n\nconfig file:\n\n```\n{\n  \"permissions\": {\n    \"process-data\": {\n      \"read\": [\"./data\"],\n      \"write\": [\"./data\"]\n    }\n    // ...more permissions can be defined here by name...\n  },\n  \"tasks\": {\n    \"dev\": \"deno run -P=process-data main.ts\"\n  }\n}\n```\n\nThat way, you can run a command with pre-defined permission flags:\n\n```\n# Long\ndeno run --permission-set=process-data main.ts\n\n# Short\ndeno run -P=process-data main.ts\n```\n\nYou can also set a `default`\n\npermission set, which can be used with `-P`\n\nwith no\nargument:\n\n```\n{\n  \"permissions\": {\n    \"default\": {\n      \"read\": [\"./deno.json\"],\n      \"env\": true,\n      \"run\": {\n        \"allow\": [\"git\"]\n      }\n    }\n  },\n  \"tasks\": {\n    \"dev\": \"deno run -P main.ts\"\n  }\n}\n```\n\nPermissions can also be optionally specified within the `test`\n\n, `bench`\n\n, or\n`compile`\n\nkeys:\n\n```\n{\n  \"test\": {\n    \"permissions\": {\n      \"read\": [\"./data\"]\n    }\n  }\n}\n```\n\nWhen defined this way, you must pass the permission flag `-P`\n\nwhen running\n`deno test`\n\n, or you’ll receive an error:\n\n```\n> deno test\nerror: Test permissions were found in the config file. Did you mean to run with `-P`?\n    at file:///Users/david/dev/scratch2/package-a/deno.json\n> deno test -P\n...runs...\n> deno test --allow-read\n...runs...\n> deno test -A\n...runs...\n```\n\nFor more information, please refer to\n[our documentation](https://docs.deno.com/runtime/fundamentals/configuration#permissions).\n\nSetup and teardown APIs to `Deno.test`\n\nTo make testing easier, we’ve added these new APIs to\n[ Deno.test](https://docs.deno.com/runtime/fundamentals/testing/) to help\nperform setup and teardown for test cases:\n\n`Deno.test.beforeAll`\n\n`Deno.test.beforeEach`\n\n`Deno.test.afterAll`\n\n`Deno.test.afterEach`\n\nHere’s a concrete example showing how to set up a test database:\n\n``` python\nimport sqlite from \"node:sqlite\";\nimport { assertEquals } from \"jsr:@std/assert\";\n\nlet testDb: sqlite.DatabaseSync;\n\n// Run once before all tests\nDeno.test.beforeAll(() => {\n  testDb = new sqlite.DatabaseSync(\":memory:\");\n  testDb.exec(`CREATE TABLE users (\n      id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE\n    );\n  `);\n});\n\n// Run before each individual test\nDeno.test.beforeEach(() => {\n  testDb.exec(\"DELETE FROM users\");\n  const insert = testDb.prepare(\n    \"INSERT INTO users (name, email) VALUES (?, ?)\",\n  );\n  insert.run(\"Alice\", \"alice@example.com\");\n  insert.run(\"Bob\", \"bob@example.com\");\n});\n\n// Run after each individual test\nDeno.test.afterEach(() => {\n  // Clean up test data\n  testDb.exec(\"DELETE FROM users\");\n});\n\n// Run once after all tests\nDeno.test.afterAll(() => {\n  testDb.close();\n});\n\nDeno.test(\"should find user by email\", () => {\n  const query = testDb.prepare(\"SELECT * FROM users WHERE email = ?\");\n  const user = query.get(\"alice@example.com\");\n  assertEquals(user?.name, \"Alice\");\n});\n\nDeno.test(\"should create new user\", () => {\n  const insert = testDb.prepare(\n    \"INSERT INTO users (name, email) VALUES (?, ?)\",\n  );\n  insert.run(\"Charlie\", \"charlie@example.com\");\n\n  const countQuery = testDb.prepare(\"SELECT COUNT(*) as count FROM users\");\n  const result = countQuery.get();\n  assertEquals(result!.count, 3); // 2 from beforeEach + 1 new\n});\n```\n\nFor more information, please refer to\n[our deno test documentation](https://docs.deno.com/api/deno/testing#test-hooks).\n\nWebSocket headers\n\nWe’ve extended the WebSocket spec to allow for specifying custom headers when initiating a WebSocket connection:\n\n``` js\nconst ws = new WebSocket(\"wss://api.example.com/socket\", {\n  headers: new Headers({\n    \"Authorization\": `Bearer ${token}`,\n    \"X-Custom\": \"value\",\n  }),\n});\n```\n\nThis can be useful in scenarios when you need to authenticate, attach session state, or pass metadata right at the handshake stage, without leaking sensitive data in the URL or doing extra roundtrips.\n\n*Keep in mind that this will not work in browsers.*\n\nRuntime API for `deno bundle`\n\nIn 2.4, [we re-introduced deno bundle](/v2.4#deno-bundle), which creates a\nsingle-file JavaScript file from JavaScript or TypeScript. In this release,\nwe’ve added support for a runtime API, allowing you to programmatically bundle\nyour client or server side JavaScript or TypeScript.\n\nFor example, you have `index.tsx`\n\n:\n\n``` js\nimport { render } from \"npm:preact\";\n\nimport \"./styles.css\";\n\nconst app = (\n  <div>\n    <p>Hello World!</p>\n  </div>\n);\n\nrender(app, document.body);\n```\n\nYou can bundle programmatically with this `bundle.ts`\n\nscript:\n\n``` js\nconst result = await Deno.bundle({\n  entrypoints: [\"./index.tsx\"],\n  outputDir: \"dist\",\n  platform: \"browser\",\n  minify: true,\n});\nconsole.log(result);\n```\n\nNote that the [ Deno.bundle](https://docs.deno.com/api/deno/~/Deno.bundle) API\nis experimental and must be used with the flag\n\n`--unstable-bundle`\n\n.For more information about available runtime options and configurations,\n[please refer to our documentation](https://docs.deno.com/runtime/reference/bundling/).\n\nHTML entrypoint support in `deno bundle`\n\nPreviously, `deno bundle`\n\nrequired a `.js`\n\n/`.ts`\n\n/`.jsx`\n\n/`.tsx`\n\nfile as an\nentrypoint. Now with 2.5, it can support HTML files as inputs:\n\n```\ndeno bundle --outdir dist index.html\n```\n\nWith this command, `deno bundle`\n\nwill find scripts referenced in the HTML file,\nbundle them, and then update the paths in `index.html`\n\nto point to the bundled\nscripts. If your app imports global css (`import \"./styles.css\"`\n\n), this will be\nbundled and injected into the HTML output as well.\n\nWith the same `index.tsx`\n\nfrom above, and an HTML file:\n\n```\n<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Example</title>\n    <script src=\"./index.tsx\" type=\"module\"></script>\n  </head>\n</html>\n```\n\nWhen you run `deno bundle --outdir dist index.html`\n\n, this is the resulting HTML:\n\n```\n<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Example</title>\n    <script src=\"./index-2TFDJWLF.js\" type=\"module\" crossorigin></script>\n    <link rel=\"stylesheet\" crossorigin href=\"./index-EWSJYQGA.css\">\n  </head>\n</html>\n```\n\nNote that the bundled output includes a hash based on the bundled content, to fingerprint this specific bundle.\n\nHTML inputs are also fully supported in the\n[runtime API mentioned above](#runtime-api-for-deno-bundle).\n\nWhile simple and zero-config, this feature overlaps a bit with Vite . In fact,\n[Fresh recently adopted Vite](https://deno.com/blog/fresh-and-vite) for its\ndevelopment server and build pipeline. Think of it this way:\n\n`deno bundle index.html`\n\n- great for small, static apps where you just want a quick packaged build.- Vite - better for complex projects that benefit the wider Vite ecosystem.\n\nBoth paths run seamlessly on Deno - you can pick whichever fits your workflow best.\n\nPermissions audit log\n\nOne core aspect of security is having an audit log for accountability, which shows who did what, when, and how.\n\nWith 2.5, we’ve added a `DENO_AUDIT_PERMISSIONS`\n\nenv var that sets the path for\na JSONL permission audit log, which contains the permission and value.\n\n``` js\nconsole.log(Deno.env.get(\"FOO\"));\nconst content = await Deno.readTextFile(\"data.csv\");\nDeno.writeTextFileSync(\"log.txt\", \"...\");\nDENO_AUDIT_PERMISSIONS=./permission.log deno run -A main.ts\n```\n\nHere’s an example of what the audit log might look like:\n\n```\n{\n  \"v\": 1,\n  \"datetime\": \"2025-09-05T12:12:35Z\",\n  \"permission\": \"env\",\n  \"value\": \"FOO\"\n}\n{\n  \"v\": 1,\n  \"datetime\": \"2025-09-05T12:14:18Z\",\n  \"permission\": \"read\",\n  \"value\": \"data.csv\"\n}\n{\n  \"v\": 1,\n  \"datetime\": \"2025-09-05T12:14:26Z\",\n  \"permission\": \"write\",\n  \"value\": \"log.txt\"\n}\n```\n\nThis can be combined with the env var\n[ DENO_TRACE_PERMISSIONS=1](https://docs.deno.com/runtime/fundamentals/security/#permissions),\nwhich will also add the stack trace for permission requests to the audit log.\n\nFor more information, please visit\n[our documentation](https://docs.deno.com/runtime/fundamentals/security/#permissions).\n\n`deno run`\n\nlists all tasks and scripts\n\nPreviously, `deno run`\n\nwith no arguments printed an error, but in 2.5 it will\noutput a list of available tasks from `deno.json`\n\nand scripts from\n`package.json`\n\n:\n\n```\ndeno run\nPlease specify a [SCRIPT_ARG] or a task name.\n\nAvailable tasks:\n- dev\n    deno run -A --env --watch=static/,routes/,data/ dev.ts\n- build\n    deno run -A dev.ts build\n- db:push (package.json)\n    dotenv drizzle-kit push\n- db:generate (package.json)\n    dotenv drizzle-kit generate\n```\n\nThis will make it simpler to quickly see what tasks and scripts you can execute from the command line.\n\nSimpler stdio from `Deno.ChildProcess`\n\nWe’ve added convenience methods to `stdout`\n\nand `stderr`\n\nstreams in\n`Deno.ChildProcess`\n\n, making it easier to get various output types. For example:\n\n``` js\nconst sub = new Deno.Command(\"cat\", {\n  args: [\"hello.txt\"],\n  stdout: \"piped\",\n}).spawn();\n\n// 2.4 and before\nimport { toText } from \"jsr:@std/streams/to-text\";\nconst stdout = await toText(sub.stdout);\n\n// 2.5\nconst stdout = await sub.stdout.text();\n```\n\nConvenience methods that are now available, match those on\n[ Response](https://developer.mozilla.org/en-US/docs/Web/API/Response):\n\n`Deno.SubprocessReadableStream.arrayBuffer()`\n\n->`ArrayBuffer`\n\n`Deno.SubprocessReadableStream.bytes()`\n\n->`Uint8Array`\n\n`Deno.SubprocessReadableStream.json()`\n\n->`unknown`\n\n`Deno.SubprocessReadableStream.text()`\n\n->`string`\n\nMore consistent behavior for formatting options\n\nWhen the `spaceSurroundingProperties`\n\noption is set to false,\n[ deno fmt](https://docs.deno.com/runtime/reference/cli/fmt/) will now also\napply this to braces in named\n\n`import`\n\nand `export`\n\nstatements:\n\n```\n{\n  \"fmt\": {\n    \"spaceSurroundingProperties\": false\n  }\n}\njs\n// Old: Spaces preserved in `import` statement.\nimport { foo } from \"bar\";\n\nconst baz = {a: 1};\n\n// New: Spaces removed.\nimport {foo} from \"bar\";\n\nconst baz = {a: 1};\n```\n\nThis behavior roughly matches\n[that of stylistic’s curly rule](https://eslint.style/rules/object-curly-spacing).\nNote that this option defaults to `true`\n\n, so users won’t be affected unless they\nhave explicitly configured it to `false`\n\n.\n\nThank you [mologie](https://github.com/mologie) for this contribution!\n\nDependency management\n\nIn 2.5, we’ve introduced several changes to improve dependency management.\nFirstly, we have changed the `deno install`\n\nreport format to make it more useful\nwhen managing dependencies:\n\n``` bash\n$ deno install\n```\n\nYou now get a quick overview how many direct dependencies were installed, how many packages were pulled from a cache as well as how many JSR and npm packages were downloaded.\n\nWe have also simplified the warning displayed if an npm package installed with\n`deno install`\n\nrequires a build script:\n\n```\n╭ Warning\n│\n│  Ignored build scripts for packages:\n│  npm:sharp@0.34.3\n│\n╰─ Run \"deno install --allow-scripts=npm:sharp@0.34.3\" to run build scripts.\n```\n\n*We will soon ship a tool that makes management of these build scripts more\nconvenient, collaborative and secure.*\n\n`no-unversioned-import`\n\nlint rule\n\nThe\n[ no-unversioned-import](https://docs.deno.com/lint/rules/no-unversioned-import)\nrule requires that all\n\n`npm:`\n\nand `jsr:`\n\nimport statements include a version\nnumber. This lint rule is enabled by default.While it’s convenient to write `import chalk from \"npm:chalk\"`\n\nfor quick\nhacking, it’s not recommended in production, as Deno will automatically pull the\nlatest version of the package. If the package published a breaking change, it\ncould cause your code to fail.\n\n``` python\nimport chalk from \"npm:chalk\";\nphp\n$ deno lint\n\nerror[no-unversioned-import]: Missing version in specifier\n --> /dev/main.ts:1:19\n  |\n1 | import chalk from \"npm:chalk\";\n  |                   ^^^^^^^^^^^\n  = hint: Add a version requirement after the package name\n\n  docs: https://docs.deno.com/lint/rules/no-unversioned-import\n```\n\n*This rule is part of the recommended set and will be applied automatically if\nyou haven’t configured\ndeno lint.*\n\n`no-import-prefix`\n\nlint rule\n\nThe [ no-import-prefix](https://docs.deno.com/lint/rules/no-import-prefix) rule\nensures that all dependencies are declared in either\n\n`deno.json`\n\nor\n`package.json`\n\nrather than imported directly from URLs or package registries.\nThis promotes better dependency management and makes it easier to track and\nupdate dependencies.\n\n```\n{\n  \"imports\": {\n    \"oak\": \"jsr:@oak/oak@17\"\n  }\n}\npython\nimport { Application } from \"oak/application\";\nimport chalk from \"npm:chalk\";\nbash\n$ deno lint\n\nerror[no-import-prefix]: Inline 'npm:', 'jsr:' or 'https:' dependency not allowed\n --> /dev/main.ts:2:19\n  |\n2 | import chalk from \"npm:chalk\";\n  |                   ^^^^^^^^^^^\n  = hint: Add it as a dependency in a deno.json or package.json instead and reference it here via its bare specifier\n\n  docs: https://docs.deno.com/lint/rules/no-import-prefix\n```\n\n*This rule is part of the new workspace set and will be applied automatically\nif there’s deno.json or package.json discovered.*\n\nNode.js `setTimeout`\n\nand `setInterval`\n\nwith `--unstable-node-globals`\n\nThis release brings back `--unstable-node-globals`\n\nflag that makes Deno use\nNode.js flavor of `setTimeout`\n\n, `setInterval`\n\n, `clearTimeout`\n\n, and\n`clearInterval`\n\nAPI.\n\nFor context, Deno has always used Web version of these APIs. The change is\nsubtle - the Web APIs return and accept numbers (timer ID), but Node.js APIs\nreturn and accept `Timer`\n\nobject.\n\nSome npm libraries rely on `Timer.ref()`\n\nor `Timer.unref()`\n\nAPIs that have\nequivalent `Deno.refTimer()`\n\nand `Deno.unrefTimer()`\n\n, but over the years we\nnoticed that this situation leads to more confusion rather than simplification\nof developers’ lives.\n\nSo starting with Deno v2.5 you can use\n[ --unstable-node-globals](https://docs.deno.com/runtime/reference/cli/unstable_flags/#--unstable-node-globals)\nflag, or\n\n[to tell Deno to prefer using Node.js timer APIs.](/blog/v2.4#deno_compat1)\n\n`DENO_COMPAT=1`\n\nenv varWe plan to change used APIs to be Node.js version in Deno 3. For most users there will be no changes required to adjust to the new APIs.\n\n`--watch`\n\nenvironment variables with `--env-file`\n\nWhen using\n[ --watch](https://docs.deno.com/runtime/getting_started/command_line_interface/#watch-mode)\nand\n\n[flag, Deno will automatically reload environment variables when your environment file is updated.](https://docs.deno.com/runtime/reference/env_variables/#.env-file)\n\n`--env-file`\n\nThank you [meetdhanani17](https://github.com/meetdhanani17) for this\ncontribution!\n\nSet TCP backlog size to `Deno.serve`\n\n[ Deno.serve](https://docs.deno.com/runtime/fundamentals/http_server/) is a\none-line, dead simple way to build an HTTP server. However, previously, there\nwasn’t an easy way to set the backlog size (the maximum number of pending TCP\nconnections to queue for your listener), which is useful if you’re expecting\nhuge bursts of traffic.\n\nIn 2.5, we’ve added a new argument, `tcpBacklog`\n\n, letting you explicitly set the\nmaximum number of queued incoming connections that can used with\n`Deno.listen{Tls}`\n\nand `Deno.serve`\n\n:\n\n``` js\nDeno.serve({\n  port: 4600,\n  tcpBacklog: 4096,\n}, (_req) => new Response(\"hello\"));\n```\n\nThe default TCP backlog has been increased to 511, which is a default used by many high performance servers.\n\nTSConfig compatibility for frameworks\n\nDeno 2.4\n[expanded its tsconfig.json compatibility](/blog/v2.4#better-tsconfigjson-support)\nwith a focus on allowing Vite-configured projects to type-check with\n\n`deno check`\n\nout-of-the-box. Previously, these would have required a well-versed\nuser to convert the configuration so the Deno CLI and\n[LSP](https://docs.deno.com/runtime/reference/lsp_integration/)would work.\n\nDeno 2.5 adds support for\n[ compilerOptions.rootDirs](https://github.com/denoland/deno/pull/30495) and\nthe\n\n[option for](https://github.com/denoland/deno/pull/30603)\n\n`\"bundler\"`\n\n`compilerOptions.moduleResolution`\n\n, fixing type-checking for the following\nproject templates:**SvelteKit**:`npx sv create`\n\n**Next.js**:`npx create-next-app`\n\nYou can try these out by creating a basic application from one of these commands\nas you would with Node.js, adding a `deno.json`\n\nfile with content `{}`\n\nto enable\nthe LSP and running the `deno check`\n\ncommand. Ensure the Deno extension is\ninstalled.\n\nWe aim for comprehensive TypeScript/`tsconfig.json`\n\ncompatibility with modern\nNode.js projects. Please continue reporting any discovered incompatibility using\nour [issue tracker](https://github.com/denoland/deno/issues)!\n\nPerformance improvements\n\n**Emit cache optimization**: Deno now only clears its emit cache when the\nunderlying `deno_ast`\n\nversion changes, rather than on every update,\nsignificantly reducing unnecessary recompilation overhead.\n\n**CommonJS wrapper efficiency**: Memory usage and heap allocations have been\nreduced when creating CommonJS wrapper modules, making Node.js compatibility\nmore efficient.\n\n**Conditional JSX transpilation**: JSX transpilation is now skipped entirely\nwhen JSX is disabled, avoiding unnecessary processing overhead for projects that\ndon’t use JSX.\n\n**Improved structuredClone**: The\n\n`structuredClone`\n\nAPI now uses more\nefficient internal implementations, speeding up object cloning operations.** Buffer method optimizations**: The\n\n`Buffer.subarray`\n\nand\n`Buffer.prototype.utf8Slice`\n\nmethods have been optimized for better performance\nwhen working with binary data.**Node-API optimizations**: Various Node.js API compatibility layer\noptimizations reduce overhead when using native Node.js modules.\n\nOther features\n\n**Disable hostname verification in TLS connections**: For development and\ntesting scenarios, you can now disable hostname verification in TLS connections,\nproviding more flexibility when working with self-signed certificates or\nnon-standard certificate configurations.\n([#30409](https://github.com/denoland/deno/pull/30409))\n\n**Unix socket and vsock proxy support via environment variable**: You can now\nenable parsing Unix socket and vsock proxies for the `fetch`\n\nAPI with\nenvironment variables. ([#30377](https://github.com/denoland/deno/pull/30377))\n\n**Pull-based diagnostics in LSP**: The Language Server Protocol implementation\nnow uses pull-based diagnostics, improving performance and responsiveness when\nworking with large codebases in your editor.\n([#30325](https://github.com/denoland/deno/pull/30325))\n\n**Enhanced Node.js async hooks**: Improved Node.js compatibility with async\nhooks implementation for `nextTick`\n\nTickObject tracking, making it easier to\nmigrate existing Node.js applications that rely on this functionality.\n([#30578](https://github.com/denoland/deno/pull/30578))\n\n**Bundle dependencies support**: npm packages that use `bundleDependencies`\n\nin\ntheir `package.json`\n\nare now fully supported, expanding compatibility with the\nbroader npm ecosystem. ([#30521](https://github.com/denoland/deno/pull/30521))\n\n**Vsock transport for telemetry**: OpenTelemetry now supports vsock transport,\nenabling telemetry data collection in specialized virtualized environments and\nimproving observability options.\n([#30001](https://github.com/denoland/deno/pull/30001))\n\nV8 14.0 and TypeScript 5.9.2\n\nDeno 2.5 upgrades to V8 14.0 and\n[TypeScript 5.9.2](https://devblogs.microsoft.com/typescript/announcing-typescript-5-9/)\nbringing new language features and performance improvements.\n\nThis release includes a big overhaul of\n[the Temporal API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal).\nAs the implementation of this API matures across JavaScript engines, our hopes\nare that we can soon remove\n\n`--unstable-temporal`\n\nflag.Acknowledgments\n\nWe couldn’t build Deno without the help of our community! Whether by answering\nquestions in our\ncommunity [Discord server](https://discord.gg/deno) or [reporting bugs](https://github.com/denoland/deno/issues),\nwe are incredibly grateful for your support. In particular, we’d like to thank\nthe following people for their contributions to Deno 2.5: 林炳权, Alex Yang,\nAsher Gomez, cions, ctrl+d, Daniel Osvaldo Rahmanto, EdamAmex, Edilson\nPateguana, Garret Thompson, gerald, James Bronder, João Victor Lopes, Kendell R,\nKenta Moriuchi, Kingsword, Krhougs, Kumbham Ajay Goud, Laurence Rowe, Lucas\nVieira, Luke Swithenbank, Meet Dhanani, Oliver Kuckertz, Ruyut, sgasho, and ud2.\n\nWould you like to join the ranks of Deno\ncontributors? [Check out our contribution docs here](https://docs.deno.com/runtime/manual/references/contributing),\nand we’ll see you on the list next time.\n\nBelieve it or not, the changes listed above still don’t tell you everything that\ngot better in 2.5. You can view\nthe [full list of pull requests merged in Deno 2.5 on GitHub](https://github.com/denoland/deno/releases/tag/v2.5.0).\n\nThank you for catching up with our 2.5 release, and we hope you love building with Deno!\n\n🚨️[There have been major updates to Deno Deploy!]🚨️\n\n[Database connections and data explorer right in the UI][Connect to AWS and GCP via Cloud Connections][Automatic and immediate observability and telemetry]and\n\n[much more!]", "url": "https://wpnews.pro/news/deno-2-5-permissions-in-the-config-file", "canonical_source": "https://deno.com/blog/v2.5", "published_at": "2025-09-10 09:00:00+00:00", "updated_at": "2026-05-22 12:24:33.730769+00:00", "lang": "en", "topics": ["developer-tools", "open-source"], "entities": ["Deno", "TypeScript", "V8", "Node.js"], "alternates": {"html": "https://wpnews.pro/news/deno-2-5-permissions-in-the-config-file", "markdown": "https://wpnews.pro/news/deno-2-5-permissions-in-the-config-file.md", "text": "https://wpnews.pro/news/deno-2-5-permissions-in-the-config-file.txt", "jsonld": "https://wpnews.pro/news/deno-2-5-permissions-in-the-config-file.jsonld"}}