---
# System prepended metadata

title: Web5 Feature Requirements

---

# Web5 Feature Requirements

[ToC]

---

## Desktop Wallet App

Features that are unique to the implementation of a native desktop wallet app that interacts with a DWN:

- Initial pairing process to securely connect an external application to the desktop wallet app.
- Ongoing access request process each time an external application requests access subsequent to the initial pairing.

## CLI Wallet

Features that are unique to the implementation of a command-line interface wallet that interacts with a DWN:

- 

## Browser Extension Wallet

Features that are unique to the implementation of a wallet running as browser extension that interacts with a DWN:

- 

## Wallet Core Library

Features that are common to all wallet implementations (desktop, browser extension, CLI, etc.):

* Have Profiles that enable users to store and share data as different personas they associate with each profile.
    * Attributes: `name`, `did`, `photo`
* Use DIDs to uniquely identify each profile and the data that is written / shared associated with that profile.
    * Create DIDs, including `did:key` and `did:ion`.
* Use DID methods that have key pairs that are used to sign or encrypt data.
    * Create `secp256k1` and `Ed25519` keys.
    * Generate a recovery phrase using the BIP39 word list and derive `secp256k1` or `Ed25519` private keys.
    * Given an existing recovery phrase as input, derive `secp256k1` or `Ed25519` private keys
* Securely store key pairs to be able to use them for signing/encrypting data.  The security for private keys must be sufficient to ensure another app / malware on the host computer cannot read the key material unless it is granted access by the *wallet* user.

## DWN-SDK

Features that should be implemented in the DWN SDK because they are likely to be needed by any implmentation of a DWeb Node.

For sake of brevity, we don't need to repeat all of the DWN features from the DIF Spec.  This section is intended as a bucket to catch any NEW features (are not already part of the DWN Spec) that we believe are general enough to incorporate into the DWN SDK.