This repository contains a reference implementation of Decentralized Web Node (DWN) as per the specification. This specification is in a draft state and very much so a WIP. For the foreseeable future, a lot of the work on DWN will be split across this repo and the repo that houses the specification, which you can find here. The current goal is to produce a beta implementation by March 2023. This won't include all interfaces described in the DWN spec, but will be enough to begin building applications.
This project is used as a dependency by several other projects.
Proposals and issues for the specification itself should be submitted as pull requests to the spec repo.
npm install @tbd54566975/dwn-sdk-js
import { Dwn, DataStream, DidKeyResolver, Jws, RecordsWrite, RecordsQuery } from '@tbd54566975/dwn-sdk-js';
export const dwn = await Dwn.create();
...
const didKey = await DidKeyResolver.generate(); // generate a did:key DID
const signatureMaterial = Jws.createSignatureInput(didKey);
const data = randomBytes(32); // in node.js
// or in web
// const data = new Uint8Array(32);
// window.crypto.getRandomValues(data);
const recordsWrite = await RecordsWrite.create({
data,
dataFormat : 'application/json',
published : true,
protocol : 'yeeter',
schema : 'yeeter/post',
authorizationSignatureInput : signatureMaterial
});
const dataStream = DataStream.fromBytes(data);
const result = await dwn.processMessage(didKey.did, recordsWrite.message, dataStream);
With a web wallet installed:
const result = await window.web5.dwn.processMessage({
method : 'RecordsQuery',
message : {
filter: {
schema: 'http://some-schema-registry.org/todo'
},
dateSort: 'createdAscending'
}
});
The DWN JS SDK releases builds to npmjs.com. There are two build types: stable build and unstable build.
This is triggered manually by:
- Increment
version
inpackage.json
in Semantic Versioning (semver) format. - Merge the change into
main
branch - Create a release from GitHub.
An official build with version matching the package.json
will be published to npmjs.com.
Every push to the main
branch will automatically trigger an unstable build to npmjs.com for developers to experiment and test.
The version string contains the date as well as the commit hash of the last change.
An example version string:
0.0.26-unstable-2023-03-16-36ec2ce
0.0.26
came fromversion
inpackage.json
2023-03-16
indicates the date of March 16th 202336ec2ce
is the commit hash of the last change
NOTE: The diagram is a conceptual view of the architecture, the actual component abstraction and names in source file may differ.
Resource | Description |
---|---|
CODEOWNERS | Outlines the project lead(s) |
CODE_OF_CONDUCT.md | Expected behavior for project contributors, promoting a welcoming environment |
CONTRIBUTING.md | Developer guide to build, test, run, access CI, chat, discuss, file issues |
GOVERNANCE.md | Project governance |
LICENSE | Apache License, Version 2.0 |