deno/ext/fetch
snek 4772778107
Some checks are pending
ci / test release windows-x86_64 (push) Blocked by required conditions
ci / pre-build (push) Waiting to run
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / build libs (push) Blocked by required conditions
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / publish canary (push) Blocked by required conditions
refactor: http upgrade internals (#30612)
clean up some outdated code and implement a few performance
improvements. most notably, the response from `upgradeWebSocket` is now
actually used as a normal response.

a followup pr will rework raw upgrades to a greater extent
2025-09-19 09:33:32 +02:00
..
20_headers.js fix: move extension file declarations to cli/tsc/dts (#28180) 2025-02-19 02:53:21 +01:00
21_formdata.js fix: move extension file declarations to cli/tsc/dts (#28180) 2025-02-19 02:53:21 +01:00
22_body.js feat(ext/process): add collector utilities to ChildProcess.stdout & ChildProcess.stderr (#30552) 2025-09-02 11:21:14 +02:00
22_http_client.js feat(unstable): tcp proxy for Deno.HttpClient (#30700) 2025-09-15 16:50:12 +00:00
23_request.js fix(ext/fetch): only uppercase known methods (#30290) 2025-09-03 11:19:07 +02:00
23_response.js fix: move extension file declarations to cli/tsc/dts (#28180) 2025-02-19 02:53:21 +01:00
26_fetch.js feat(otel): span context propagators (#28460) 2025-03-13 16:32:45 +01:00
27_eventsource.js feat(unstable): WebSocket headers field (#30321) 2025-08-28 11:44:59 +02:00
Cargo.toml 2.5.1 (#30753) 2025-09-17 01:58:00 +02:00
dns.rs chore: upgrade hickory-dns to 0.25.2 (#30582) 2025-09-08 23:11:23 +02:00
fs_fetch_handler.rs refactor(permissions): remove access check callback (#30050) 2025-07-10 21:40:20 -04:00
internal.d.ts chore: Happy New Year 2025 (#27509) 2024-12-31 19:12:39 +00:00
lib.rs refactor: http upgrade internals (#30612) 2025-09-19 09:33:32 +02:00
proxy.rs feat(unstable): tcp proxy for Deno.HttpClient (#30700) 2025-09-15 16:50:12 +00:00
README.md refactor: allow lazy main module (#28929) 2025-04-30 19:59:20 +00:00
tests.rs chore: upgrade hickory-dns to 0.25.2 (#30582) 2025-09-08 23:11:23 +02:00

deno_fetch

This crate implements the Fetch API.

Spec: https://fetch.spec.whatwg.org/

Usage Example

From javascript, include the extension's source, and assign the following properties to the global scope:

import * as headers from "ext:deno_fetch/20_headers.js";
import * as formData from "ext:deno_fetch/21_formdata.js";
import * as request from "ext:deno_fetch/23_request.js";
import * as response from "ext:deno_fetch/23_response.js";
import * as fetch from "ext:deno_fetch/26_fetch.js";
import * as eventSource from "ext:deno_fetch/27_eventsource.js";

// Set up the callback for Wasm streaming ops
Deno.core.setWasmStreamingCallback(fetch.handleWasmStreaming);

Object.defineProperty(globalThis, "fetch", {
  value: fetch.fetch,
  enumerable: true,
  configurable: true,
  writable: true,
});

Object.defineProperty(globalThis, "Request", {
  value: request.Request,
  enumerable: false,
  configurable: true,
  writable: true,
});

Object.defineProperty(globalThis, "Response", {
  value: response.Response,
  enumerable: false,
  configurable: true,
  writable: true,
});

Object.defineProperty(globalThis, "Headers", {
  value: headers.Headers,
  enumerable: false,
  configurable: true,
  writable: true,
});

Object.defineProperty(globalThis, "FormData", {
  value: formData.FormData,
  enumerable: false,
  configurable: true,
  writable: true,
});

Then from rust, provide deno_fetch::deno_fetch::init<Permissions>(Default::default()) in the extensions field of your RuntimeOptions

Where:

  • Permissions: a struct implementing deno_fetch::FetchPermissions
  • Options: deno_fetch::Options, which implements Default

Dependencies

  • deno_webidl: Provided by the deno_webidl crate
  • deno_web: Provided by the deno_web crate
  • deno_url: Provided by the deno_url crate
  • deno_console: Provided by the deno_console crate

Provided ops

Following ops are provided, which can be accessed through Deno.ops:

  • op_fetch
  • op_fetch_send
  • op_utf8_to_byte_string
  • op_fetch_custom_client