Build with MetaMask

A suite of developer tools to empower dapp developers to build innovative experiences for the most powerful, crypto-native users on MetaMask

Build with MetaMask
  • Integrate with MetaMask wallet

    • MetaMask SDK

      Seamless, reliable, and customizable connection to the browser extension and mobile clients.

    • Multichain API

      Connect dapps to users’ Ethereum and non-EVM accounts

    Integrate with MetaMask wallet
  • Explore smart accounts and embedded wallets

    • Smart Accounts Kit

      Instantly onboard users through smart accounts portable with MetaMask, redesign gas, build with permissions-first delegations.

    • Embedded Wallets

      Design supercharged on-chain experiences with Embedded Wallets — instant setup, minimal friction, endless customizability.

    Explore smart accounts and embedded wallets
  • Run dapps faster

    • Managed Nodes

      Scale your dapp with Infura’s industry-leading, cloud-based node services.

    • Platform APIs

      Simplify development and boost performance with the APIs powering MetaMask’s most popular features.

    Run dapps faster
  • Customize MetaMask for any dapp and protocol

    • Snaps

      Add new functionality for MetaMask, and add support for any protocol in EVM and non-EVM networks.

    Customize MetaMask for any dapp and protocol

Develop with MetaMask

A comprehensive set of developer tools, products and services for onboarding and engaging with MetaMask users.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

Discover tutorials, workshops, and more.

Tutorials, video walkthroughs, and workshops—for developers, by developers

Start building with a free Linea mainnet node

Deploy your smart contract on Linea’s EVM-equivalent L2 for free.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

