v1.0 — Distributed · Encrypted · Serverless

DECENTRALIZED
STORAGE THAT
GHOSTS
THE SERVER

Your data is distributed across nodes, sealed with AES-256-GCM encryption.
No central server. No traces. No compromise.

◈ Open Dashboard View SDK →
// Connect to your distributed storage
import GhostingDB from 'ghostingdb'

const db = new GhostingDB({ nodeKey, appId })
const store = db.store('profiles', { encrypted: true })

// Store — automatically encrypted
await store.store({ name, email, data })

// Fetch — automatically decrypted
const { data } = await store.fetch(recordId)
256
AES-GCM Bits
0
Central servers
Storage nodes
100K
Req / day free
Core features

Built to disappear

Every layer is designed to leave no trace. Your server doesn't exist.

🔐
End-to-End Encryption
AES-256-GCM with PBKDF2 key derivation (150k iterations). Data is sealed on device before leaving. Nodes only see ciphertext.
Distributed Nodes
Records are spread across a distributed network. No single point of failure. No central authority holding your data.
👻
Passwordless Auth
Magic link authentication. No passwords to remember. No OAuth dependencies. Device-native credential storage.
Edge-Native
Worker runs at Cloudflare edge — sub-10ms auth globally. KV storage replicated worldwide. Zero cold starts.
📦
Collections API
Organize records into typed collections. Automatic indexing, prefix naming, date-based or ID-based record titles.
🌐
Universal SDK
One SDK for web, mobile (PWA), and any JS runtime. Framework-agnostic. Tree-shakeable. Zero dependencies.
Architecture

How the ghost works

Four steps from user to distributed encrypted storage.

01
Magic link authentication
User enters email → receives a one-time link (15 min). No password. No code. Click → authenticated.
02
Private node key issued
A unique private key is generated per user. This key controls their storage node. It's sealed with AES-256 and stored at edge — only the user can unseal it.
03
Data sealed on device
Before any record leaves the device, it's encrypted with the user's key using AES-256-GCM. The network only ever receives opaque ciphertext.
04
Distributed across nodes
Sealed records are written to distributed storage nodes. Each record has a unique ID. The user holds the only key. The server is ghosted.
Developer SDK

Three lines to ghost your backend

// Install
npm install ghostingdb

// Initialize
import GhostingDB from 'ghostingdb'
const db = new GhostingDB({
  nodeKey,  // from auth
  appId: 'my-app',
  workerUrl: '...'
})

// Create a store
const notes = db.store('notes', {
  encrypted: true,
  password: userPassword,
  naming: 'date'
})

// CRUD
const { recordId } = await notes.store(data)
const { data } = await notes.fetch(recordId)
await notes.update(recordId, newData)
await notes.remove(recordId)
const all = await notes.list()
.store()Seal and write a record to the distributed network
.fetch()Retrieve and unseal a record by ID
.update()Rewrite an existing record with new sealed data
.remove()Ghost a record — purges content, keeps shell
.list()List all records in a collection via index
.init()Initialize collection with persistent index node
.getViews()Get access stats for a record node