mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 11:32:42 +00:00
- 16 cross-shell utilities converted to sh/bash chezmoi executables: ai c2p cp-appid extract_agents fab gdc gh-sonr-org-migrate ghg-clone ghn gho git-summary launch_omp_livediff_overlay lc-elir mdcp mdp pj (ghg-clone not named ghg: unrelated cargo binary owns that name) - cwd/history helpers stay per-shell: yy c cd clip-last + ghg/ghn/gho cd-wrappers in bash/functions/ and zsh/functions/, loaded by rc files - fish keeps only shell-state functions; converted ones now hit PATH - cp-appid ignore gating moved to .local/bin path - dot_agents/skills: 82 skills materialized from dotstate storage so dot_claude skill symlinks resolve on fresh bootstrap; dotstate profile/symlinks.json released .agents/skills .bashrc .zshrc
2.7 KiB
2.7 KiB
Cloudflare Durable Objects Storage
Persistent storage API for Durable Objects with SQLite and KV backends, PITR, and automatic concurrency control.
Overview
DO Storage provides:
- SQLite-backed (recommended) or KV-backed
- SQL API + synchronous/async KV APIs
- Automatic input/output gates (race-free)
- 30-day point-in-time recovery (PITR)
- Transactions and alarms
Use cases: Stateful coordination, real-time collaboration, counters, sessions, rate limiters
Billing: Charged by request, GB-month storage, and rowsRead/rowsWritten for SQL operations
Quick Start
export class Counter extends DurableObject {
sql: SqlStorage;
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);
this.sql = ctx.storage.sql;
this.sql.exec('CREATE TABLE IF NOT EXISTS data(key TEXT PRIMARY KEY, value INTEGER)');
}
async increment(): Promise<number> {
const result = this.sql.exec(
'INSERT INTO data VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = value + 1 RETURNING value',
'counter', 1
).one();
return result?.value || 1;
}
}
Storage Backends
| Backend | Create Method | APIs | PITR |
|---|---|---|---|
| SQLite (recommended) | new_sqlite_classes |
SQL + sync KV + async KV | ✅ |
| KV (legacy) | new_classes |
async KV only | ❌ |
Core APIs
- SQL API (
ctx.storage.sql): Full SQLite with extensions (FTS5, JSON, math) - Sync KV (
ctx.storage.kv): Synchronous key-value (SQLite only) - Async KV (
ctx.storage): Asynchronous key-value (both backends) - Transactions (
transactionSync(),transaction()) - PITR (
getBookmarkForTime(),onNextSessionRestoreBookmark()) - Alarms (
setAlarm(),alarm()handler)
Reading Order
New to DO storage: configuration.md → api.md → patterns.md → gotchas.md
Building features: patterns.md → api.md → gotchas.md
Debugging issues: gotchas.md → api.md
Writing tests: testing.md
In This Reference
- configuration.md - wrangler.jsonc migrations, SQLite vs KV setup, RPC binding
- api.md - SQL exec/cursors, KV methods, storage options, transactions, alarms, PITR
- patterns.md - Schema migrations, caching, rate limiting, batch processing, parent-child coordination
- gotchas.md - Concurrency gates, INTEGER precision, transaction rules, SQL limits
- testing.md - vitest-pool-workers setup, testing DOs with SQL/alarms/PITR
See Also
- durable-objects - DO fundamentals and coordination patterns
- workers - Worker runtime for DO stubs
- d1 - Shared database alternative to per-DO storage