Release notes

  • MetaMask Snaps

    View full note
    v148.0.0
    26 March 2026
    • Changed
      @metamask/snaps-controllers 19.0.0
      • BREAKING: All action types were renamed from DoSomething to ControllerNameDoSomethingAction (#3907, #3911, #3912, #3916, #3918)
        • SnapController actions:
          • GetSnap is now SnapControllerGetSnapAction.
            • Note: The method is now called getSnap instead of get.
            • Note: It now returns null if a Snap is not found, instead of undefined.
          • HandleSnapRequest is now SnapControllerHandleRequestAction.
          • GetSnapState is now SnapControllerGetSnapStateAction.
          • HasSnap is now SnapControllerHasSnapAction.
            • Note: The method is now called hasSnap instead of has.
          • UpdateSnapState is now SnapControllerUpdateSnapStateAction.
          • ClearSnapState is now SnapControllerClearSnapStateAction.
          • UpdateRegistry is now SnapControllerUpdateRegistryAction.
          • EnableSnap is now SnapControllerEnableSnapAction.
            • Note: The method is now called enableSnap instead of enable.
          • DisableSnap is now SnapControllerDisableSnapAction.
            • Note: The method is now called disableSnap instead of disable.
          • RemoveSnap is now SnapControllerRemoveSnapAction.
            • Note: The method is now called removeSnap instead of remove.
          • GetPermittedSnaps is now SnapControllerGetPermittedSnapsAction.
            • Note: The method is now called getPermittedSnaps instead of getPermitted.
          • GetAllSnaps is now SnapControllerGetAllSnapsAction.
            • Note: The method is now called getAllSnaps instead of getAll.
          • GetRunnableSnaps is now SnapControllerGetRunnableSnapsAction.
          • StopAllSnaps is now SnapControllerStopAllSnapsAction.
          • InstallSnaps is now SnapControllerInstallSnapsAction.
            • Note: The method is now called installSnaps instead of install.
          • DisconnectOrigin is now SnapControllerDisconnectOriginAction.
            • Note: The method is now called disconnectOrigin instead of removeSnapFromSubject.
          • RevokeDynamicPermissions is now SnapControllerRevokeDynamicSnapPermissionsAction.
          • GetSnapFile is now SnapControllerGetSnapFileAction.
          • IsMinimumPlatformVersion is now SnapControllerIsMinimumPlatformVersionAction.
          • SetClientActive is now SnapControllerSetClientActiveAction.
        • CronjobController actions:
          • Schedule is now CronjobControllerScheduleAction.
          • Cancel is now CronjobControllerCancelAction.
          • Get is now CronjobControllerGetAction.
        • SnapInterfaceController actions:
          • CreateInterface is now SnapInterfaceControllerCreateInterfaceAction.
          • GetInterface is now SnapInterfaceControllerGetInterfaceAction.
          • UpdateInterface is now SnapInterfaceControllerUpdateInterfaceAction.
          • DeleteInterface is now SnapInterfaceControllerDeleteInterfaceAction.
          • UpdateInterfaceState is now SnapInterfaceControllerUpdateInterfaceStateAction.
          • ResolveInterface is now SnapInterfaceControllerResolveInterfaceAction.
        • ExecutionService actions:
          • ExecuteSnap is now ExecutionServiceExecuteSnapAction.
          • HandleRequest is now ExecutionServiceHandleRequestAction.
          • TerminateSnap is now ExecutionServiceTerminateSnapAction.
          • GetExecutionStatus is now ExecutionServiceGetExecutionStatusAction.
        • SnapRegistryController actions:
          • GetResult is now SnapRegistryControllerGetAction.
          • GetMetadata is now SnapRegistryControllerGetMetadataAction.
          • ResolveVersion is now SnapRegistryControllerResolveVersionAction.
          • Update is now SnapRegistryControllerRequestUpdateAction.
            • Note: The method is now called requestUpdate instead of update.
      • BREAKING: All event types were renamed from OnSomething to ControllerOnSomethingEvent (#3907, #3916)
        • SnapController events:
          • SnapStateChange was removed in favour of SnapControllerStateChangeEvent.
          • SnapBlocked is now SnapControllerSnapBlockedEvent.
          • SnapInstallStarted is now SnapControllerSnapInstallStartedEvent.
          • SnapInstallFailed is now SnapControllerSnapInstallFailedEvent.
          • SnapInstalled is now SnapControllerSnapInstalledEvent.
          • SnapUninstalled is now SnapControllerSnapUninstalledEvent.
          • SnapUnblocked is now SnapControllerSnapUnblockedEvent.
          • SnapUpdated is now SnapControllerSnapUpdatedEvent.
          • SnapRolledback is now SnapControllerSnapRolledbackEvent.
          • SnapTerminated is now SnapControllerSnapTerminatedEvent.
          • SnapEnabled is now SnapControllerSnapEnabledEvent.
          • SnapDisabled is now SnapControllerSnapDisabledEvent.
        • ExecutionService events:
          • ErrorMessageEvent is now ExecutionServiceUnhandledErrorEvent.
          • OutboundRequest is now ExecutionServiceOutboundRequestEvent.
          • OutboundResponse is now ExecutionServiceOutboundResponseEvent.
      • BREAKING:: Rename MultichainRouter to MultichainRoutingService and update action types accordingly (#3913)
        • This is consistent with the naming of other services.
      • BREAKING: Rename JsonSnapsRegistry to SnapRegistryController and update action types accordingly (#3918)
        • This is consistent with the naming of other controllers.
        • The controller name is now SnapRegistryController instead of SnapsRegistry as well.
      • BREAKING: MultichainRoutingService now requires SnapController:getRunnableSnaps instead of SnapController:getAllSnaps (#3913)
      • BREAKING: SnapInsightsController now requires SnapController:getRunnableSnaps instead of SnapController:getAllSnaps (#3915)
      • RREAKING: Replace ExecutionService interface with abstract class (#3916)
        • The ExecutionService is now an abstract class and replaces the previous AbstractExecutionService class interface.
      Removed
      • RREAKING: Remove AbstractExecutionService class in favour of ExecutionService (#3916)
      • BREAKING: Remove incrementActiveReferences and decrementActiveReferences actions and methods from SnapController (#3907, #3920)
        • This was never used in production.
      • BREAKING: Remove public getTruncatedSnap and getTruncatedSnapExpect methods from SnapController (#3923)
    • Changed
      @metamask/snaps-execution-environments 11.0.2
      • Bump lavamoat from 10.1.1 to 11.0.0 (#3908)
      • Bump @lavamoat/webpack from 1.5.8 to 2.0.0 (#3909)
    • Changed
      @metamask/snaps-jest 10.1.2
      • Bump @metamask/snaps-controllers from 18.0.4 to 19.0.0 and handle breaking changes (#3922)
    • Changed
      @metamask/snaps-rpc-methods 15.0.1
      • Bump @metamask/snaps-controllers from 18.0.4 to 19.0.0 and handle breaking changes (#3922)
    • Changed
      @metamask/snaps-simulation 4.1.2
      • Bump @metamask/snaps-controllers from 18.0.4 to 19.0.0 and handle breaking changes (#3922)
    • Changed
      @metamask/snaps-utils 12.1.2
      • Bump @metamask/snaps-controllers from 18.0.4 to 19.0.0 and handle breaking changes (#3922)
  • MetaMask SDK

    View full note
    v117.0.0
    25 March 2026
    • Changed
      @metamask/sdk 0.34.1
      • Mark the package as deprecated in the README and direct consumers to MetaMask Connect migration docs and successor packages.
    • Changed
      @metamask/sdk-analytics 0.0.6
      • Mark the package as deprecated in the README and direct consumers to MetaMask Connect migration docs and successor packages.
      • fix: missing export of esmodule on sdk-analytics (#1334)
    • Changed
      @metamask/sdk-communication-layer 0.33.2
      • Mark the package as deprecated in the README and direct consumers to MetaMask Connect migration docs and successor packages.
    • Changed
      @metamask/sdk-install-modal-web 0.32.2
      • Mark the package as deprecated in the README and direct consumers to MetaMask Connect migration docs and successor packages.
      • feat: adding mobile wallet protocol (#1346)
      • Release 110.0.0 (#1235)
    • Changed
      @metamask/multichain-sdk 0.0.1
      • Mark the package as deprecated in the README and direct consumers to MetaMask Connect migration docs and successor packages.
    • Changed
      @metamask/sdk-multichain-ui 0.0.1
      • Mark the package as deprecated in the README and direct consumers to MetaMask Connect migration docs and successor packages.
    • Changed
      @metamask/sdk-react 0.33.2
      • Mark the package as deprecated in the README and direct consumers to MetaMask Connect migration docs and successor packages.
    • Changed
      @metamask/sdk-react-native 0.3.13
      • Mark the package as deprecated in the README and direct consumers to MetaMask Connect migration docs and successor packages.
      • refactor: replace qr-code-styling with smaller library (#1129)
    • Changed
      @metamask/sdk-react-ui 0.29.3
      • Mark the package as deprecated in the README and direct consumers to MetaMask Connect migration docs and successor packages.
  • Wallet / Multichain API

    View full note
    v0.14.0
    6 May 2025
    • Added
      • Add EIP-5792 methods: wallet_sendCalls, wallet_getCallsStatus, wallet_getCapabilities (#284)