External Application Button Connect your browser with external applications the easy way
Support Development
PayPal ● 
Bitcoin Address: 1sM2BrTH8BRgt3quiASK8TmYSafutNvDo
Dogecoin Address: DFdSGpGMZ2EZVkjyqNrYCEysK92DFPonx4
Your Input Matters
"External Application Button" adds a single toolbar button plus customizable context menu items to your browser to send page link, selected text, video source, audio source, image source URL to an external application. Using this extension for instance you can open current page in another browser of choice or send image to an external photo editor like GIMP, Paint.net, or even photoshop through context-menu item.



  1. What is "External Application Button" extension and how does it work?

    This extension adds a toolbar button to your browser. Pressing the button, either opens the options page or performs selected task. You can define as many tasks as you like in the options page. Beside the toolbar's action button, it is possible to define context-menu items for different actions like context-over-page, context-over-image, context-over-video and so on. These items open an external application and send custom arguments to the opened application.

  2. recommended "Spoof Geolocation" extension for Chrome, Edge and Firefox browsers

    This extension alters the reported GEO location by your browser. You can provide your custom latitude and longitude to any website to improve privacy or get localized data from a custom location. This extension is also useful if you have a SOCKS proxy on your browser to have a consistent IP address with the GEO data. Read more here.

  3. Can I define more than one toolbar button?

    Nope! Instead, use the right-click context menu over the toolbar button to change the default application. Basically you can only have one toolbar button, but it is very easy to change applications from the right click context menu. Just define multiple applications on "toolbar" mode and you will be able to switch between them easily through the right-click on the toolbar button. Pressing the toolbar button either opens up the options page (if no program is set for "toolbar" mode) or executes the default external application and passes the defined arguments.

  4. How can I define a new external application?

    Go to the options page. Fill all the fields and press "Add Application" button. "Display Name" is the name that is displayed either in the tooltip of the toolbar button or as the name of the context menu item. "Executable name/path" is absolute path to the external application. For instance on Windows operation system if you intend to open Firefox browser and Firefox is installed in the default location, you can use C:\Program Files (x86)\Mozilla Firefox\firefox.exe in this field. "Arguments" is the list of arguments to pass to the external application. For instance to open a link with an external application use [HREF] reserved word. "Placement" indicates the location where the button is appended to. Either select context-menu or toolbar button or both! "Icon" is the image of the toolbar button when this application is set as default application. It is recommneded to use 32px PNG format. There is a limitation of 5KBytes for each image file.

  5. Is it possible to alter things when an application is added?

    Yes, modifying different parameters is easy. Just open the options page and select application from the "List of applications" menu. Now alter parameters and press "Update Application" button.

  6. What's new in this version?

    Please check the Logs section.

  7. Why do I need to give the installer script administrator permission? Is there anyway to install this script without this permission?

    Windows: the installer script does two things that need admin permission. It is possible to perform these steps manually to bypass the admin permission. Basically you need to create a registry entry to let your browser know where the actual program is located. So first place the "app" folder somewhere locally and then create the registry entry as describe in here (if you are going to use this app with a single browser just create a single registry entry). If your registry is pointed to the right location for "app", the extension should be able to detect the native client.

    Mac and Linux: in Mac and Linux script needs sudo access which is equivalent to the admin permission in Windows. To bypass this permission, place the "app" folder in a local directory and follow generating and placing the JSON identifier based on your operation system in the right directory: Chrome & Opera for Linux, Firefox for Linux, Chrome and Opera for Mac, and Firefox for Mac; for more info take a look at this code. The install.js simply copies a few files to two different locations. Since copying to both locations need sudo permission, you need to manually create and copy files.

    Note that the installer script first checks to see if you have NodeJS in your PATH environment variable. If so NodeJS executable is not being copied. So if you are sure NodeJS is present in your system, there is no need to copy this file either.

  8. How can I install the native client?

    Instruction on how to install the native client will be displayed once the toolbar button is clicked. If you want to see it in action watch these two short tutorials

    Windows: https://www.youtube.com/watch?v=18jAqTXBiZA

    Linux and Mac: https://www.youtube.com/watch?v=bB4Bj_APg4g

  9. Using the options page, I added a new context menu item, but the used icon during setup is not shown in the left side of the context-menu item. How can I fix this?

    Unfortunately, Chrome does not allow changing of context-menu icons at the moment. This is an API limitation and hence for now there is no fix for it. For more info please visit https://developer.chrome.com/extensions/contextMenus#method-create.

  10. How can I open a Terminal window in Mac OS?

    Opening a visible terminal window is useful. On Mac use the following command to open a new Terminal window and execute a command like echo in it:

    Use /usr/bin/osascript as the executable path and use this code in the arguments section:

    -e 'tell application "Terminal" to do script "echo [HREF]"'

  11. How can I open an intractive command line (CMD) window in Windows OS?

    Use C:\Windows\System32\cmd.exe as the executable path and for the arguments use /s/c start. Note that you can append a batch file path to the argument list to run an interactive batch script.

  12. To add a new application to the list, I need to provide an icon for this new application. It is pretty hard to find an icon with the requested size. Any recommendation?

    Use https://www.iconfinder.com/ to find icons in different sizes. I will remove the icon requirement for context menu items as the icon is not being shown anyway in the future releases. Read https://github.com/andy-portmen/native-client/issues/3 for more info.

  13. How can I send selected text to my favorite text editor like Notepad++ or Sublime Text

    You need to create a script that accepts the input text and opens the external application

    On Windows, create a bat script with the following content:

    echo %* > C:\Users\MYUSERNAME\Desktop\test.txt
    start "" NotePad++ C:\Users\MYUSERNAME\Desktop\test.txt

    On Mac OS, create a shell script with the following content:

    echo "$@" > ~/Desktop/log.txt
    open -a "Sublime Text" ~/Desktop/log.txt

    Now open the options page and create a new entry. Use "Selection Context" as the context menu item and point the executable path to the created script. Use [SELECTIONTEXT] in the arguments section.

  14. When using the "on Link Context" to execute external application on link selection, the context menu item only appears for "http://" and "https://" schemes. Is it possible for this context menu to support more protocols, such as "ed2k://", "thunder://", or "magnet:"?

    Yes, there is a pattern box next to the context menu selection in the options page. Make sure to add custom schemes to this box. For instance if you want your context menu to appear only for "ed2k://" scheme, then insert ed2k://* in the text box. If you want to support "http://" and "https://" schemes as well use ed2k:*, *://*/*.

  15. Can I check the actual arguments that are sent to the executable?

    Yes. Use the following code as a batch script (create a new file with the following content and call it test.bat). Use the path of this batch script as the executable path and check the generated file when the command is executed by pressing the toolbar button or clicking the context menu item.

    echo %* >> C:\Users\%USERNAME%\Desktop\output.txt
    This is particularly useful to make sure the extension passes the correct arguments to the actual executable.

  16. The new version of the "External Application Button" extension supports multiple placements for a context menu. What is going to be sent to the external application if [URL] keyword is used in the arguments list?

    Here is how you can decide what is sent when multiple contexts are select. If "link" context is used, always the href of the closest link is used. For "image", "video", and "audio" contexts considering the "link" context is not included, the src attribute is used (if available). For all other cases, either page or frame URL is used.

    So for example if you want to send the link URL of a thumbnail image, you can either only use "link" or "link" plus "image" contexts. However, if you intend to send the image URL to a photo editor, use "image" context only (do not include the "link" context).

  17. When I am running an external executable with this extension, the external application executes just fine, but during the exit, I am getting the setup guide page which suggests something went wrong. How can I prevent this?

    If the external executable returns an exit code other than "0", the extension opens the guide page to notify you that the exit code is reporting unsuccessful execution. If you want to ignore this, open the options page and select "ignore errors" option for this particular application.

  18. My external executable can only handle spaces in the path when it is surrounded with quotations. By default, the extension doesn't seem to send the surrounding quotations I have in the arguments list. Can this be fixed?

    Normally there is no need for the surrounding quotations as the extension parses the arguments and send each argument separately. However if having quotes are necessary for your external executable, use the options page to force sending them. Note that you can always use the "Test Arguments" button to see a sample output of what actually is sent to the external executable.

  19. What is the meaning of the [DOWNLOADED_PATH] keyword?

    If [DOWNLOADED_PATH] keyword is used in the arguments list, "External Application Button" first downloads the link using the built-in download manager and then sends the absolute path of the downloaded file to the external application. This can be used for instance to open a PDF file using the default PDF viewer application.

  20. What is the meaning of the [PROMPT] keyword?

    If [PROMPT] keyword is used in the arguments list, user will get prompt dialog before command is executed and the resulted string is passed to the external executable. This is useful to for instance to select a filename before sending the link to the external executable. Note that you can have multiple [PROMPT] keywords if you need to ask for multiple user inputs.

  21. Can I use my own extension to run native commands using "External Application Button" as a middle man?

    Yes, this extension supports running native commands from other extensions/applications with user confirmation. To use this feature, see this sample code:

    chrome.runtime.sendMessage('EXTERNAL_APPLICATION_BUTTON_GUID', {
      app: {
        args: '[HREF]',
        path: 'firefox'
      tab: {
        url: 'http://www.example.com'
    This code uses a faked tab object. Instead, you can send the actual tab id that is prepared by the chrome.tabs... API. In this example. The extension opens Firefox browser using open -a firefox [URL_HERE] command which is how an application should be called in Mac OS. Note that based on your browser, you will need to provide the correct value for EXTERNAL_APPLICATION_BUTTON_GUID.

  22. Is it possible to open a URL in a particular Firefox profile using this extension?

    You need a bash script for that. For Mac OS it would be like this:

    RESULT=`ps -A | grep firefox`
    if echo $RESULT | grep $PROFILE ; then
      echo "send the link to an existing instance"
      open -n -a Firefox --args -P "$PROFILE" -new-tab "$URL" &
      echo "send the link to a new instance"
      open -n -a Firefox --args -no-remote -P "$PROFILE" -new-instance "$URL" &

    The script uses the ps -A command to check if Firefox with the profile that is requested is available or not. If yes, it uses "-new-tab" command and if not it uses "-new-instance" command. This script can be adapted to work with other operating systems too.

  23. [Firefox Only] When I close my Firefox browser, all the applications that have been executed from this extension also get closed. Why is this happening? Can I somehow keep them even after Firefox is closed?

    This is due to how Firefox handles native applications. Since all native process that gets started by Firefox is considered to be a child process of Firefox, your operating system (Windows only) closes all these child processes once the parent process is killed or closed. There is no simple way to bypass this restriction, however, there is a native program that can be called to change the parent process of a child process. It is called RunFromProcess by nirsoft. You can call this application instead of your native one and ask the RunFromProcess to assign another process for the application to be opened. This way when Firefox is closed, the child process is not being killed since its parent is still alive. Make sure to set a parent that is a persistent process like "explorer.exe" for instance.

  24. Can I make the context menu items to appear on local pages and DATA URI pages (e.g. data:,Hello%2C%20World!)?

    Use <all_urls> keyword as the page pattern for the items that need to be injected on local pages.

  25. Use case: Backup your Firefox profile from a toolbar button

    Here is a small tutorial on how to back up the Firefox profile whenever you needed it into a new dated folder.

  26. Example of how to run a Python script from this extension:

    Create a sample Python script that displays all the input arguments in a notification box and save it locally. Like:

    import sys
    import os
    def notify(title, text):
                  osascript -e 'display notification "{}" with title "{}"'
                  """.format(text, title))
    notify("My Sample Python Script", str(sys.argv))
    Now open the options page and add /usr/bin/python3 as the executable. For the arguments use path_to_the_python_script/sample.py [HREF]. Note that the script path is inserted in the arguments list not in the executable field since the actual executable is python3. You can assign the extension's browser action button (toolbar button) to execute this script. By clicking on the extension's toolbar button, you should get a desktop notification containing the script path and the URL of the active tab.

  27. Is it possible to send a link to an external application by left-clicking on the link?

    As of version 0.4.0, this extension supports a new placement option, which is called "navigation". If the option is checked and one or more wildcard filters are set that match the link pattern, the extension interrupts the normal navigation and instead sends the link to the external application.

  28. I like to use this extension, but my CPU architecture is not supported (the installer fails). Is there any way to install the native client on my machine?

    Head to the official NodeJS website and find the executable that works on your system (for instance, the "node -v" command must return the version). Now download the native client for your operating system and extract it in a local directory. Replace the Node executable with the working one and follow the instruction to install it.

  29. How can I send the output of the pre-script to the external application?

    As of version 0.5.0, you can use document.currentScript.output = "my custom string output"; to extract text content from the pre-script code and use it as the [PRE_SCRIPT] argument. If you need to use this argument in a URL, make sure to convert the output by using encodeURIComponent.

  30. Is it possible to use a keyboard shortcut to run the external command instead of pressing the toolbar button?

    Yes, on Chromium browsers, open "chrome://extensions/shortcuts" in a browser tab and assign a custom shortcut for this extension. On Firefox, open "about:addons" in a browser tab, click on the gear icon, and select the "Manage Extension Shortcuts" button.

  31. Is it possible to run the command assigned to the action button on multiple tabs at once?

    As of version 0.5.1, the extension runs the action button's command on all highlighted tabs in the active window. Use Ctrl + Click or Shift + Click on tabs to highlight them.

Matched Content



Please keep reviews clean, avoid improper language, and do not post any personal information. Also, please consider sharing your valuable input on the official store.

What's new in this version

Change Logs:
    Last 10 commits on GitHub
    Hover over a node to see more details

    Need help?

    If you have questions about the extension, or ideas on how to improve it, please post them on the  support site. Don't forget to search through the bug reports first as most likely your question/bug report has already been reported or there is a workaround posted for it.

    Open IssuesIssuesForks

    Recent Blog Posts on add0n.com