JS API Reference
qzjs provides a WinterTC-compatible JavaScript API. The globals listed here are available in any JS that runs in the runtime (initial_script, message handlers, and code invoked via qz_post_message), without requiring require() or import.
Architecture
API Categories
APIs fall into three groups by the standard they come from.
WinterTC (WinterCG standard)
The WinterCG-compatible subset of Web APIs qzjs implements.
| API | Global |
|---|---|
| console | console |
| performance | performance |
| timers | setTimeout, setInterval, clearTimeout, clearInterval |
| EventTarget | EventTarget, Event, CustomEvent, ErrorEvent |
| AbortController | AbortController, AbortSignal, DOMException |
| URL | URL, URLSearchParams, URLPattern |
| fetch | fetch, Headers, Request, Response |
| crypto | crypto, crypto.subtle |
| streams | ReadableStream, WritableStream, TransformStream |
| compress | CompressionStream, DecompressionStream |
| TextEncoder | TextEncoder, TextDecoder |
| Blob / File / FormData | Blob, File, FormData |
| structuredClone | structuredClone |
| MessageChannel | MessageChannel, MessagePort |
| Worker | Worker |
| navigator | navigator |
W3C APIs
Browser-standard APIs beyond the WinterCG core.
| API | Global |
|---|---|
| WebSocket | WebSocket |
| BroadcastChannel | BroadcastChannel |
| EventSource | EventSource |
| CacheStorage | caches, CacheStorage, Cache |
| Service Worker | navigator.serviceWorker |
| localStorage | localStorage, sessionStorage |
qzjs Platform Extensions
qzjs-specific APIs, not part of any Web standard. Their style is close to Node.js but they are not Node APIs (process, require, Buffer are absent).
| API | Global | Notes |
|---|---|---|
| fs | qzjs.fs | Filesystem operations |
| storage | qzjs.storage | Key-value storage |
| serve | serve() | HTTP / WebSocket / gRPC server |
| grpc | grpc | gRPC client + server (QZ_WITH_GRPC=ON) |
Standards Compliance
qzjs targets WinterTC compatibility — the same subset of Web APIs used by Cloudflare Workers, Deno, and other server-side runtimes. DOM-specific APIs (document, window, HTMLElement) are intentionally excluded.
Not Included
These browser APIs are explicitly excluded:
- DOM:
document,window,HTMLElement,addEventListeneron globals - CSS:
CSSStyleSheet,getComputedStyle, CSSOM - Layout:
requestAnimationFrame,IntersectionObserver,ResizeObserver - Media:
WebRTC,AudioContext - Storage:
indexedDB(useqzjs.storage)
Usage
All globals are available immediately — no imports needed:
// Core APIs
console.log('Hello from qzjs');
setTimeout(() => console.log('tick'), 1000);
// fetch with streaming
let response = await fetch('https://example.com/data.json');
let data = await response.json();
// crypto
let bytes = crypto.getRandomValues(new Uint8Array(32));
let hash = await crypto.subtle.digest('SHA-256', new TextEncoder().encode('hello'));
// URL parsing
let url = new URL('https://example.com/path?key=value');
console.log(url.searchParams.get('key')); // "value"
// Filesystem (platform extension)
let content = await qzjs.fs.read('/app/config.json');
// Storage (platform extension)
await qzjs.storage.set('session_token', 'abc123');