Skip to content
The Morpheus Identity Management System
TypeScript JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode Creating morpheus transaction's files Nov 22, 2019
packages Waiting until layer-2 processes transaction Dec 20, 2019
.gitignore Added keyvault package with webassembly hello world Nov 22, 2019
.gitlab-ci.yml Using awilix instead of singleton pattern Dec 4, 2019
LICENSE Resolve "Publish Morpheus Code to github" Dec 19, 2019 Resolve "Publish Morpheus Code to github" Dec 19, 2019
eslintrc.json Implement dry run for state Dec 19, 2019
lerna.json Fixing inter-package dependencies Nov 21, 2019
package.json Fixing serialization of signed data Dec 20, 2019
tsconfig.json Added linting to tests, too Dec 6, 2019
tsconfig.test.json Implementing tombstone operation Dec 17, 2019


Morpheus is a decentralized identity system with an open ecosystem enabling verifiable claims in a web-of-trust way. See the specification or check out the whitepaper where this fits.

Table of Contents

Morpheus and DIDs

Morpheus relies on the Hydra Blockchain and custom transactions to build a repository of DID documents. These documents establish the identity of an entity even when using different cryptographic keys over time, and contain no personal identifiable information. Personal data will be stored elsewhere (decided by the users and service providers), using the Morpheus DB for establishing validity of information.

This way, Morpheus far exceeds the GDPR requirements.

Additionally, Morpheus DID Documents allow referencing other web locations that contain additional information about the entity (service endpoints), allowing for publicly claiming DIDs.

Morpheus forms the basis of secure transmission and validation of personal information in the IOP ecosystem and will enable a multitude of use-cases, such as the ones described below:

  • separating personal and business roles
  • digitalized ID documents
  • digital tickets for public transport, cinemas, concerts, etc. (both personalized and non-personalized)
  • KYC and AML verification with minimal data disclosure
  • reusing verification with different service providers
  • offline verification of ID ownership
  • and many more

Current and Future Features

[ x ] Query implicit DID Documents [ x ] Add/Revoke Key to DID [ x ] Add/Revoke Right to DID [ x ] Tombstone DID [ x ] Dry run on state [ ] Add/Remove Service Endpoint

How to Use

Morpheus will be used as by default plugin on the Hydra chain, hence will be shipped with the Hydra core code. However this repo can also be used standalone for demo and testing purposes until we provide an SDK.

Under the examples package you will see example codes for all available API.



  • Node v12.13.1
    # Install nvm to easily switch between node versions
    $ curl -o- | bash
    # Install node itself using nvm
    $ nvm install v12.13.1
    # Set the just installed version 12 as default
    $ nvm alias default v12.13.1
    # Check versions
    $ node --version
  • npm 6.13.4

NodeJS Scripts

We use Lerna for this multipackage project. We have these commands available under the root:

# Installs all dependencies
$ npm install
# Cleans all packages' node_modules and dist directory including the root itself
$ npm run clean
# Builds all packages
$ npm run build
# Runs all packages' tests
$ npm run test
# Runs EsLint on all packages' code
$ npm run lint


Here we describe how can the packages be used and what responsbility a package has.


This package contains a command line NodeJS application where you can try out the available endpoints. There you can also observe the code to see how the components (like did-manager) are used. For more details how to use it, please check its README.

Note: it requires a node running that supports Morpheus.


This package contains all business logic that needed for DID management, hence can be used for building Morpheus transactions and parsing results.


This is a Hydra plugin that will be started up when your node is running. Receives block events (Layer 1) and forwards it to the business logic (Layer 2).


This is a webassembly binding for our keyvault written in Rust.




A simple logging utility used by multitple packages. Uses Hydra's built in chain logger package.



Feel free to open issues and send pull requests in this repository. By sending contributions, you are agreeing to transfer all intellectual property from your changes to the Decentralized Society Foundation, Panama, who owns the copyright of this code. To avoid losing precious time you spend on coding, you could open an issue first and discuss what you are up to before forking and sending us a PR.

Small note: If editing the README, please conform to the standard-readme specification.

We are using a commit hook and quite strict linting rules for our codebase. Please install husky to check your commits before you send us pull requests. This requires git >= 2.13 so does not work on Ubuntu 16.04 Xenial Xerus or before. Works on Ubuntu 18.04 Bionic Beaver or Debian stable distributions.

# install husky
$ npm install -g husky
# it automatically lints during commits
$ git commit


GPL-3.0 or later © 2019 Decentralized Society Foundation, PA

You can’t perform that action at this time.