@b4moss/es4
v0.9.0
Published
Es4 — embedded State store with pluggable Recovery (Node.js/TypeScript port of Go v0.8.0)
Downloads
85
Readme
@b4moss/es4 (Node.js / TypeScript)
TypeScript port of Es4 Go v0.8.0 contracts. Options keys stay snake_case (state_path, ES4_* env). Snapshot/Recovery remain internal.
Requirements
- Node.js 20+
- TypeScript strict (built with
tsc)
Install
npm install @b4moss/es4From a clone (development):
cd packages/node
npm cibetter-sqlite3 is an optionalDependency (native). It is required at runtime for SQLite State and local libSQL Recovery; Memory / Redis/Valkey / Firestore do not need it. If the optional install fails on your platform, install a compatible better-sqlite3 explicitly when using those backends.
Quick start
import { open, defaults } from "@b4moss/es4";
const db = await open({ ...defaults(), memory_only: true });
await db.set("hello", JSON.stringify({ n: 1 }));
console.log(await db.get("hello"));
await db.close();Scripts
| Script | Purpose |
|--------|---------|
| npm test | Unit / contract (Vitest) |
| npm run lint | tsc --noEmit |
| npm run build | Emit dist/ |
| npm run test:e2e:memory | E2E memory layer |
| npm run test:e2e:file | E2E file SQLite + File Recovery |
| npm run test:e2e:libsql | E2E libSQL Recovery |
| npm run test:e2e:object | E2E Object Recovery (needs RustFS) |
| npm run test:e2e:redis | E2E Redis State (ES4_E2E_REDIS_URL) |
| npm run test:e2e:valkey | E2E Valkey State (ES4_E2E_VALKEY_URL) |
| npm run test:e2e:firestore | E2E Firestore (FIRESTORE_EMULATOR_HOST) |
Compose services: docker compose -f docker/e2e/docker-compose.yml up -d … (shared with Go).
Open priority
- Injected State (
openWith) memory_only→ Memorystate_backend=redis|valkey→ Redis adapterstate_backend=firestore→ Firestorestate_backend=memory→ Memorystate_pathnon-empty orstate_backend=sqlite→ SQLite- else → Memory
Docs
- Plan:
docs/plans/v0.9.0/ - Specs (language-neutral):
docs/specs/
