Skip to content

mas-cli/mas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

mas

current release version supported OS: macOS 10.15+ license: MIT language: Swift 6.0 build, test & lint status dependencies status

mas is a command-line interface for the Mac App Store that is designed for scripting & automation.

📲 Installation

🔮 macOS 10.15 (Catalina) or newer

🍺 Homebrew Core formula

Homebrew is the preferred way to install:

brew install mas

🔌 MacPorts

MacPorts is an alternative way to install:

sudo port install mas

🧮 macOS 10.11 (El Capitan) - 10.14 (Mojave)

🍻 Custom Homebrew tap

The mas custom Homebrew tap provides pre-built bottles for all macOS versions since 10.11 (El Capitan).

The newest versions of mas, however, are only available for macOS 10.15+ (Catalina or newer).

To install mas from the custom tap:

brew install mas-cli/tap/mas

🐙 GitHub Releases

Alternatively, binaries & sources are available from GitHub Releases.

🕊 Swift 5 runtime support

mas requires Swift 5 runtime support. macOS 10.14.4 (Mojave) & newer include it, but earlier releases do not. Without it, running mas might report errors similar to:

dyld: Symbol not found: _$s11SubSequenceSlTl

To get Swift 5 support on macOS versions older than 10.14.4 (Mojave), you can:

🤳 Usage

🪪 App IDs

Each application in the Mac App Store has a unique integer app identifier (ADAM ID) & a unique text app identifier (bundle ID). mas commands accept either form of app ID as arguments.

mas search & mas list can be used to find the ADAM IDs of apps.

Alternatively, to find an app's ADAM ID:

  1. Find the app in the Mac App Store
  2. Select Share > Copy Link
  3. Extract the ADAM ID from the URL.

🛍 Info from the Mac App Store

The commands in this section do not require you to be logged into an Apple Account, neither for your macOS user nor for the Mac App Store.

mas search

mas search <search-term> searches by name for applications available from the Mac App Store.

Providing the --price flag includes each app's price in the output.

$ mas search Xcode
497799835 Xcode
688199928 Docs for Xcode

mas lookup

mas lookup <app-id> outputs more detailed information about an application available from the Mac App Store.

$ mas lookup 497799835
Xcode 16.0 [Free]
By: Apple Inc.
Released: 2024-09-16
Minimum OS: 14.5
Size: 2.98 GB
From: https://apps.apple.com/us/app/xcode/id497799835?mt=12&uo=4

📚 Info from your local app library

All the commands in this section require you to be logged into an Apple Account for your macOS user.

mas list

mas list outputs all the applications on your Mac that were installed from the Mac App Store.

$ mas list
497799835 Xcode       (15.4)
640199958 Developer   (10.6.5)
899247664 TestFlight  (3.5.2)

mas outdated

mas outdated outputs all applications installed from the Mac App Store on your Mac that have pending updates.

$ mas outdated
497799835 Xcode (15.4 -> 16.0)
640199958 Developer (10.6.5 -> 10.6.6)

Run mas update to install pending updates.

⬇️ Installing apps

All the commands in this section require you to be logged into an Apple Account in the Mac App Store.

Depending on your Apple Account settings, you might need to re-authenticate yourself in the Mac App Store to perform a get, install, lucky, or update, even if you are already signed in to an Apple Account in the Mac App Store.

mas get

mas get <app-id>… installs free applications that you haven't yet gotten/"purchased" from the Mac App Store.

The purchase alias is currently a misnomer, because it currently can only "purchase" free apps. To purchase apps that cost money, purchase them directly in the Mac App Store.

$ mas get 497799835
==> Downloading Xcode
==> Installed Xcode

mas install

mas install <app-id>… installs apps that you have already gotten or purchased from the Mac App Store. Providing the --force flag re-installs the app even if it is already installed on your Mac.

$ mas install 497799835
==> Downloading Xcode
==> Installed Xcode

mas lucky

mas lucky <search-term> installs the first result that would be returned by mas search <search-term>. Like mas install, mas lucky can only install apps that have previously been gotten or purchased.

$ mas lucky Xcode
==> Downloading Xcode
==> Installed Xcode

🆕 Upgrading apps

All the commands in this section require you to be logged into an Apple Account in the Mac App Store.

mas only installs/updates applications from the Mac App Store.

Use softwareupdate(8) to install system updates (e.g., Xcode Command Line Tools, Safari, etc.)

