Resource Clients
KV
Imported from "void/kv".
kv
Typed JSON-aware client for the inferred KV binding.
import { kv } from 'void/kv';
await kv.put('settings', { theme: 'dark' });
const settings = await kv.get<{ theme: string }>('settings');Key exports: kv, createKV(namespace), KVClient, KVMap, PutOptions, ListOptions.
kv.map(prefix) creates a typed namespaced view where every key is stored under prefix:.
Storage
Imported from "void/storage".
storage
Default R2 bucket proxy for the inferred STORAGE binding.
import { storage } from 'void/storage';
await storage.put('avatars/alice.png', file);
const object = await storage.get('avatars/alice.png');Key exports: storage, createStorage(bucket).
AI
Imported from "void/ai".
ai
Typed AI client for Cloudflare AI models and provider-native AI Gateway requests.
import { ai } from 'void/ai';
const result = await ai
.run('@cf/meta/llama-3.3-70b-instruct-fp8-fast', {
messages: [{ role: 'user', content: 'Summarize this release note.' }],
})
.match({ ok: (result) => result, limited: (limit) => limit.response() });
const response = await ai
.provider('openai')
.fetch('/chat/completions', {
body: {
model: 'gpt-4o',
messages: [{ role: 'user', content: 'Summarize this release note.' }],
},
})
.match({ ok: (result) => result, limited: (limit) => limit.response() });Key exports: ai, VoidAi, provider request types. See AI for provider setup and streaming examples.
ISR
Imported from "void/isr".
revalidate(options)
Revalidate ISR-cached pages on demand. In local development this is a no-op because there is no edge ISR cache.
import { revalidate } from 'void/isr';
await revalidate({ paths: ['/', '/blog/hello'] });
await revalidate({ all: true });Signature:
function revalidate(options: { paths?: string[]; all?: boolean }): Promise<void>;Logging
Imported from "void/log".
logger
Structured logger that emits one JSON line per call so deployed logs can be filtered by message and fields.
import { logger } from 'void/log';
logger.info('checkout completed', { orderId, userId });
logger.error('webhook failed', { provider: 'stripe', attempt: 3 });Methods: logger.error(message, fields?), logger.warn(message, fields?), logger.info(message, fields?).