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

Seamless, reliable, and customizable connection to the browser extension and mobile clients.
Connect dapps to users’ Ethereum and non-EVM accounts
Instantly onboard users through smart accounts portable with MetaMask, redesign gas, build with permissions-first delegations.
Design supercharged on-chain experiences with Embedded Wallets — instant setup, minimal friction, endless customizability.

Scale your dapp with Infura’s industry-leading, cloud-based node services.
Simplify development and boost performance with the APIs powering MetaMask’s most popular features.

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

DoSomething to ControllerNameDoSomethingAction (#3907, #3911, #3912, #3916, #3918)SnapController actions:GetSnap is now SnapControllerGetSnapAction.getSnap instead of get.null if a Snap is not found, instead of
undefined.HandleSnapRequest is now SnapControllerHandleRequestAction.GetSnapState is now SnapControllerGetSnapStateAction.HasSnap is now SnapControllerHasSnapAction.hasSnap instead of has.UpdateSnapState is now SnapControllerUpdateSnapStateAction.ClearSnapState is now SnapControllerClearSnapStateAction.UpdateRegistry is now SnapControllerUpdateRegistryAction.EnableSnap is now SnapControllerEnableSnapAction.enableSnap instead of enable.DisableSnap is now SnapControllerDisableSnapAction.disableSnap instead of disable.RemoveSnap is now SnapControllerRemoveSnapAction.removeSnap instead of remove.GetPermittedSnaps is now SnapControllerGetPermittedSnapsAction.getPermittedSnaps instead of getPermitted.GetAllSnaps is now SnapControllerGetAllSnapsAction.getAllSnaps instead of getAll.GetRunnableSnaps is now SnapControllerGetRunnableSnapsAction.StopAllSnaps is now SnapControllerStopAllSnapsAction.InstallSnaps is now SnapControllerInstallSnapsAction.installSnaps instead of install.DisconnectOrigin is now SnapControllerDisconnectOriginAction.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.requestUpdate instead of update.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.MultichainRouter to MultichainRoutingService and update action types accordingly (#3913)JsonSnapsRegistry to SnapRegistryController and update action types accordingly (#3918)SnapRegistryController instead of SnapsRegistry as well.MultichainRoutingService now requires SnapController:getRunnableSnaps instead of SnapController:getAllSnaps (#3913)SnapInsightsController now requires SnapController:getRunnableSnaps instead of SnapController:getAllSnaps (#3915)ExecutionService interface with abstract class (#3916)ExecutionService is now an abstract class and replaces the previous AbstractExecutionService class interface.AbstractExecutionService class in favour of ExecutionService (#3916)incrementActiveReferences and decrementActiveReferences actions and methods from SnapController (#3907, #3920)getTruncatedSnap and getTruncatedSnapExpect methods from SnapController (#3923)@metamask/snaps-controllers from 18.0.4 to 19.0.0 and handle breaking changes (#3922)@metamask/snaps-controllers from 18.0.4 to 19.0.0 and handle breaking changes (#3922)@metamask/snaps-controllers from 18.0.4 to 19.0.0 and handle breaking changes (#3922)@metamask/snaps-controllers from 18.0.4 to 19.0.0 and handle breaking changes (#3922)wallet_sendCalls, wallet_getCallsStatus, wallet_getCapabilities (#284)