Skip to content
📦 Mac App Store command line interface
Swift Objective-C Shell Ruby Perl
Branch: master
Clone or download
phatblat Merge pull request #241 from mas-cli/readme-tap
💡 Update readme with simpler tap usage
Latest commit b5efb85 Apr 30, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.bundle 💎 Configure bundler Jan 27, 2018
.github 📝 Revise bug report template Apr 6, 2019
Carthage/Checkouts ⬆️ Nimble (7.3.2), Quick (1.3.2), Result (4.1.0) Jan 25, 2019
Homebrew 🍼 Update mas-tap bottle hashes for 1.6.3 Apr 30, 2019
MasKit 🔖 Version 1.6.3 Mar 31, 2019
MasKitTests 🔖 Version 1.6.3 Mar 31, 2019
Package 🐛 Fix paths for building distribution package Jan 4, 2019
PrivateFrameworks 🛸 Update macOS private headers from 10.14.4 Mar 30, 2019
contrib/completion 📺 Add completions for fish shell Jan 31, 2019
docs 🎨 Apply swiftformat Jan 30, 2019
mas-cli.xcodeproj 🔖 Version 1.6.3 Mar 31, 2019
mas.xcworkspace 🗃️ Add misc file refrences Jan 15, 2019
mas 🔖 Version 1.6.3 Mar 31, 2019
script 📜 Purge Carthage cache and run uninstall from bottle script Apr 30, 2019
.editorconfig 🔧 Indent ruby with 2 spaces Oct 21, 2018
.gitignore 🙈 Ignore releases/ Aug 13, 2018
.hound.yml 🙅🏻‍♂️ Disable rubocop checks Jan 22, 2019
.ruby-version Use a newer ruby to keep activesupport happy Sep 17, 2016
.shellcheck.yml 🚨📜 Add shellcheck Jan 16, 2019
.swift-version 🔧 Configure .swiftformat Jan 30, 2019
.swiftformat 🔧 Configure .swiftformat Jan 30, 2019
.swiftlint.yml 🎨 Reformat swiftlint config to match hound’s default Jan 25, 2019
.travis.yml 👷🏻‍♀️ Run tests on travis Dec 20, 2018
Brewfile swiftformat Jan 27, 2019 🔖 Version 1.6.3 Mar 31, 2019 📄 Add GitHub's template contributor covenant code of conduct Jan 12, 2019 📝 Add Contributing Guidelines (#126) Jan 29, 2018
Cartfile Add dependency on Carthage Sep 4, 2018
Cartfile.private Add dependency on Carthage Sep 4, 2018
Cartfile.resolved ⬆️ Nimble (7.3.2), Quick (1.3.2), Result (4.1.0) Jan 25, 2019
Dangerfile ⚠️ Update app and test paths Jan 16, 2019
Gemfile Remove CocoaPods from project Sep 4, 2018
Gemfile.lock ⬆️ danger (5.11.1) Jan 16, 2019
Jenkinsfile 🏷️ Add labels to shell steps Jan 19, 2019
LICENSE Add the license Sep 20, 2015 🎨 Simplify fenced code blocks, use footer link definitions Apr 30, 2019
mas-cli.png Add logo to the readme Sep 25, 2016



A simple command line interface for the Mac App Store. Designed for scripting and automation.

Software License Swift 4.2 GitHub Release Reviewed by Hound Pipeline Status

📲 Install

🍺 Homebrew

Homebrew is the preferred way to install:

brew install mas

☎️ Older macOS Versions

macOS 10.13 (High Sierra) is required to install mas from the core Homebrew formula. We provide a custom Homebrew tap with pre-built bottles for all macOS versions since 10.11.


Just run this command:

brew install mas-cli/tap/mas

🐙 GitHub Releases

Alternatively, binaries are available in the GitHub Releases

🤳🏻 Usage

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 lucky command.

$ 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: it must already be in the Purchased tab of the App Store.

Use 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)

mas is only able to install/update applications that are listed in the Mac App Store itself. Use softwareupdate(8) utility for downloading system updates (like iTunes, Xcode Command Line Tools, etc)

To install all pending updates run mas upgrade.

$ 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

$ mas upgrade 715768417
Upgrading 1 outdated application:
Xcode (8.0)
==> Downloading Xcode
==> Installed Xcode

🚏📥 Sign-in

To sign into the Mac App Store for the first time run mas signin.

$ mas signin
==> Signing in to Apple ID:

⚠️ Due to breaking changes in the underlying API that mas uses to interact with the Mac App Store, the signin command has been temporarily disabled on macOS 10.13+ ⛔. For more information on this issue, see #164.

If you experience issues signing in this way, you can ask to signin using a graphical dialog (provided by Mac App Store application):

$ mas signin --dialog
==> Signing in to Apple ID:

You can also embed your password in the command.

$ mas signin 'ZdkM4f$gzF;'
==> Signing in to Apple ID:

Use mas signout to sign out from the Mac App Store.

🍺 Homebrew integration

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.

💥 When something doesn't work

If you see the error "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.", it's probably because you haven't installed the app through the App Store yet. See #46.

If 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

📺 Using tmux

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 mas.

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 now build from Xcode by opening mas-cli.xcodeproj, 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.

📄 License

mas-cli was created by @argon. Code is under the MIT license.

You can’t perform that action at this time.