mas update

mas update updates outdated apps installed from the Mac App Store. Without any arguments, it updates all such apps.

$ mas update
Upgrading 2 outdated applications:
Xcode (15.4) -> (16.0)
Developer (10.6.5) -> (10.6.6)
==> Downloading Xcode
==> Installed Xcode
==> Downloading Developer
==> Installed Developer

Updates can be performed selectively by providing app IDs to mas update.

$ mas update 715768417
Upgrading 1 outdated application:
Xcode (15.4) -> (16.0)
==> Downloading Xcode
==> Installed Xcode

🪪 Mac App Store account management

All the commands in this section interact with the Apple Account for which you are signed in to the Mac App Store. These commands do not interact with the Apple Account for which your macOS user is signed in.

mas signin

⛔ The signin command is not supported on macOS 10.13 (High Sierra) or newer. On those macOS versions, sign in via the Mac App Store instead (see the known issue).

On macOS 10.12 (Sierra) or older, mas signin <apple-id> signs in to the specified Apple Account in the Mac App Store.

$ mas signin [email protected]
Password:

Providing the --dialog flag signs in using a graphical dialog provided by Mac App Store.

mas signin --dialog [email protected]

You can also embed your password in the command.

mas signin [email protected] MyPassword

mas signout

mas signout signs out from the current Apple Account in the Mac App Store.

🧩 Integrations

🍻 Homebrew Bundle

If mas is installed:

  • brew bundle dump includes installed Mac App Store apps in the generated Brewfile.
  • Homebrew Bundle commands will process Mac App Store apps included in a Brewfile.

See the Homebrew Bundle documentation for more details.

⚙️ Topgrade

If mas is installed, running Topgrade updates installed Mac App Store apps.

⚠️ Known issues

💥 Broken Apple private frameworks

mas uses multiple undocumented Apple private frameworks to implement much of its functionality.

Over time, Apple has silently changed these frameworks, breaking some functionality, including:

  • ⛔ The signin command is not supported on macOS 10.13 (High Sierra) or newer. #164
  • ⛔ The account command is not supported on macOS 12 (Monterey) or newer #417

⏳ Eventual consistency

The Mac App Store operates on eventual consistency.

The versions seen by various parts of mas or the Mac App Store might be inconsistent for days (#384 & #387).

📱 iOS & iPadOS apps

Apple Silicon Macs can install iOS & iPadOS apps from the Mac App Store.

mas does not yet support such apps (#321).

📺 tmux

mas depends on the same XPC system services as the Mac App Store.

mas thus experiences similar problems as the pasteboard when running inside tmux.

This wrapper allows pasteboard & mas to work inside tmux.

tmux can be configured to always use the wrapper.

Alternatively, the wrapper can be used on a one-off basis:

brew install reattach-to-user-namespace
reattach-to-user-namespace mas install

🤷 Undetected installed apps

mas 2.0.0+ sources data for installed Mac App Store apps from macOS's Spotlight Metadata Server (aka MDS).

You can check if a Mac App Store app is properly indexed in the MDS:

## General format:
$ mdls -rn kMDItemAppStoreAdamID <path-to-app>
## Outputs the ADAM ID if the app is indexed
## Outputs nothing if the app is not indexed

## Example:
$ mdls -rn kMDItemAppStoreAdamID /Applications/WhatsApp.app
310633997

If an app has been indexed in the MDS, the path to the app can be found:

mdfind 'kMDItemAppStoreAdamID == <adam-id>'

If any of Mac App Store apps are not indexed, the MDS can be enabled/rebuilt for all file system volumes:

sudo mdutil -Eai on

❗ Troubleshooting

🚫 Redownload not available

If the following error occurs, you probably haven't yet gotten or purchased the app from the Mac App Store (#46).

This redownload is not available for this Apple Account either because it was bought by a different user or the item was refunded or canceled.

❓ Other issues

If mas doesn't work as expected (e.g., apps can't be installed/updated), run mas reset, then try again.

If the issue persists, please file a bug.

All feedback is much appreciated!

🏗 Building

mas can be built in Xcode or built by the following script:

Scripts/build

Build output can be found in the .build folder in the project's root folder.

🧪 Testing

Tests are implemented in Swift Testing.

Tests can be run by the following script:

Scripts/test

📄 License

Code is under the MIT license.

mas was originally created by Andrew Naylor (@argon on GitHub / @argon on X).