Using Web Platform APIs

Deno aims to use web platform APIs (like fetch) instead of inventing a new proprietary API where it makes sense. These APIs generally follow the specifications and should match the implementation in Chrome and Firefox. In some cases it makes sense to deviate from the spec slightly, because of the different security model Deno has.

Here is a list of web platform APIs Deno implements:

You can find the Deno reference for these APIs here .

fetch API

Overview

The fetch API can be used to make HTTP requests. It is implemented as specified in the WHATWG fetch spec .

You can find documentation about this API on MDN .

Spec deviations

Fetching local files

As of Deno 1.16, Deno supports fetching file: URLs. This makes it easier to write code that uses the same code path on a server as local, as well as easier to author code that works both with the Deno CLI and Deno Deploy.

Deno only supports absolute file URLs, this means that fetch("./some.json") will not work. It should be noted though that if --location is specified, relative URLs use the --location as the base, but a file: URL cannot be passed as the --location.

To be able to fetch some resource, relative to the current module, which would work if the module is local or remote, you would want to use import.meta.url as the base. For example, something like:

const response = await fetch(new URL("./config.json", import.meta.url));
const config = await response.json();

Notes on fetching local files:

CustomEvent, EventTarget and EventListener

Overview

The DOM Event API can be used to dispatch and listen to events happening in an application. It is implemented as specified in the WHATWG DOM spec .

You can find documentation about this API on MDN .

Spec deviations


Typings

The TypeScript definitions for the implemented web APIs can be found in the lib.deno.shared_globals.d.ts and lib.deno.window.d.ts files.

Definitions that are specific to workers can be found in the lib.deno.worker.d.ts file.

Deviations of other APIs from spec

Cache API

Only the following APIs are implemented:

A few things that are different compared to browsers:

  1. You cannot pass relative paths to the APIs. The request can be an instance of Request or URL or a url string.
  2. match() & delete() don't support query options yet.