v80 (2.2) β 2026-03-07
- Updated to Apple's latest guidelines for a Menu Bar app - resolving several issues:
- App now dismisses when clicking outside of the app
- Icon highlights and dims correctly when using multiple monitors
- Fixes the copy and paste issue when entering a license key
- Potentially other random issues :)
- The Log is now hidden by default (can be enabled in settings)
- Made the menu bar smaller and added a scroll view
v77 (2.1) β 2026-01-30
-
Added a new trigger for when monitors wake up - this allows MDS to search for periphals more often, even if you are already "docked" (i.e, have power or using an external monitor)
- I haven't tested it yet - but this should mean that two iMacs or Mac Mins can now work. All you would need to do is make sure the monitor is off (i.e., computer is locked and looks like it is going to sleep) on both and then on the iMac / Mac Mini you want to use, press the power button on the Mac to wake up the monitor and it will kick off MDS to move the devices to that Mac π₯
- If you have a Mac Mini or an iMac, please send me an email and let me know if this works!
-
Updated the "My Devices" info with a lot more information on how pairing works, what triggers are, what being "docked" means, etc
- Devices will try to pair automatically after a trigger and when "docked" (i.e., when power is connected or an external monitor is connected)
- Triggers include
- When MDS is launched
- When power is connected
- When monitors change
- When monitors wake up
- When the Mac wakes up
-
Improved automatic unpairing to be more intuitive:
-
MDS used to block unpair requests if you were actively "docked" and the computer was not sleeping, but now it will also make sure you have an active display
-
This means if you have two Macs that are both always plugged in (i.e., "docked"), MDS will now be able to still move periperhals to your active computer when the other computer does not have an active display (e.g., the Mac is shut, or monitors are off because computer is locked, or Mac is sleeping).
- If you are "docked" and have an active display, MDS will not automatically unpair from your peripherals (because you are actively using that computer) - unless the other Mac does a manual "Move devices here"
-
Add the ability to turn off sounds and status notifications (if you turn off both, MDS will run silently in the background)
-
Lowered the duration of the "Searching..." notification to be more subtle
v70 (Magic Device Switch 2.0 π₯) β 2025-07-17
-
New Features
-
Completely reimagined & redesigned Bluetooth experience for seamless pairing and unpairing between MacBooks
- My Devices now syncs (eventually) via iCloud! π€οΈ
- Gentle update reminders: updates will be shown in the menu bar with a green dot •
-
Free 30-day trial and license keys to unlock full features
- If you purchased before 2.0, you will receive a free license key in your Gumroad Library or original email receipt (click the link again to access!)
- Each license key supports up to 5 active devices. To switch computers, simply deregister a device and reuse your key β super easy!
-
Other Changes
- Unpairing on sleep has been removed
- Pause logic has been removed
- Programmatic restarting is no longer used
- Hang logic now retries up to 3 times instead of restarting the app (still improving this behavior)
- Lots of clean up
π All builds below were beta releases, incompatible with v70 (2.0) π
v50 β Thursday, Feb 20, 2025
-
Say hello to a brand new URL scheme! Now you can run commands from other places π
-
Here are some examples:
mds://pauseUntilDisconnect?count=1
mds://pauseUntilDisconnect?count=2
mds://pauseUntilDate?date=5PM
mds://pauseUntilDate?date=5%20AM
mds://pauseUntilDate?date=2025-12-31%205:00PM
mds://pauseUntilDate?date=tonight
mds://pauseUntilDate?date=tomorrow
mds://pauseUntilDate?date=tomorrow%20morning
mds://pauseUntilDate?date=tomorrow%20night
mds://pauseUntilDate?date=tomorrow%207pm
mds://cancelPause
mds://pairAll
mds://unpairAll
- You can also query the state (via JSON) of the devices from the terminal by running
defaults read com.jangelsb.mds "mds.watching_devices"
-
You can see this info per device saved in MDS:
uuid: the uuid of the device
name: the name of the device
isWatching: if the user is currently "watching" the device, ie will auto triggers handle this device
isConnected: (if applicable / if mds is currently running, otherwise may be stale) is the device currently connected
isPaired: (if applicable / if mds is currently running, otherwise may be stale) is the device currently paired
batteryLevel: (if applicable / if mds is currently running, otherwise may be stale) what is the latest known battery state
- Changed the build to 0.9 since this app is still technically in beta
- Updated the icon to now be a SwiftUI view and added a new Pause state indicator
- Added a 0.5 delay when restarting MDS, so hopefully it is more reliable and fixes the state where it tries to restart and fails and thefore MDS is no longer running
- Minor clean up
v49 β Saturday, Feb 15, 2025
-
Say hello to keyboard shortcuts! π
-
Available shortcuts
- pairing all devices
- unpairing all devices
- pausing for 1 disconnect
- pausing until 5am
- pausing until 5pm
- canceling a pause
- Each of the shortcut actions now has a sweet new notification popup notifying you of the current state
- Also simplified the wakeup charging triggers by only listening for charging notification changes on wakeup
- Minor clean up
v48 β Saturday, Feb 15, 2025
- Fixed a really bad bug where the app could get stuck in an infinite loop of crashing π (only affected v47!)
- Now before doing any pair all action, it first checks to see if pairing is needed, if not, log it and skip the action
- Changed how the app restarts to be even more reliable
- Minor clean up
v47 β Friday, Feb 14, 2025
- Added support for remote updates via Sparkle β¨
- Added more support for restarting mds if new trigger is after 20 mins
v44 β Thursday, Feb 13, 2025
- Added support for restarting mds if new trigger is after 20 mins
- Added support for auto launching mds on log in
- Update restartMDS to not show the menu automatically if restarted programmatically
v43 β Thursday, March 14, 2024
- Recreate Bluetooth Pairers each time before attempting to pair devices (to hopefully preemptively fix the Bluetooth pairing hanging issue that usually needs a restart after 20 seconds)
- Add the ability to pause for just one disconnect
- Minor clean up
v42 β Tuesday, February 13, 2024
- Update "Helpful Tips" to have a direct link to the System Settings > Battery > options... screen
- Add the ability to open releases page and download the new zip at the same time - support new folder structure
- Update on start logic to correctly set the menu bar icon (if you have a paired device that is not connected at that time)
v41 β Saturday, February 10, 2024
- Move list of unwatched devices to a scroll view
- limit the height of each item
- Fix issue where in "connected" state when there are no watched devices
- Add "outgoing" connection support - "client"
- Add ability to check latest build number on github when manually clicking on menu bar button
- Add the ability to only fetch the latest build after x amount of seconds, currently 1 hour
- Update the UI to show a banner to the release page, if there is new build
v40 β Friday, February 9, 2024
- Fix weird layout issues in Xcode 15
- Add a new "Helpful Tips" view