2017-12-16 00:06:06 +01:00
# MetaMask Browser Extension
2018-03-25 15:34:36 +02:00
[![Build Status ](https://circleci.com/gh/MetaMask/metamask-extension.svg?style=shield&circle-token=a1ddcf3cd38e29267f254c9c59d556d513e3a1fd )](https://circleci.com/gh/MetaMask/metamask-extension) [![Coverage Status ](https://coveralls.io/repos/github/MetaMask/metamask-extension/badge.svg?branch=master )](https://coveralls.io/github/MetaMask/metamask-extension?branch=master) [![Greenkeeper badge ](https://badges.greenkeeper.io/MetaMask/metamask-extension.svg )](https://greenkeeper.io/) [![Stories in Ready ](https://badge.waffle.io/MetaMask/metamask-extension.png?label=in%20progress&title=waffle.io )](https://waffle.io/MetaMask/metamask-extension)
2017-08-04 01:40:56 +02:00
2017-08-04 00:05:32 +02:00
## Support
2018-01-12 20:03:03 +01:00
If you're a user seeking support, [here is our support site ](https://metamask.helpscoutdocs.com/ ).
2017-07-19 00:41:33 +02:00
2018-05-29 18:27:02 +02:00
## Introduction
[Mission Statement ](./MISSION.md )
2018-07-10 18:12:59 +02:00
[Internal documentation ](./docs#documentation )
2018-05-29 18:27:02 +02:00
2016-09-10 05:01:27 +02:00
## Developing Compatible Dapps
If you're a web dapp developer, we've got two types of guides for you:
2017-08-04 00:05:32 +02:00
### New Dapp Developers
- We recommend this [Learning Solidity ](https://karl.tech/learning-solidity-part-1-deploy-a-contract/ ) tutorial series by Karl Floersch.
- We wrote a (slightly outdated now) gentle introduction on [Developing Dapps with Truffle and MetaMask ](https://medium.com/metamask/developing-ethereum-dapps-with-truffle-and-metamask-aa8ad7e363ba ).
### Current Dapp Developers
2016-09-10 05:01:27 +02:00
- If you have a Dapp, and you want to ensure compatibility, [here is our guide on building MetaMask-compatible Dapps ](https://github.com/MetaMask/faq/blob/master/DEVELOPERS.md )
2016-07-16 03:04:52 +02:00
## Building locally
2018-07-21 18:43:35 +02:00
- Install [Node.js ](https://nodejs.org/en/ ) version 8.11.3 and npm version 6.1.0
2018-07-28 07:46:16 +02:00
- If you are using [nvm ](https://github.com/creationix/nvm#installation ) (recommended) running `nvm use` will automatically choose the right node version for you.
2018-07-31 01:59:08 +02:00
- Select npm 6.1.0: ```npm install -g npm@6.1.0```
2018-07-28 07:54:26 +02:00
- Install dependencies: ```npm install```
2016-07-27 00:15:40 +02:00
- Install gulp globally with `npm install -g gulp-cli` .
2016-07-16 03:04:52 +02:00
- Build the project to the `./dist/` folder with `gulp build` .
- Optionally, to rebuild on file changes, run `gulp dev` .
2016-07-27 00:15:40 +02:00
- To package .zip files for distribution, run `gulp zip` , or run the full build & zip with `gulp dist` .
2016-07-16 03:04:52 +02:00
2016-07-27 00:35:08 +02:00
Uncompressed builds can be found in `/dist` , compressed builds can be found in `/builds` once they're built.
2018-09-12 23:10:06 +02:00
## Contributing
You can read [our internal docs here ](https://metamask.github.io/metamask-extension/ ).
You can re-generate the docs locally by running `npm run doc` , and contributors can update the hosted docs by running `npm run publish-docs` .
2017-06-05 22:55:48 +02:00
### Running Tests
2016-11-22 03:16:45 +01:00
2017-06-05 22:55:48 +02:00
Requires `mocha` installed. Run `npm install -g mocha` .
2016-11-22 03:16:45 +01:00
2017-06-05 22:55:48 +02:00
Then just run `npm test` .
You can also test with a continuously watching process, via `npm run watch` .
You can run the linter by itself with `gulp lint` .
2016-11-22 03:16:45 +01:00
2016-06-14 01:53:21 +02:00
## Architecture
[![Architecture Diagram ](./docs/architecture.png )][1]
2015-12-21 01:25:45 +01:00
## Development
```bash
npm install
2016-11-21 18:34:31 +01:00
npm start
```
## Build for Publishing
```bash
npm run dist
2015-12-21 01:25:45 +01:00
```
2016-07-01 03:44:37 +02:00
2016-10-13 05:03:14 +02:00
#### Writing Browser Tests
To write tests that will be run in the browser using QUnit, add your test files to `test/integration/lib` .
2017-06-05 22:55:48 +02:00
## Other Docs
2016-03-22 18:43:56 +01:00
2017-06-05 22:55:48 +02:00
- [How to add custom build to Chrome ](./docs/add-to-chrome.md )
- [How to add custom build to Firefox ](./docs/add-to-firefox.md )
- [How to develop a live-reloading UI ](./docs/ui-dev-mode.md )
2018-03-09 20:18:43 +01:00
- [How to add a new translation to MetaMask ](./docs/translating-guide.md )
2017-06-05 22:55:48 +02:00
- [Publishing Guide ](./docs/publishing.md )
2018-04-12 22:40:54 +02:00
- [The MetaMask Team ](./docs/team.md )
2017-06-05 22:55:48 +02:00
- [How to develop an in-browser mocked UI ](./docs/ui-mock-mode.md )
- [How to live reload on local dependency changes ](./docs/developing-on-deps.md )
- [How to add new networks to the Provider Menu ](./docs/adding-new-networks.md )
- [How to manage notices that appear when the app starts up ](./docs/notices.md )
2017-09-14 22:31:10 +02:00
- [How to port MetaMask to a new platform ](./docs/porting_to_new_environment.md )
2018-07-20 00:47:22 +02:00
- [How to use the TREZOR emulator ](./docs/trezor-emulator.md )
2017-06-05 22:55:48 +02:00
- [How to generate a visualization of this repository's development ](./docs/development-visualization.md )
2016-06-14 01:53:21 +02:00
[1]: http://www.nomnoml.com/#view/%5B%3Cactor%3Euser%5D%0A%0A%5Bmetamask-ui%7C%0A%20%20%20%5Btools%7C%0A%20%20%20%20%20react%0A%20%20%20%20%20redux%0A%20%20%20%20%20thunk%0A%20%20%20%20%20ethUtils%0A%20%20%20%20%20jazzicon%0A%20%20%20%5D%0A%20%20%20%5Bcomponents%7C%0A%20%20%20%20%20app%0A%20%20%20%20%20account-detail%0A%20%20%20%20%20accounts%0A%20%20%20%20%20locked-screen%0A%20%20%20%20%20restore-vault%0A%20%20%20%20%20identicon%0A%20%20%20%20%20config%0A%20%20%20%20%20info%0A%20%20%20%5D%0A%20%20%20%5Breducers%7C%0A%20%20%20%20%20app%0A%20%20%20%20%20metamask%0A%20%20%20%20%20identities%0A%20%20%20%5D%0A%20%20%20%5Bactions%7C%0A%20%20%20%20%20%5BaccountManager%5D%0A%20%20%20%5D%0A%20%20%20%5Bcomponents%5D%3A-%3E%5Bactions%5D%0A%20%20%20%5Bactions%5D%3A-%3E%5Breducers%5D%0A%20%20%20%5Breducers%5D%3A-%3E%5Bcomponents%5D%0A%5D%0A%0A%5Bweb%20dapp%7C%0A%20%20%5Bui%20code%5D%0A%20%20%5Bweb3%5D%0A%20%20%5Bmetamask-inpage%5D%0A%20%20%0A%20%20%5B%3Cactor%3Eui%20developer%5D%0A%20%20%5Bui%20developer%5D-%3E%5Bui%20code%5D%0A%20%20%5Bui%20code%5D%3C-%3E%5Bweb3%5D%0A%20%20%5Bweb3%5D%3C-%3E%5Bmetamask-inpage%5D%0A%5D%0A%0A%5Bmetamask-background%7C%0A%20%20%5Bprovider-engine%5D%0A%20%20%5Bhooked%20wallet%20subprovider%5D%0A%20%20%5Bid%20store%5D%0A%20%20%0A%20%20%5Bprovider-engine%5D%3C-%3E%5Bhooked%20wallet%20subprovider%5D%0A%20%20%5Bhooked%20wallet%20subprovider%5D%3C-%3E%5Bid%20store%5D%0A%20%20%5Bconfig%20manager%7C%0A%20%20%20%20%5Brpc%20configuration%5D%0A%20%20%20%20%5Bencrypted%20keys%5D%0A%20%20%20%20%5Bwallet%20nicknames%5D%0A%20%20%5D%0A%20%20%0A%20%20%5Bprovider-engine%5D%3C-%5Bconfig%20manager%5D%0A%20%20%5Bid%20store%5D%3C-%3E%5Bconfig%20manager%5D%0A%5D%0A%0A%5Buser%5D%3C-%3E%5Bmetamask-ui%5D%0A%0A%5Buser%5D%3C%3A--%3A%3E%5Bweb%20dapp%5D%0A%0A%5Bmetamask-contentscript%7C%0A%20%20%5Bplugin%20restart%20detector%5D%0A%20%20%5Brpc%20passthrough%5D%0A%5D%0A%0A%5Brpc%20%7C%0A%20%20%5Bethereum%20blockchain%20%7C%0A%20%20%20%20%5Bcontracts%5D%0A%20%20%20%20%5Baccounts%5D%0A%20%20%5D%0A%5D%0A%0A%5Bweb%20dapp%5D%3C%3A--%3A%3E%5Bmetamask-contentscript%5D%0A%5Bmetamask-contentscript%5D%3C-%3E%5Bmetamask-background%5D%0A%5Bmetamask-background%5D%3C-%3E%5Bmetamask-ui%5D%0A%5Bmetamask-background%5D%3C-%3E%5Brpc%5D%0A