Business and Enterprise include help deploying MacVisor through your MDM: email support with your MDM's name and what you're setting up. This page covers what you can set up ahead of time, the steps for Jamf Pro, Kandji and Intune, and what users still do themselves.
Before you start
| You need | Why |
|---|---|
| Apple silicon Macs with macOS 27 | MacVisor's requirements |
| Macs enrolled in your MDM by Automated Device Enrollment, or with the user's approval | macOS takes the Full Disk Access and background-items profiles only from such an MDM |
| A license key | One Business key covers every Mac your subscription does |
MacVisor in /Applications on each Mac | The network helper installs only from a copy that only an administrator can change, and the Full Disk Access profile names that path |
| Step | How | What users see without it |
|---|---|---|
| Install the app | A DMG, a ZIP or a package, depending on your MDM | — |
| Approve background items | Managed Login Items profile | Allow in the Background, and an administrator's password for the network helper |
| Full Disk Access (optional) | Privacy (PPPC) profile | Prompts for Desktop, Documents, Downloads and other volumes as VMs use them |
| Activate the license | Script run by your MDM | Enter License Key |
| Updates and versions (optional) | Managed preferences profile | Update notices from MacVisor |
| Inventory (optional) | Two scripts | — |
| Local Network | Can't be pre-approved | Two Local Network prompts on first use |
Downloads:
- macvisor-background-items.mobileconfig
- macvisor-full-disk-access.mobileconfig
- macvisor-updates.mobileconfig
- macvisor-activate-license.sh
- macvisor-inventory-version.sh
- macvisor-inventory-license.sh
The profiles are unsigned. Upload them to your MDM as custom configuration profiles, scoped to the Macs (device or system level, not a user), and let it sign and deliver them.
Install the app
MacVisor is notarized by Apple and signed with the Developer ID of ScaleNinja Software LLP (team VXNWQ9H93X). Each version is published in two forms holding the same MacVisor.app:
| Form | Address | What's in it |
|---|---|---|
| DMG | https://scaleninja.com/download/macvisor/MacVisor-<version>.dmg | The app, plus a link to Applications, the EULA and a Buy link, for installing by hand |
| ZIP | https://scaleninja.com/download/macvisor/releases/MacVisor-<version>.zip | The app alone, at the top of the archive |
Replace <version> with a version from the changelog, such as 27.2.0. What to give your MDM:
| MDM | Use | Why |
|---|---|---|
| Intune | The DMG, as a macOS app (DMG) | Intune copies the .app from the disk image to /Applications |
| Kandji | The ZIP, as a Custom App of type ZIP, unzipped to /Applications | Kandji's disk-image type expects a DMG that holds only the app |
| Jamf Pro | A package you build | Jamf Pro installs a DMG by its folder layout, so a drag-to-Applications DMG would put the app at the top of the disk |
| Mosyle and others | The DMG or the ZIP, whichever your MDM installs to /Applications | — |
For Jamf Pro, package the app with Jamf's Composer: install MacVisor on a Mac you package on, drag MacVisor.app from /Applications into Composer's sidebar, check that the path shows /Applications/MacVisor.app, and build it as a PKG.
Approve background items
MacVisor runs a background service for each user and a network helper for the whole Mac, both registered from inside the app. Without approval, each user is asked to turn MacVisor on in System Settings → General → Login Items & Extensions, and the network helper needs an administrator's password.
macvisor-background-items.mobileconfig approves them ahead of time. It's a Managed Login Items payload (com.apple.servicemanagement) with one rule:
| Rule type | Value | Covers |
|---|---|---|
| Team identifier | VXNWQ9H93X | com.scaleninja.macvisor.service (the background service, a launch agent) and com.scaleninja.macvisor.adminhelper (the network helper, a launch daemon), and MacVisor itself if a user chooses to open it at login |
With it in place, the first launch registers both without asking the user or an administrator, and users can't turn them off in System Settings while the profile is installed.
Full Disk Access (optional)
Without Full Disk Access, macOS asks before a VM uses a folder in Desktop, Documents or Downloads, or a disk on another volume, and asks again for the VM runner. See Install for what each permission is for.
macvisor-full-disk-access.mobileconfig grants it with a Privacy Preferences Policy Control payload (com.apple.TCC.configuration-profile-policy, service SystemPolicyAllFiles) to the two parts of MacVisor that open those files:
| Part | Identifier | Type |
|---|---|---|
| Background service | /Applications/MacVisor.app/Contents/Helpers/MacVisorService | path |
| VM runner | com.scaleninja.macvisor.runner | bundle ID |
Each entry carries MacVisor's code requirement (signed by ScaleNinja Software LLP, team VXNWQ9H93X, with a Developer ID certificate), so the grant applies only to genuine MacVisor builds and survives updates. Skip this profile if you'd rather users answer each prompt themselves.
Activate the license
Users can paste the key into Settings → License, or your MDM can activate it with macvisor-activate-license.sh.
MacVisor holds its license for the whole Mac in its network helper, and the mvz command reaches it through the background service of the user logged in at the Mac. So the script, run by your MDM as root, runs mvz license activate as that user, with the key on standard input. Before that it checks mvz license: if the Mac already has this key, it says so and changes nothing.
- The key, in this order:
LICENSE_KEYat the top of the script (for Kandji and Intune, which pass no parameters), Jamf Pro's parameter 4,MACVISOR_LICENSE_KEYin the environment, or the first argument. Anyone who can read the script in your MDM can read the key. - When: at login and on a recurring check-in. Until MacVisor has been opened on the Mac, so that its background service is registered, the script exits with status 4. With nobody logged in, it exits with status 1. Your MDM runs it again later, and once the Mac has the key the script just confirms it.
- Who can release it: an administrator, or the account that activated the license. When the script activates as a standard user, that user can deactivate the license on that Mac; other standard users can't.
- The licensing server: MacVisor checks the license with
keys.scaleninja.comevery few days, and a Mac keeps working for 30 days without reaching it. See Activation and checks.
mvz license on the Mac, or Settings → License, shows the edition, the masked key and the last check.
Updates and versions
MacVisor checks for updates once a day and, unless a user turns on automatic updates, lets them choose when to install. macvisor-updates.mobileconfig sets two managed preferences in the com.scaleninja.macvisor domain:
| Key | Value | Effect |
|---|---|---|
SUEnableAutomaticChecks | false | No automatic update checks |
SUAutomaticallyUpdate | false | No automatic downloads (the default) |
To keep Macs on one version, install the profile and deploy the version you chose, from its DMG or ZIP above. To move them on, deploy the next version the same way. Users can still choose Check for Updates…, but installing an update over an app your MDM installed asks for an administrator's password, so standard users stay on your version.
Before replacing the app, have users shut their VMs down rather than suspend them: see Updates.
Secure by default
What a new install does before anyone changes a setting:
- AI agents: each VM is closed to agents until a user opens it, at View or Control, and no agent can open one itself. See AI agents and MCP.
- Shared folders: none of the user's folders is shared with a VM until they choose one.
- Clipboard: shared both ways, but the Mac's clipboard goes to a VM only while its window is active, and what's copied in a VM reaches the Mac only when the user leaves its window. Users can turn it off for each VM. See Clipboard.
- Port forwards: a VM's own forwards listen only on this Mac (
127.0.0.1and::1). - USB devices: a device goes to a VM only when a user attaches it.
- No analytics: MacVisor sends no analytics, crash reports or usage data. A problem report leaves the Mac only when the user sends it. See the privacy policy.
These are defaults that users can change. Settings an administrator can lock through your MDM are on our roadmap.
Step by step
Jamf Pro
- App: build a package with Composer (see Install the app), add it to Packages, and install it with a policy.
- Profiles: in Configuration Profiles, Upload each
.mobileconfigand scope it to the Macs. - License: add
macvisor-activate-license.shunder Scripts, with parameter 4 labelled "License key". In a policy that runs it, put the key in parameter 4, trigger it at Login and Recurring Check-in, and set the frequency to Ongoing. - Inventory: add each inventory script as an Extension Attribute with the Script input type, as it is.
Kandji
- App: add a Custom App, choose the ZIP type, upload
MacVisor-<version>.zip, and set the unzip location to/Applications. - Profiles: add a Custom Profile for each
.mobileconfig. - License: add a Custom Script with
macvisor-activate-license.sh, with your key inLICENSE_KEY, set to run repeatedly, such as daily.
Microsoft Intune
- App: add a macOS app (DMG), upload
MacVisor-<version>.dmg, and givecom.scaleninja.macvisoras the app's bundle ID. Set Ignore app version to Yes, unless you keep Macs on one version. - Profiles: create a macOS configuration profile from the Custom template for each
.mobileconfig, on the device channel. - License: add a macOS shell script with
macvisor-activate-license.shand your key inLICENSE_KEY. Set Run script as signed-in user to No, the frequency to daily, and a few retries. - Inventory: add each inventory script as a macOS custom attribute of type String, with
FORMAT=plainat its top.
Check it worked
- Profiles: System Settings → General → Device Management lists them, as does
sudo profiles show -type configuration. - Background items:
sudo sfltool dumpbtmlists MacVisor and its items, with identifiers ending incom.scaleninja.macvisor.serviceandcom.scaleninja.macvisor.adminhelper, teamVXNWQ9H93X, and a disposition ofenabled, allowed. In MacVisor, Assistant → Setup Assistant… shows Allow in the Background as done. - Full Disk Access: the Setup Assistant shows it as done once a VM has started, because the background service and the VM runner each check it for themselves.
- License:
mvz license, run as the user. - Updates:
defaults read "/Library/Managed Preferences/com.scaleninja.macvisor"showsSUEnableAutomaticChecks = 0.
Inventory
Two scripts report MacVisor in your MDM's inventory. Both print a Jamf Pro <result>; set FORMAT=plain at the top for an Intune custom attribute.
| Script | Prints | Notes |
|---|---|---|
| macvisor-inventory-version.sh | MacVisor's version, such as 27.2.1, or Not installed | Reads the app's Info.plist |
| macvisor-inventory-license.sh | The license, such as licensed, subscription, 5 Macs, lease until 2026-12-05 | Asks mvz license --json as the user logged in at the Mac. Says Nobody logged in without one, and Unknown before MacVisor has been opened |
In the license line, the tier is one-time for Pro, subscription for Business and Enterprise, or trial. The lease date is how long the Mac keeps working without reaching the licensing server.
Network access
If your Macs reach the internet through a proxy or a firewall with an allow-list, MacVisor needs these hosts:
| Host | What for | When |
|---|---|---|
keys.scaleninja.com | License activation and checks | At activation, then every few days; at least once every 30 days |
scaleninja.com | Update checks and downloads | Daily, unless turned off |
updates.cdn-apple.com | macOS installers | When a user makes a macOS VM |
cloud-images.ubuntu.com, cloud.debian.org, download.fedoraproject.org, dl.rockylinux.org, repo.almalinux.org, yum.oracle.com, cloud.centos.org, download.opensuse.org, dl-cdn.alpinelinux.org, download.freebsd.org | Cloud images | When a user makes a VM from one. Fedora's and openSUSE's hosts send downloads on to mirrors |
fedorapeople.org | Windows drivers | When a user makes a Windows VM |
github.com, raw.githubusercontent.com, and the githubusercontent.com hosts GitHub sends downloads to | Tools MacVisor installs in VMs: OpenSSH, WinFsp and usbip-win2 for Windows; nerdctl and k3s for Linux | When a VM first needs them. MacVisor keeps a copy on the Mac |
The VMs themselves reach the internet through the Mac, and need what any computer running their system does: Linux VMs their distribution's package repositories (and download.docker.com for Docker on Rocky Linux, AlmaLinux, Oracle Linux and CentOS Stream), macOS and Windows VMs Apple's and Microsoft's services.
AI sandboxes, if you use them, also reach the coding agent's installer (claude.ai, opencode.ai, aider.chat or github.com), your model provider's API through MacVisor's gateway on the Mac (api.anthropic.com, api.openai.com or openrouter.ai), and huggingface.co when a user downloads a local model. See AI sandboxes.
Standard users
MacVisor works for standard (non-administrator) accounts. With the profiles above:
- Installing: your MDM installs the app; nobody needs an administrator's password for the background items.
- Everyday use: making and running VMs, snapshots, custom networks and their firewall rules don't need an administrator.
- Administrator only: creating or deleting VLAN interfaces, and installing updates over the app your MDM installed.
- The license: the account that activated it, and administrators, can deactivate it. See Activate the license.
What users still do
- Local Network. macOS asks twice the first time MacVisor reaches a VM's address, once for the app and once for the VM runner. MDM has no setting for it. Users allow both. See Local Network.
- Microphone, the first time a VM set to use the Mac's microphone records from it. Every new Windows VM is, until its microphone is turned off in VM Settings → Sound.
- USB devices passed to a VM, which macOS may ask the user to allow.
- Their first VM, unless you create VMs for them with
mvzfrom a script run as the user.
Removing MacVisor
- On each Mac, as an administrator, choose Assistant → Uninstall MacVisor…. It removes the app, the background service, the network helper and its firewall rules, the command links and MacVisor's support files, and deactivates the license if the Mac is online. VMs and templates stay. See Uninstall.
- In your MDM, remove the profiles and the app's deployment, so it isn't installed again.
Removing only the app leaves the background items and support files in place, and the license assigned to the Mac. For a removal you can script, email support.
License admin and support
Business and Enterprise include license admin by support: email support@scaleninja.com from the address on the order, with the key's last four characters, to:
- move the key between Macs beyond the usual limit of 3 moves in 30 days,
- get the list of Macs the key is active on,
- add Macs during the year.
Business support answers by email, with a first reply within 2 business days (IST), and no SLA. Enterprise support follows your agreement. See Pricing and licensing.
DeltaSync