Sleep Scheduler is a small macOS menu bar app that puts your Mac to sleep and wakes it back up on a weekly schedule.
It is built for always-on Macs that do not need to run all night, such as a Mac mini on a desk, in a home lab, or tucked away as a lightweight server.
- Per-weekday sleep and wake times
- Menu bar only, with no Dock icon
- One-click pause/resume
- Current
pmsetschedule preview - Plain-text event log for launch, sleep, wake, schedule, and clear events
- Native macOS sleep/wake scheduling through
pmset - Automatic replanning on launch, wake, and schedule changes
Sleep Scheduler uses macOS's built-in pmset utility.
When scheduling is active, the app reads your weekly settings, calculates the next sleep/wake window, and installs the appropriate system power event. If every enabled day uses the same times, it uses a repeating pmset schedule. If days differ, it installs the next one-shot pair and rolls the schedule forward after the Mac wakes.
Because changing pmset schedules requires administrator privileges, macOS may ask for your password when the app installs or clears scheduled events.
- macOS 13 or later
- Administrator access when installing or clearing system sleep/wake schedules
- Xcode 15 or later if you want to build from source
The fastest way to try Sleep Scheduler is to download the built DMG from this repository:
- Open
SleepScheduler.dmg. - Drag
SleepScheduler.appintoApplications. - Open Sleep Scheduler from
Applications. - Look for the moon icon in the macOS menu bar.
This DMG is built locally from the repository and is not notarized yet. On first launch, macOS may ask you to confirm that you want to open it.
- Open
SleepScheduler.xcodeprojin Xcode. - Select the
SleepSchedulertarget. - In Signing & Capabilities, choose your development team.
- Build and run with
Cmd+R. - Look for the moon icon in the macOS menu bar.
You can also build, install, and launch a Release copy with:
./run.shThe helper script installs the app to:
~/Applications/SleepScheduler.app
- Click the moon icon in the menu bar.
- Set sleep and wake times for each weekday.
- Uncheck any day you want to leave unscheduled.
- Turn the main toggle on.
- Approve the macOS administrator prompt when scheduling is installed.
The "Current system schedule" section shows the output of:
pmset -g schedSleep Scheduler writes an append-only text log to:
~/Library/Logs/SleepScheduler/events.log
Example:
TIMESTAMP EVENT DETAIL
------------------- --------- ------------------------------------------------------------
2026-04-23 22:59:57 SCHEDULED sleep=04/23/26 23:00:00 wake=04/24/26 05:00:00
2026-04-23 23:00:02 SLEEP System going to sleep
2026-04-24 05:00:14 WAKE System woke up
The app includes buttons to reveal the log in Finder or open it in your default editor.
- Sleep Scheduler clears global
pmsetschedules. Before installing its own schedule, the app runspmset repeat cancelandpmset schedule cancelall. If another tool manages scheduled power events, those events may be removed. - Sleep is not shutdown. The app uses system sleep, not full shutdown. Power draw drops significantly, but the Mac remains resumable.
- Wake depends on macOS and power state. Scheduled wake works best on AC power and can be affected by system settings, hardware support, or macOS power-management behavior.
- Administrator prompts are expected. A future version could use a privileged helper, but this version intentionally keeps the implementation simple and transparent.
Turn the main toggle off in the menu. Sleep Scheduler will clear scheduled power events.
To verify manually:
pmset -g schedTo clear scheduled power events yourself:
sudo pmset repeat cancel
sudo pmset schedule cancelallSleepSchedulerApp.swift: app lifecycle, menu bar status item, popover, sleep/wake observers, and force-sleep timerMenuBarContentView.swift: SwiftUI menu UIScheduleStore.swift: persistent weekly schedule state inUserDefaultsScheduler.swift: planning logic andpmsetintegrationEventLog.swift: append-only event logSleepSchedulerTests: planner tests
Run tests with:
xcodebuild -project SleepScheduler.xcodeproj -scheme SleepScheduler -destination 'platform=macOS' testBuild locally with:
xcodebuild -project SleepScheduler.xcodeproj -scheme SleepScheduler -destination 'platform=macOS' build