Sends a single message from a WebExtension to a native application.

This takes two mandatory parameters: the name of the native application and a JSON object which is the message to send it. The browser will launch the native application and deliver the message.

It also takes one optional parameter, which is a callback function. The first message sent by the native application is treated as a response to the sendNativeMessage() call, and will be passed into the callback. Note that you can't use runtime.onMessage to get responses from the application: you must use the callback function instead.

A new instance of the application is launched for call to runtime.sendNativeMessage(). The browser will terminate the native application after getting a reply. To terminate a native application, the browser will close the pipe, give the process a few seconds to exit gracefully, and then kill it if it has not exited.

For more information, see Native messaging.


  application,             // string
  message,                 // object
  function(response) {...} // optional function

This API is also available as browser.runtime.sendNativeMessage() in a version that returns a promise.


string. The name of the native application. This must match the "name" property in the native application's manifest file.
object. A JSON object that will be sent to the native application.
A callback function. The function is passed the following arguments:
object. A JSON object containing the response message sent by the native application. If an error occurs while connecting to the native application, the callback will be called with no arguments and runtime.lastError will be set to the error message.

Browser compatibility

Chrome Edge Firefox Firefox for Android Opera
Basic support Yes No 50.0 No 33


Here's a background script that sends a "ping" message to the "ping_pong" app and logs the response, whenever the user clicks the browser action:

function onResponse(response) {
  console.log("Received " + response);

On a click on the browser action, send the app a message.
chrome.browserAction.onClicked.addListener(() => {
  console.log("Sending:  ping");


This API is based on Chromium's chrome.runtime API. This documentation is derived from runtime.json in the Chromium code.

Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.

Document Tags and Contributors

 Contributors to this page: Makyen, wbamberg, chrisdavidmills
 Last updated by: Makyen,