A simple command line interface for the Mac App Store. Designed for scripting and automation.
Homebrew is the preferred way to install:
brew install mas
MacPorts works as well:
sudo port install mas
Older macOS Versions
We provide a custom Homebrew tap with pre-built bottles for all macOS versions since 10.11.
To install mas from our tap:
brew install mas-cli/tap/mas
Swift 5 Runtime Support
mas requires Swift 5 runtime support. macOS 10.14.4 and later include it, but earlier releases did not. Without it, running
mas may report an error similar to this:
dyld: Symbol not found: _$s11SubSequenceSlTl
To get Swift 5 support, you have a few options:
- Install the Swift 5 Runtime Support for Command Line Tools.
- Update to macOS 10.14.4 or later.
- Install Xcode 10.2 or later to
Alternatively, binaries are available in the GitHub Releases.
Each application in the Mac App Store has a product identifier which is also used for mas-cli commands. Using
mas list will show all installed applications and their product identifiers.
$ mas list 446107677 Screens 407963104 Pixelmator 497799835 Xcode
It is possible to search for applications by name using
mas search which will search the Mac App Store and return matching identifiers. Include the
--price flag to include prices in the result.
$ mas search Xcode 497799835 Xcode 688199928 Docs for Xcode 449589707 Dash 3 - API Docs & Snippets. Integrates with Xcode, Alfred, TextWrangler and many more. [...]
To install or update an application simply run
mas install with an application identifier:
$ mas install 808809998 ==> Downloading PaintCode 2 ==> Installed PaintCode 2
If you want to install the first result that the
search command returns, use the
$ mas lucky twitter ==> Downloading Twitter ==> Installed Twitter
Please note that this command will not allow you to install (or even purchase) an app for the first time: use the
purchasecommand in that case.
purchasecommand is not supported as of macOS 10.15 Catalina. Please see Known Issues.
$ mas purchase 768053424 ==> Downloading Gapplin ==> Installed Gapplin
Please note that you may have to re-authenticate yourself in the App Store to complete the purchase. This is the case if the application is not free or if you configured your account not to remember the credentials for free purchases.
mas outdated to list all applications with pending updates.
$ mas outdated 497799835 Xcode (7.0) 446107677 Screens VNC - Access Your Computer From Anywhere (3.6.7)
masis only able to install/update applications that are listed in the Mac App Store itself. Use
softwareupdate(8)utility for downloading system updates (e.g. Xcode Command Line Tools)
To install all pending updates run
$ mas upgrade Upgrading 2 outdated applications: Xcode (7.0), Screens VNC - Access Your Computer From Anywhere (3.6.7) ==> Downloading Xcode ==> Installed Xcode ==> Downloading iFlicks ==> Installed iFlicks
Updates can be performed selectively by providing the app identifier(s) to
$ mas upgrade 715768417 Upgrading 1 outdated application: Xcode (8.0) ==> Downloading Xcode ==> Installed Xcode
signincommand is not supported as of macOS 10.13 High Sierra. Please see Known Issues.
To sign into the Mac App Store for the first time run
If you experience issues signing in this way, you can ask to sign in using a graphical dialog (provided by Mac App Store application):
You can also embed your password in the command.
$ mas signin [email protected] 'ZdkM4f$gzF;gX3ABXNLf8KcCt.x.np' ==> Signing in to Apple ID: [email protected]
mas signout to sign out from the Mac App Store.
mas is integrated with homebrew-bundle. If
mas is installed, and you run
brew bundle dump, then your Mac App Store apps will be included in the Brewfile created. See the homebrew-bundle docs for more details.
Over time, Apple has changed the APIs used by
mas to manage App Store apps, limiting its capabilities. Please sign in or purchase apps using the App Store app instead. Subsequent redownloads can be performed with
signincommand is not supported as of macOS 10.13 High Sierra. #164
purchasecommand is not supported as of macOS 10.15 Catalina. #289
accountcommand is not supported as of macOS 12 Monterey. #417
mas sees from the app bundles on your Mac don't always match the versions reported by the App Store for the same app bundles. This leads to some confusion when the
upgrade commands differ in behavior from what is shown as outdated in the App Store app. Further confusing matters, there is often some delay due to CDN propagation and caching between the time a new app version is released to the App Store, and the time it appears available in the App Store app or via the
mas command. These issues cause symptoms like #384 and #387.
Macs with Apple silicon can install and run iOS and iPadOS apps from the App Store.
mas is not yet aware of these apps, and is not yet able to install or update them. #321
When something doesn't work
If you see this error, it's probably because you haven't installed the app through the App Store yet. See #46.
This redownload is not available for this Apple ID either because it was bought by a different user of the item was refunded or cancelled.
mas doesn't work for you as expected (e.g. you can't update/download apps), run
mas reset and try again. If the issue persists, please file a bug. All your feedback is much appreciated!
mas operates via the same system services as the Mac App Store. These exist as separate processes with communication through XPC. As a result of this,
mas experiences similar problems as the pasteboard when running inside
tmux. A wrapper tool exists to fix pasteboard behaviour which also works for
You should consider configuring
tmux to use the wrapper but if you do not wish to do this it can be used on a one-off basis as follows:
brew install reattach-to-user-namespace reattach-to-user-namespace mas install
Build from source
You can build from Xcode by opening the root
mas directory, or from the Terminal:
Build output can be found in the
build/ directory within the project.
The tests in this project are a recent work-in-progress. Since Xcode does not officially support tests for command-line tool targets, all logic is part of the MasKit target with tests in MasKitTests. Tests are written using Quick.