One OS process. Many isolated apps. Sub-millisecond cold starts with V8 isolates and sliver snapshots. WinterTC compatible.
Production-ready edge runtime with comprehensive API support
~267ยตs cold starts with sliver snapshots. 187x faster than fresh V8 isolates.
One OS process hosts many isolated apps in separate V8 isolates with strong per-app boundaries.
Full fetch(), Request, Response, Headers, URL, TextEncoder, TextDecoder support per WinterTC spec.
Configurable per-request CPU limits with timer-based termination. Prevents infinite loops and resource exhaustion.
Per-isolate memory limits with LRU eviction and soft termination. 4-tier pressure monitoring prevents OOM conditions.
Automatic metrics collection per hostname. Prometheus exposition format at /_admin/metrics endpoint.
V8 built-in WASM engine for executing binary modules. Source hash caching for integrity verification.
Full crypto.subtle implementation: AES-GCM, HMAC, SHA-256/384/512, PBKDF2. JWK key import/export.
Portable isolate snapshots with VFS state. Deploy once, run anywhere. Tar-based format with integrity validation.
WebSocketPair API compatible with Cloudflare Workers. Per-connection V8 isolate with CPU/memory enforcement per frame.
Learn more โEdgeStore-backed key-value store per app. Hostname-namespaced, zero config. JSON helpers, named namespaces, prefix listing. import { kv, openKV } from 'nano:kv'
Drop-in browser localStorage API backed by nano:kv. Front-end code and Cloudflare Workers patterns using localStorage.* run unchanged โ no rewrite needed.
require('path'), require('buffer'), require('assert'), process.env โ common npm packages work without a bundler shim.
NANO speaks three dialects. Pick the one your code already uses.
Standard fetch(), Request, Response, WebCrypto, streams. Drop-in for Workers code.
export default {
async fetch(request) {
const url = new URL(request.url);
return Response.json({
path: url.pathname,
});
}
};
require('path'), require('buffer'), require('assert'), process.env โ common npm packages work without a bundler shim.
const path = require('path');
const { from } = require('buffer');
export default {
async fetch(req) {
const env = process.env.NODE_ENV;
return new Response(env);
}
};
localStorage shim, nano:kv for structured storage โ front-end code and Cloudflare KV patterns work without changes.
import { kv, openKV } from 'nano:kv';
const hits = (await kv.getJSON('c')) ?? 0;
await kv.setJSON('c', hits + 1);
// Or use the localStorage shim
await localStorage.setItem('theme', 'dark');
Follow the quick start guide to build and run your first NANO application.
View Quick Start Guide