Turn your S3 buckets into a typed document database with an ORM you already know how to use
Define Entity classes, get typed Repositories with findById, findAll, save, delete โ backed by S3 JSON documents.
Schema management via path DSL. worm init, worm import (AI-powered), worm lint, worm dev.
Works with AWS S3, Storj, MinIO, Cloudflare R2, DigitalOcean Spaces โ anything S3-compatible with path-style addressing.
Offline-capable with OPFS + IndexedDB via @decoperations/bucket-sync. Service worker support, multi-tab coordination.
Real API โ this is how you actually use it
import { S3Worm, Entity } from '@decoperations/s3worm'
// Connect to any S3-compatible bucket
const worm = new S3Worm({
bucket: 'my-app',
endpoint: 'https://gateway.storjshare.io',
credentials: { accessKeyId: '...', secretAccessKey: '...' },
})
// Define an Entity class
class User extends Entity {
static getBasePath() { return 'users' }
name: string = ''
email: string = ''
}
// Get a typed Repository
const users = worm.getRepository(User)
// CRUD โ it's just S3 under the hood
const user = new User()
user.name = 'Alice'
user.email = 'alice@example.com'
await users.save(user) // PUT users/{id}.json
const found = await users.findById(user.id)
const all = await users.findAll({ limit: 10 })
await users.delete(user.id) // DELETE users/{id}.jsonpnpm add @decoperations/s3wormBrowser-safe binary upload with progress tracking:
await worm.putBytes('files/video.mp4', blob, 'video/mp4')List objects with size, content type, and timestamps:
const entries = await worm.listWithMetadata('users/')
// [{ key, size, contentType, lastModifiedIso }]Everything ships in the monorepo
Schema management, AI-powered import, linting, and local dev mode with filesystem transport.
worm init && worm devTypeScript SDK with Entity/Repository, CRUD, binary uploads, metadata listings. Browser, Node, and Edge exports.
pnpm add @decoperations/s3wormLocal-first offline sync engine. OPFS + IndexedDB storage, service worker, multi-tab coordination, client-side encryption.
pnpm add @decoperations/bucket-sync