camera (400, 300) · zoom 0.90

An infinite canvas runtime for AI‑generated web artifacts.

Keeping hundreds of generated pages alive as iframes doesn't scale. Flattening them to images loses selection and events. Deckle keeps the space in between: cached paint you can still reach into.

Lifecycle

Resources follow the viewport, not the document count

Every artifact moves through an explicit state machine. Live DOM, runtimes, and GPU textures are budgeted resources granted by visibility and interaction — never ambient.

Streaming

Built for content that is still being written

An agent emits an artifact token by token. Every kind commits at its own boundary — a grapheme, a line, a closed markdown construct, a JSON value, a decided HTML tag — and that boundary only ever moves forward, so a reader never sees an interpretation get retracted.

Packages

Backend-independent contracts, tested against oracles

Optimized implementations ship next to naive reference implementations and are differentially tested against them — the oracle stays available as a rollback path.

@dopejs/deckle-core

camera, scene store transactions, lifecycle, visibility, budgets

@dopejs/deckle-spatial

grid spatial index plus the naive differential oracle

@dopejs/deckle-artifact

revisions, interaction tree, canonical serialization

@dopejs/deckle-security

static-profile sanitizer, URL policy, quotas, capabilities

@dopejs/deckle-runtime

runtime message protocol, epochs, capability-guarded bridge

@dopejs/deckle-renderer

retained pictures, canvas-native content rendering, LOD, texture budget

@dopejs/deckle-editor

internal hit testing, selection model, virtual event paths

@dopejs/deckle-protocol

shared pre-release vocabulary

@dopejs/deckle-platform-probe

HTML-in-Canvas capability probes, evidence manifests

Status

Honest scope

The engine contracts are implemented and tested. The browser-evidence gates are not exited: support for the experimental HTML-in-Canvas APIs is a capability we detect, not a claim we make. No open-source license has been selected yet.