{"id":15035444,"url":"https://github.com/metamask/metamask-mobile","last_synced_at":"2026-10-19T01:08:38.834Z","repository":{"id":37374758,"uuid":"141427485","full_name":"MetaMask/metamask-mobile","owner":"MetaMask","description":"Mobile web browser providing access to websites that use the Ethereum blockchain","archived":false,"fork":false,"pushed_at":"2026-10-12T14:22:06.000Z","size":2601806,"stargazers_count":3056,"open_issues_count":1918,"forks_count":1687,"subscribers_count":146,"default_branch":"main","last_synced_at":"2026-10-12T14:24:11.876Z","etag":null,"topics":["android","dapps-browser","ios","javascript","metamask","react-native","web3"],"latest_commit_sha":null,"homepage":"https://metamask.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MetaMask.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"accessibility":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","claude":"CLAUDE.md","gemini":null,"cursor":".cursor/rules/device-capability.mdc","copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"github":null,"patreon":null,"open_collective":"metamask","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2018-07-18T11:47:08.000Z","updated_at":"2026-10-12T14:10:17.000Z","dependencies_parsed_at":"2026-10-12T14:21:48.282Z","dependency_job_id":null,"html_url":"https://github.com/MetaMask/metamask-mobile","commit_stats":{"total_commits":4723,"total_committers":163,"mean_commits":"28.975460122699385","dds":0.9148846072411603,"last_synced_commit":"5fe6aceffcf4c80ed1f3530282640aebcd201935"},"previous_names":[],"tags_count":455,"template":false,"template_full_name":null,"purl":"pkg:github/MetaMask/metamask-mobile","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaMask%2Fmetamask-mobile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaMask%2Fmetamask-mobile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaMask%2Fmetamask-mobile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaMask%2Fmetamask-mobile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MetaMask","download_url":"https://codeload.github.com/MetaMask/metamask-mobile/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MetaMask%2Fmetamask-mobile/sbom","scorecard":{"id":92952,"data":{"date":"2025-08-11","repo":{"name":"github.com/MetaMask/metamask-mobile","commit":"a7bf85ee78681eda82878ada4414a20b586c8947"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.5,"checks":[{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/bitrise-e2e-gate.yml:20","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/bitrise-e2e-gate.yml:21","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/check-pr-labels.yml:17","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/cla.yml:16","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/create-cherry-pick-pr.yml:19","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/create-release-pr-legacy.yml:37","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/create-release-pr.yml:37","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/publish-slack-release-testing-status.yml:11","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/run-bitrise-e2e-check.yml:22","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/run-bitrise-e2e-check.yml:23","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/run-bitrise-flask-e2e-check.yml:20","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/run-bitrise-flask-e2e-check.yml:21","Info: jobLevel 'actions' permission set to 'read': .github/workflows/security-code-scanner.yml:16","Info: jobLevel 'contents' permission set to 'read': .github/workflows/security-code-scanner.yml:17","Warn: jobLevel 'security-events' permission set to 'write': .github/workflows/security-code-scanner.yml:18","Warn: no topLevel permission defined: .github/workflows/add-release-label.yml:1","Warn: no topLevel permission defined: .github/workflows/add-team-label.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/auto-draft-prs.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/automated-rca.yml:9","Warn: no topLevel permission defined: .github/workflows/bitrise-e2e-gate.yml:1","Warn: no topLevel permission defined: .github/workflows/build-android-e2e.yml:1","Warn: no topLevel permission defined: .github/workflows/changelog-check.yml:1","Warn: no topLevel permission defined: .github/workflows/check-attributions.yml:1","Warn: no topLevel permission defined: .github/workflows/check-pr-labels.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/check-pr-max-lines.yml:8","Warn: no topLevel permission defined: .github/workflows/check-template-and-add-labels.yml:1","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/cla.yml:1","Warn: no topLevel permission defined: .github/workflows/close-bug-report.yml:1","Warn: no topLevel permission defined: .github/workflows/create-bug-report.yml:1","Warn: no topLevel permission defined: .github/workflows/create-cherry-pick-pr.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/create-release-draft.yml:9","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/create-release-draft.yml:10","Warn: no topLevel permission defined: .github/workflows/create-release-pr-legacy.yml:1","Warn: no topLevel permission defined: .github/workflows/create-release-pr.yml:1","Warn: no topLevel permission defined: .github/workflows/crowdin_action.yml:1","Warn: no topLevel permission defined: .github/workflows/docker.yml:1","Warn: no topLevel permission defined: .github/workflows/fitness-functions.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/post-merge-validation.yml:11","Warn: no topLevel permission defined: .github/workflows/pr-title-linter.yml:1","Warn: no topLevel permission defined: .github/workflows/publish-slack-release-testing-status.yml:1","Warn: no topLevel permission defined: .github/workflows/remove-labels-after-pr-closed.yml:1","Warn: no topLevel permission defined: .github/workflows/run-bitrise-e2e-check.yml:1","Warn: no topLevel permission defined: .github/workflows/run-bitrise-flask-e2e-check.yml:1","Warn: no topLevel permission defined: .github/workflows/run-e2e-api-specs.yml:1","Warn: no topLevel permission defined: .github/workflows/run-e2e-workflow.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/run-e2e.yml:13","Warn: no topLevel permission defined: .github/workflows/security-code-scanner.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/stable-branch-sync.yml:5","Warn: no topLevel permission defined: .github/workflows/stale-issue-pr.yml:1","Warn: topLevel 'contents' permission set to 'write': .github/workflows/test-android-build-app.yml:13","Warn: topLevel 'contents' permission set to 'write': .github/workflows/test-ios-build-app.yml:13","Warn: no topLevel permission defined: .github/workflows/trigger-performance-e2e.yml:1","Warn: no topLevel permission defined: .github/workflows/update-attributions.yml:1","Warn: no topLevel permission defined: .github/workflows/update-latest-build-version.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/MetaMask/.github/SECURITY.md:1","Info: Found linked content: github.com/MetaMask/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/MetaMask/.github/SECURITY.md:1","Info: Found text in security policy: github.com/MetaMask/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v7.51.3 not signed: https://api.github.com/repos/MetaMask/metamask-mobile/releases/238380228","Warn: release artifact v7.51.1 not signed: https://api.github.com/repos/MetaMask/metamask-mobile/releases/235684712","Warn: release artifact v7.51.0 not signed: https://api.github.com/repos/MetaMask/metamask-mobile/releases/234681392","Warn: release artifact v7.50.2 not signed: https://api.github.com/repos/MetaMask/metamask-mobile/releases/233139231","Warn: release artifact v7.51.3 does not have provenance: https://api.github.com/repos/MetaMask/metamask-mobile/releases/238380228","Warn: release artifact v7.51.1 does not have provenance: https://api.github.com/repos/MetaMask/metamask-mobile/releases/235684712","Warn: release artifact v7.51.0 does not have provenance: https://api.github.com/repos/MetaMask/metamask-mobile/releases/234681392","Warn: release artifact v7.50.2 does not have provenance: https://api.github.com/repos/MetaMask/metamask-mobile/releases/233139231"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: android/gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/docker.yml:8"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":1,"reason":"branch protection is not maximal on development and all release branches","details":["Warn: branch protection not enabled for branch 'lock-manager-investigation'","Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Info: 'branch protection settings apply to administrators' is required to merge on branch 'main'","Info: 'stale review dismissal' is required to merge on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Info: codeowner review is required on branch 'main'","Info: 'last push approval' is required to merge on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/add-release-label.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/add-release-label.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/add-release-label.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/add-release-label.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/auto-draft-prs.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/auto-draft-prs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bitrise-e2e-gate.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/bitrise-e2e-gate.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/bitrise-e2e-gate.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/bitrise-e2e-gate.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-android-e2e.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/build-android-e2e.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-android-e2e.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/build-android-e2e.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-android-e2e.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/build-android-e2e.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-android-e2e.yml:101: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/build-android-e2e.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-android-e2e.yml:110: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/build-android-e2e.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-android-e2e.yml:119: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/build-android-e2e.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-android-e2e.yml:129: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/build-android-e2e.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-attributions.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/check-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-attributions.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/check-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-pr-labels.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/check-pr-labels.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-pr-labels.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/check-pr-labels.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/check-pr-max-lines.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/check-pr-max-lines.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-template-and-add-labels.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/check-template-and-add-labels.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-template-and-add-labels.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/check-template-and-add-labels.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:131: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:132: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:137: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:146: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:207: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:210: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:213: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:303: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:98: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:99: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:113: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:164: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:179: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:189: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:192: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:250: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cla.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/cla.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/close-bug-report.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/close-bug-report.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/close-bug-report.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/close-bug-report.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/create-bug-report.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/create-bug-report.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/create-bug-report.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/create-bug-report.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/create-cherry-pick-pr.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/create-cherry-pick-pr.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/create-cherry-pick-pr.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/create-cherry-pick-pr.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/create-release-draft.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/create-release-draft.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/create-release-pr-legacy.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/create-release-pr-legacy.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/create-release-pr.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/create-release-pr.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/crowdin_action.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/crowdin_action.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docker.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/docker.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fitness-functions.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/fitness-functions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/fitness-functions.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/fitness-functions.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/post-merge-validation.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/post-merge-validation.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-bitrise-e2e-check.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-bitrise-e2e-check.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-bitrise-e2e-check.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-bitrise-e2e-check.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-bitrise-flask-e2e-check.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-bitrise-flask-e2e-check.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-bitrise-flask-e2e-check.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-bitrise-flask-e2e-check.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e-api-specs.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e-api-specs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e-api-specs.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e-api-specs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e-api-specs.yml:156: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e-api-specs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e-api-specs.yml:164: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e-api-specs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e-workflow.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e-workflow.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/run-e2e-workflow.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e-workflow.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e-workflow.yml:98: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e-workflow.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e-workflow.yml:174: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e-workflow.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e-workflow.yml:189: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e-workflow.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e.yml:233: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e.yml:236: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-e2e.yml:252: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/run-e2e.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/security-code-scanner.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/security-code-scanner.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/stable-branch-sync.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/stable-branch-sync.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-android-build-app.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-android-build-app.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-android-build-app.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-android-build-app.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-android-build-app.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-android-build-app.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-android-build-app.yml:133: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-android-build-app.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-android-build-app.yml:144: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-android-build-app.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-android-build-app.yml:155: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-android-build-app.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-ios-build-app.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-ios-build-app.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-ios-build-app.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-ios-build-app.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-ios-build-app.yml:112: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-ios-build-app.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-ios-build-app.yml:123: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-ios-build-app.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-ios-build-app.yml:134: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-ios-build-app.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-ios-build-app.yml:145: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/test-ios-build-app.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/trigger-performance-e2e.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/trigger-performance-e2e.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/trigger-performance-e2e.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/trigger-performance-e2e.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-attributions.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-attributions.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-attributions.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-attributions.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-attributions.yml:82: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-attributions.yml:89: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-attributions.yml:98: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-attributions.yml:113: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-attributions.yml:126: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-attributions.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-attributions.yml:183: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-attributions.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/update-latest-build-version.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-latest-build-version.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-latest-build-version.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/MetaMask/metamask-mobile/update-latest-build-version.yml/main?enable=pin","Warn: containerImage not pinned by hash: scripts/docker/Dockerfile:2: pin your Docker image by updating node:20-bookworm to node:20-bookworm@sha256:2c071012e93673d595e1399564c4a48a70a5c0a0acd7db8211d5e6f6316b431a","Warn: downloadThenRun not pinned by hash: .github/workflows/ci.yml:307","Info:   0 out of  92 GitHub-owned GitHubAction dependencies pinned","Info:  20 out of  31 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"34 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-x4c5-c7rf-jjgv","Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q","Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38","Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-c76h-2ccp-4975","Warn: Project is vulnerable to: GHSA-cxrh-j4jr-qwg3","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-3gc7-fjrx-p6mg","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-pppg-cpfq-h7wr","Warn: Project is vulnerable to: GHSA-hw8r-x6gr-5gjp","Warn: Project is vulnerable to: GHSA-593f-38f6-jp5m","Warn: Project is vulnerable to: GHSA-x2rg-q646-7m2v","Warn: Project is vulnerable to: GHSA-jgmv-j7ww-jx2x","Warn: Project is vulnerable to: GHSA-7cfr-5cjf-32p4","Warn: Project is vulnerable to: GHSA-4wx3-54gh-9fr9","Warn: Project is vulnerable to: GHSA-gmwp-3pwc-3j3g","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-54xq-cgqr-rpm3","Warn: Project is vulnerable to: GHSA-w5hq-hm5m-4548","Warn: Project is vulnerable to: GHSA-pq67-2wwv-3xjx","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-rv73-9c8w-jp4c","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T08:15:20.790Z","repository_id":37374758,"created_at":"2025-08-15T08:15:20.790Z","updated_at":"2025-08-15T08:15:20.790Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38344170,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-18T02:00:06.448Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","dapps-browser","ios","javascript","metamask","react-native","web3"],"created_at":"2024-09-24T20:28:43.171Z","updated_at":"2026-10-19T01:08:33.810Z","avatar_url":"https://github.com/MetaMask.png","language":"TypeScript","funding_links":["https://opencollective.com/metamask"],"categories":[],"sub_categories":[],"readme":"![MetaMask logo](logo.png?raw=true)\n\n# MetaMask\n\n[![CI](https://github.com/MetaMask/metamask-mobile/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/MetaMask/metamask-mobile/actions/workflows/ci.yml) [![CLA](https://github.com/MetaMask/metamask-mobile/actions/workflows/cla.yml/badge.svg?branch=main)](https://github.com/MetaMask/metamask-mobile/actions/workflows/cla.yml)\n\nMetaMask is a mobile wallet that provides easy access to websites that use the [Ethereum](https://ethereum.org/) blockchain.\n\nFor up to the minute news, follow our [Twitter](https://twitter.com/metamask) or [Medium](https://medium.com/metamask) pages.\n\nTo learn how to develop MetaMask-compatible applications, visit our [Developer Docs](https://docs.metamask.io).\n\nTo learn how to contribute to the MetaMask codebase, visit our [Contributor Docs](https://github.com/MetaMask/contributor-docs).\n\n## Documentation\n\n- [Architecture](./docs/readme/architecture.md)\n- [Expo Development Environment Setup](./docs/readme/expo-environment.md)\n- [Native Development Environment Setup](./docs/readme/environment.md)\n- [Build Troubleshooting](./docs/readme/troubleshooting.md)\n- [E2E Testing](./docs/readme/e2e-testing.md)\n- [Debugging](./docs/readme/debugging.md)\n- [Performance](./docs/readme/performance.md)\n- [Release Build Profiling](./docs/readme/release-build-profiler.md)\n- [Storybook](./docs/readme/storybook.md)\n- [Miscellaneous](./docs/readme/miscellaneous.md)\n- [E2E Testing Segment Events](./docs/testing/e2e/segment-events.md)\n- [Reassure Performance Testing (pilot)](./docs/readme/reassure.md)\n\n## Getting started\n\n### Using Expo (recommended)\n\nExpo is the fastest way to start developing. With the Expo framework, developers don't need to compile the native side of the application as before, hence no need for any native environment setup, developers only need to download a precompiled development build and run the javascript bundler. The development build will then connect with the bundler to load the javascript code.\n\n#### Expo Environment Setup\n\n[Install node, yarn v3 and watchman.](./docs/readme/expo-environment.md)\n\n#### Clone the project\n\n```bash\ngit clone git@github.com:MetaMask/metamask-mobile.git \u0026\u0026 \\\ncd metamask-mobile\n```\n\n#### Install dependencies\n\n```bash\nyarn setup:expo\n```\n\n#### Run the bundler\n\n```bash\nyarn watch\n```\n\n#### Download and install the development build\n\n- Expo development builds are hosted in [Runway](https://www.runway.team/) buckets and are made available to all contributors through the public bucket links below. A new build is generated every time a PR is merged into the `main` branch.\n\n- For Android:\n  - Download and install an `.apk` file from this [Runway bucket](https://app.runway.team/bucket/hykQxdZCEGgoyyZ9sBtkhli8wupv9PiTA6uRJf3Lh65FTECF1oy8vzkeXdmuJKhm7xGLeV35GzIT1Un7J5XkBADm5OhknlBXzA0CzqB767V36gi1F3yg3Uss) onto your Android device or emulator.\n- For iOS:\n  - Physical device\n    - Your test device needs to first be registered with our Apple developer account.\n    - Once registered, download and install an `.ipa` file from this [Runway bucket](https://app.runway.team/bucket/MV2BJmn6D5_O7nqGw8jHpATpEA4jkPrBB4EcWXC6wV7z8jgwIbAsDhE5Ncl7KwF32qRQQD9YrahAIaxdFVvLT4v3UvBcViMtT3zJdMMfkXDPjSdqVGw=) onto your device.\n  - Simulator\n    - Download and install an `.app` file from this [Runway bucket](https://app.runway.team/bucket/aCddXOkg1p_nDryri-FMyvkC9KRqQeVT_12sf6Nw0u6iGygGo6BlNzjD6bOt-zma260EzAxdpXmlp2GQphp3TN1s6AJE4i6d_9V0Tv5h4pHISU49dFk=) onto your simulator.\n    - Note: Our `.app` files are zipped and hosted under `Additional Artifacts` in the bucket. Since this hosting additional artifacts in public buckets is a relatively new feature, contributors may find that some builds are missing additional artifacts. Under the hood, these are usually associated with failed or aborted Bitrise builds. We are working with the Runway team to better filter out these builds and are subject to change in the future.\n\n#### Load the app\n\nIf on a simulator:\n\n- use the initial expo screen that appears when starting the development to choose the bundler url\n- OR press \"a\" for Android or \"i\" for iOS on the terminal where the bundler is running\n\nIf on a physical device:\n\n- Use the camera app to scan the QR code presented by the bundler running on the terminal\n\nThat's it! This will work for any javascript development, if you need to develop or modify native code please see the next section.\n\n### Native Development\n\nIf developing or modifying native code or installing any library that introduces or uses native code, it is not possible to use an Expo precompiled development build as you need to compile the native side of the application again. To do so, please follow the steps stated in this section.\n\n#### Native Environment setup\n\nBefore running the app for native development, make sure your development environment has all the required tools. Several of these tools (ie Node and Ruby) may require specific versions in order to successfully build the app.\n\n[Setup your development environment](./docs/readme/environment.md)\n\n#### Building the app\n\n**Clone the project**\n\n```bash\ngit clone git@github.com:MetaMask/metamask-mobile.git \u0026\u0026 \\\ncd metamask-mobile\n```\n\n##### Firebase Messaging Setup\n\nMetaMask uses Firebase Cloud Messaging (FCM) to enable app communications. To integrate FCM, you'll need configuration files for both iOS and Android platforms.\n\n###### Internal Contributor instructions\n\n1. Grab the `.js.env` file from 1Password, ask around for the correct vault. This file contains the `GOOGLE_SERVICES_B64_ANDROID` and `GOOGLE_SERVICES_B64_IOS` secrets that will be used to generate the relevant configuration files for IOS/Android.\n2. [Install](./README.md#install-dependencies) and [run \u0026 start](./README.md#running-the-app) the application as documented below.\n\n###### External Contributor instructions\n\nAs an external contributor, you need to provide your own Firebase project configuration files:\n\n- **`GoogleService-Info.plist`** (iOS)\n- **`google-services.json`** (Android)\n\n1. Create a Free Firebase Project\n   - Set up a Firebase project in the Firebase Console.\n   - Configure the project with a client package name matching `io.metamask` (IMPORTANT).\n2. Add Configuration Files\n   - Create/Update the `google-services.json` and `GoogleService-Info.plist` files in:\n   - `android/app/google-services.json` (for Android)\n   - `ios/GoogleServices/GoogleService-Info.plist` directory (for iOS)\n3. Create the correct base64 environments variables.\n\n```bash\n# Generate Android Base64 Version of Google Services\nexport GOOGLE_SERVICES_B64_ANDROID=\"$(base64 -w0 -i ./android/app/google-services.json)\" \u0026\u0026 echo \"export GOOGLE_SERVICES_B64_ANDROID=\\\"$GOOGLE_SERVICES_B64_ANDROID\\\"\" | tee -a .js.env\n\n# Generate IOS Base64 Version of Google Services\nexport GOOGLE_SERVICES_B64_IOS=\"$(base64 -w0 -i ./ios/GoogleServices/GoogleService-Info.plist)\" \u0026\u0026 echo \"export GOOGLE_SERVICES_B64_IOS=\\\"$GOOGLE_SERVICES_B64_IOS\\\"\" | tee -a .js.env\n```\n\n[!CAUTION]\n\n\u003e In case you don't provide your own Firebase project config file or run the steps above, you will face the error `No matching client found for package name 'io.metamask'`.\n\nIn case of any doubt, please follow the instructions in the link below to get your Firebase project config file.\n[Firebase Project Quickstart](https://firebaseopensource.com/projects/firebase/quickstart-js/messaging/readme/#getting_started)\n\n##### Install dependencies\n\n```bash\nyarn setup\n```\n\n_Not the usual install command, this will run scripts and a lengthy postinstall flow_\n\n#### Running the app for native development\n\n**Run Metro bundler**\n\n```bash\nyarn watch\n```\n\n_Like a local server for the app_\n\n**Run on a iOS device**\n\n```bash\nyarn start:ios\n```\n\n**Run on an Android device**\n\n```bash\nyarn start:android\n```\n\n## Development Tools\n\n### Git Hooks (Husky)\n\nThis project uses [Husky](https://typicode.github.io/husky/) to run pre-commit hooks that automatically format and lint your code before commits. The pre-commit hook runs `lint-staged` which executes:\n\n- **Prettier** - Code formatting for `*.{js,jsx,ts,tsx,json,feature}` files\n- **ESLint** - Linting and auto-fixing for `*.{js,jsx,ts,tsx}` files\n\n#### Disabling Husky Locally\n\nIf you need to disable Husky pre-commit hooks temporarily (e.g., for emergency commits or debugging), you have several options:\n\n##### Option 1: Skip hooks for a single commit\n\n```bash\ngit commit --no-verify -m \"your commit message\"\n```\n\n##### Option 2: Bypass hooks with environment variable\n\n```bash\n# Disable for current session\nexport HUSKY=0\ngit commit -m \"your commit message\"\n\n# Or disable for a single command\nHUSKY=0 git commit -m \"your commit message\"\n```\n\n**Note:** While these methods allow you to bypass the pre-commit hooks, remember that the CI/CD pipeline will still run linting checks. It's recommended to fix linting issues before pushing your changes to avoid build failures.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetamask%2Fmetamask-mobile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetamask%2Fmetamask-mobile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetamask%2Fmetamask-mobile/lists"}