DarkModeBuddy switches your Mac on ambient light, not on the clock
Switch your Mac's system theme based on the ambient light intensity.
At a glance
- What is it?
- DarkModeBuddy is a small Swift background app that reads the Mac's ambient light sensor and switches between light and dark mode when the light level crosses a threshold you set. It needs macOS Catalina and a built-in sensor, and the last push to the repository was on 2026-05-13.
- Who is it for?
- Adopt DarkModeBuddy if you want your Mac to follow the room rather than the clock, and you have a Mac with a built-in ambient light sensor running Catalina or later. Skip it if you rely on external displays with their own sensors, since those are not supported, or if you want the same behaviour through a system setting rather than a background app.
- Can I use it commercially?
- Yes. BSD-2-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 163 days ago.
- What is it written in?
- Mainly Swift, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The gap is that macOS Auto mode follows the time of day
The reason the app exists is stated in the first person in the README, and it is a small but genuinely irritating problem. The built-in Auto mode on macOS is based on time of day, and it will not switch the Mac to Dark Mode while the owner is actively using it, which is a problem for someone who is basically always at the Mac. DarkModeBuddy is the alternative approach: a tiny app that keeps running in the background, reads the ambient light sensor on the Mac, the same sensor macOS uses to adjust screen brightness, and switches the system appearance when the light level crosses the configured value. When the ambient light falls below the threshold the Mac goes to Dark Mode, and when it rises above the threshold it goes back to Light mode. So the trigger is the room you are sitting in, not the hour on the clock, and the appearance change happens while you are working rather than at some scheduled moment you did not choose.
A configurable delay is what stops the flickering
The change is not instantaneous, and the reason is worth spelling out because it is the detail that separates a usable tool from an irritating one. To prevent flickering, the change in ambient light level has to persist for a certain amount of time, and that duration is configurable in the app's settings. Ambient light readings from the sensor are noisy in a way that a clock is not. A person walks past a window, a cloud passes, a desk lamp is switched on, and without a persistence requirement the system would flip appearance several times in a row. Requiring the reading to hold above or below the threshold for a set period turns a stream of noisy samples into a decision. The threshold value and the duration are the two knobs the user actually cares about, and both live in the settings rather than being hardcoded. The screenshot in the repository shows the settings surface, and the app is described as tiny and running in the background, so the configuration is expected to be a one-time setup rather than something you touch daily.
Catalina, a built-in sensor, and no external display support
The compatibility statement is short and has two hard requirements. DarkModeBuddy requires macOS Catalina or later and a Mac with a built-in ambient light sensor. External displays with ambient light sensors are not currently supported, and the wording is careful to say currently. That exclusion is the significant one for anyone with a desk setup, because the MacBook's own sensor is what the app reads, and a separate display sitting alongside it is not a second input to the decision. The other half of the compatibility story is a list of verified models. The list is explicitly non-exhaustive, and it includes MacBook Air models from 2013 and from 2020, MacBook Pro models from 2014 through 2021 including the 16-inch 2019 and 2021 and 13-inch 2018, 2019 and the 2016 four Thunderbolt 3 port model, several Retina 13-inch and 15-inch machines from 2014 and 2015, and two iMacs, the Retina 5K 27-inch 2020 and the 27-inch Late 2012. The guidance for anything newer than the newest entry is that it is likely to be supported as well, which is a reasonable inference given the sensor hardware, but it is an inference and not a verified claim.
A Swift project with a core library, an app target and a vendor directory
The repository layout tells you how the project is put together. There is a `DarkModeBuddy.xcodeproj` at the top, so it is an Xcode project rather than a Swift Package Manager package, which is the normal shape for an app with a bundled app target. The `DarkModeBuddy/` directory is the application itself and `DarkModeBuddyCore/` is a separate core module, so the sensor reading and the appearance switching logic are separated from the user interface. That split is the kind of arrangement that lets the same code run without a UI, which is what you would want if you wanted to drive the same behaviour from a script or a launch agent rather than from the app. The `Config/` directory holds configuration, `Assets/` holds the app icon and the screenshot, and `Vendor/` holds third-party code checked into the repository rather than fetched by a package manager. There is also a `streamlogs.sh` script at the top level, which is a shell script for streaming logs, consistent with a project that expects you to watch its output while developing. The primary language is Swift and the licence is BSD-2-Clause.
How to get it, and what the project does not promise
There is no install command, and the documentation says where to get the app instead. DarkModeBuddy is available for free and is also open source, and if you prefer you can pay any amount you would like in order to support the work. The latest build is always on Gumroad, at the darkmodebuddy.app site, and the README links there. So the distribution is a Gumroad download rather than a package manager entry, and the source in this repository is the reference implementation behind it. Two things the documentation leaves open are worth knowing before you depend on it. There are no GitHub releases, so there is no version history to consult in the repository and no upgrade notes beyond the commits, and the last push to the repository was on 2026-05-13. That is a few months before today, so the tree has been quiet recently, and whether the app is still being developed against new macOS releases is not something the README answers. The pull request invitation is still open, though, with the maintainer saying contributions adding support to hardware that is not currently supported are more than welcome.
Where it is the wrong tool
There is a clear boundary here, and it is hardware. The app reads the ambient light sensor of the Mac itself, so a desktop Mac with no built-in sensor, a Mac with the sensor disabled, or a setup where the screen you actually work on is an external display will not get the behaviour at all. External displays with their own ambient light sensors are explicitly not supported, and the supported model list, while long, is a list of laptops and iMacs rather than a claim about every Mac. The other boundary is philosophical rather than technical. If you want light and dark mode to follow the clock, macOS already does that and you do not need a background app reading a sensor and holding state. And if the flickering problem that motivated the author is not one you have, the app adds a persistent process and a threshold configuration in exchange for nothing. The useful framing is that this is a small, focused utility that solves one specific complaint, with a hard dependency on a piece of hardware Apple does not put in every Mac.
Editorial conclusion
Adopt DarkModeBuddy if you want your Mac to follow the room rather than the clock, and you have a Mac with a built-in ambient light sensor running Catalina or later. Skip it if you rely on external displays with their own sensors, since those are not supported, or if you want the same behaviour through a system setting rather than a background app. Before you commit, confirm your model is on the verified list or close to it, since a model not on the list is only described as likely to be supported, and note that the project has no tagged releases and the last push was on 2026-05-13.
Frequently asked questions
What does DarkModeBuddy do on a Mac?
It runs in the background, reads the Mac's ambient light sensor and switches the system between light and dark mode when the light level falls below or rises above a configured value. The change only happens after the new light level persists for a configurable duration, which is there to prevent flickering.
Which Macs does DarkModeBuddy support?
It requires macOS Catalina or later and a built-in ambient light sensor, and external displays with ambient light sensors are not currently supported. The README lists verified models including MacBook Air and Pro machines from 2013 to 2021 and two iMacs, and says newer models are likely to be supported as well.
How do I download DarkModeBuddy?
The latest build is always on Gumroad at darkmodebuddy.app. The app is free and open source, and the README notes you can pay any amount you would like to support the work.
Is DarkModeBuddy still being developed?
The README asks for pull requests adding support to hardware that is not currently supported, so contributions are invited. The repository has no GitHub releases, and the last push was on 2026-05-13, so the documentation does not state a current development commitment.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/insidegui-darkmodebuddy)Was this useful?