Decentralized app platformv0.6Open source
Build apps your users own.
Identity, end-to-end encrypted sync, storage and groups, as an open protocol and a TypeScript SDK. Your app needs no backend of its own, and nobody in between can read your users' data. Not the network, not even you.
The same four messages. Encrypted on the sender's device, decrypted on the recipient's, and only ciphertext in between. Point at a line to find its envelope.
What you get out of the box
The parts every social app rebuilds, done once, encrypted end to end, and portable between apps because users bring their own identity.
- Identity · DCTRL-0001
Sign-in without an accounts table
Every user gets a did:decentrl with keys on their own device. They bring it to your app, and to the next one.
- Sync and storage · DCTRL-0005
Encrypted state on every device
Events are encrypted before they leave the device and folded into typed state wherever the user signs in.
- Contacts · DCTRL-0003
Connections with consent
Two people sign a contract before anything flows between them. Revoking it closes the channel.
- Groups · DCTRL-0006
Communities with roles
Owners, staff powers, join requests and member counts, enforced by the mediator and checked again by every client.
- Public channels · DCTRL-0007
Posts anyone can read
Signed public events for profiles, announcements and feeds, verifiable without a contract.
- React and the extension
Keys stay out of the page
Typed hooks for React, and a browser extension that holds keys so web apps never see them.
Communities, a forum with no server of its own
Sections, threads, ranks and moderation, built entirely on the SDK and served as static files. Its source is in the repository.
Define your events. Ship an encrypted app.
Describe what your app records with Zod. The SDK signs, encrypts, syncs and folds it into typed state on every device. No backend required: your client talks straight to a mediator, a shared one or your own.
pnpm add @decentrl/sdk zod
Getting started →import { defineDecentrlApp } from '@decentrl/sdk'
import { z } from 'zod'
export const app = defineDecentrlApp({
events: {
message: {
schema: z.object({ text: z.string(), threadId: z.string() }),
tags: ['thread.${threadId}'],
},
},
})
const client = app.createClient({ mediatorDid, persist: { key: 'my-app' } })
await client.publish('message', { text: 'Hello, private world.', threadId })An open protocol underneath
Seven specifications define it. Anyone can run a mediator, and users pick theirs, so no single company holds the network.
- DCTRL-0001The did:decentrl DID methodDraft · 0.1
- DCTRL-0002Cryptographic operationsDraft · 0.1
- DCTRL-0003Communication contractsDraft · 0.1
- DCTRL-0004Mediator protocolDraft · 0.1
- DCTRL-0005Event encryption and storageDraft · 0.1
- DCTRL-0006Group messagingImplemented · 0.6
- DCTRL-0007Public channelsDraft · 0.1