Skip to content
brought to you byVoidZero

Resource Clients ​

KV ​

Imported from "void/kv".

kv ​

Typed JSON-aware client for the inferred KV binding.

ts
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.

ts
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.

ts
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.' }],
});

const response = await ai.provider('openai').fetch('/chat/completions', {
  body: {
    model: 'gpt-4o',
    messages: [{ role: 'user', content: 'Summarize this release note.' }],
  },
});

Key exports: ai, VoidAi, provider request types. See AI for provider setup and streaming examples.

AI methods return promises and reject usage limits with UsageLimit from void/limits. Void routes and Pages actions return a structured HTTP 429 for uncaught limits. See usage limits for optional instanceof UsageLimit handling.

Provider keys ​

Default secret names for ai.provider(). Use apiKeyEnv to choose another name.

Provider prefixEnv var
openaiOPENAI_API_KEY
anthropicANTHROPIC_API_KEY
google-ai-studioGOOGLE_API_KEY
deepseekDEEPSEEK_API_KEY
groqGROQ_API_KEY
mistralMISTRAL_API_KEY
grokGROK_API_KEY
openrouterOPENROUTER_API_KEY
perplexityPERPLEXITY_API_KEY
cohereCOHERE_API_KEY
cerebrasCEREBRAS_API_KEY
huggingfaceHUGGINGFACE_API_KEY
replicateREPLICATE_API_KEY
basetenBASETEN_API_KEY
cartesiaCARTESIA_API_KEY
deepgramDEEPGRAM_API_KEY
elevenlabsELEVENLABS_API_KEY
falFAL_API_KEY
ideogramIDEOGRAM_API_KEY
parallelPARALLEL_API_KEY

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.

ts
import { revalidate } from 'void/isr';

await revalidate({ paths: ['/', '/blog/hello'] });
await revalidate({ all: true });

With routing.typedRoutes, each path must match one of your routes. Build paths with routeUrl(), or use as RouteUrl for paths you validate at runtime. Without this setting, RouteUrl is string.

Signature:

ts
function revalidate(options: { paths?: RouteUrl[]; 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.

ts
import { logger } from 'void/log';

logger.info('checkout completed', { orderId, userId });
logger.error('webhook failed', { provider: 'stripe', attempt: 3 });

const log = logger.child({ component: 'queue', queue: 'tasks' });
log.info('task.started', { taskId });

Methods: logger.error(message, fields?), logger.warn(message, fields?), logger.info(message, fields?), logger.child(fields).