Docs

Site backend

Isolated user, key-value, SQLite, and realtime APIs for every site.

View as Markdown

Site backend

import { scrapheap } from '/__page/lib.js'

const heap = scrapheap()
const user = await heap.user()

scrapheap() returns a SiteBackend with user(), kv, db, and channel().

Key-value

await heap.kv.put('theme', { dark: true })
const theme = await heap.kv.get('theme')
const keys = await heap.kv.list({ prefix: 'theme' })

SQLite

await heap.db.exec('create table if not exists notes (body text)')
await heap.db.exec('insert into notes (body) values (?)', ['hello'])
const { rows } = await heap.db.exec('select body from notes')

Realtime

const channel = heap.channel('comments')
channel.subscribe((data, meta) => console.log(meta.from, data))
channel.presence((count) => console.log(count))
channel.publish({ body: 'hello' })

Public visitors may read key-value/SQLite data and subscribe. Writes and channel publishing are denied unless the owner explicitly enables public raw writes. Owners and invited authenticated users may write on private sites.

Every site's data lives in a site-specific SQLite Durable Object. Channel objects are keyed by site and channel name. RPC and WebSocket endpoints validate the exact site origin.