John Jayasankar

JJ-SYS-09Labs · Native macOS6 min read

Daylight: your screen, through the day

Adaptive display lighting for macOS. Warmth and brightness on a schedule you set: gradual, offline, and honest about what it is doing and why.

  • Independent · Labs
  • Shipped · v1.0.0
  • 2026
  • Product, design, and build

Daylight · display schedule

Balanced preset · warmth and brightness decided separately

6 layersone fixed order

Schematic · step values from the Balanced preset · the sentence is one the app writes

Phases1-4 · select to hold

Reading the conceptual interfaceThe Balanced preset stepping from 6500 K by day to 2800 K at 23:30, a six-layer ladder deciding warmth and brightness separately, the sentence Daylight writes for the state, and a readback that separates asked, accepted and confirmed.

What was broken

Most display utilities either fight Night Shift and f.lux silently, claim medical outcomes they cannot prove, or hide what actually changed your screen. I wanted something honest: a schedule that survives time zones and DST, rules that do not discard half the state, and language that admits when macOS did not take the write.

Product decision

Ship a menu-bar app that runs the same schedule engine its website demonstrates. Put every source of control on one printed ladder of six layers, and decide warmth and brightness separately so a rule that only dims cannot discard the schedule’s warmth. Distinguish asked, accepted, and confirmed. Notice competing color-table writers instead of fighting them. Never ask for location, network, or analytics.

Flow

  1. 01ScheduleThrough the day

    Anchors on the clock. Fades in mired. Survives DST and midnight.

  2. 02ExplainName the cause

    Every state has a sentence. Precedence is printed, not implied.

  3. 03ConfirmTrust the readback

    Success from an API is not evidence. Competition is reported.

What it does

  • Shifts warmth and brightness gradually on a schedule you set, from presets Balanced, Subtle, Extra Warm, and Follow the sun
  • Follow the sun uses real sunrise and sunset, computed on your Mac from a place you choose: 101 cities built in, or coordinates
  • Lives in the menu bar: warmth and brightness, every mode, a pause with a duration, and restore, all one click from the icon
  • A pause lasts fifteen minutes, an hour, until the next scheduled change, or until you say otherwise, and tells you when it ends
  • The icon fills in proportion to how warm the setting is, and shows paused and off as distinct shapes rather than colors
  • Schedules travel: Daylight imports the file its website writes, and a link carries a whole schedule to anyone else

Six layers, one fixed order

  • Restored

    Restore normal output. Top of the ladder, overrules everything below.

  • Paused

    Paused until you resume.

  • Manual override

    You reached for the slider.

  • App rule

    An app that needs true color.

  • Workspace

    Where you are working.

  • Schedule

    A schedule, warm by evening. The base layer, if nothing above it speaks.

The highest layer that speaks about a control wins it, and warmth and brightness are decided separately, so a rule that only dims cannot quietly discard your schedule’s warmth. There are no user-assignable priorities: a rules system you can predict beats one you can fully rewire.

It tells you what it is doing

  • Every state has a sentence

    Plain language naming whatever is responsible, written by the same resolver the app runs and checked against it across every combination of the six layers.

  • Three levels of certainty

    What it asked for, what macOS accepted, and what it could read back and confirm. Each display reports which applies. An API returning success is not evidence that anything changed.

  • It notices the competition

    f.lux and Night Shift write to the same color table. Daylight reads back after every write and says so when something else has overwritten it. It will not fight another app, or disable one behind your back.

“Your display is neutral because Colour Work is active for this app. Dimming comes from Balanced.” The app writes sentences like that one for every state.

The details that took the longest

  • Schedules that survive real life

    Daylight-saving changes, time-zone moves, clocks corrected by hand, schedules that cross midnight, night shifts, non-Western weeks, polar day and night. Anchors follow the clock and fades follow elapsed time; a test pins the 23-hour day that once put a schedule an hour out.

  • Fades paced by perception

    Interpolation runs in mired rather than kelvin, because 2000 to 3000 K is a large visible change and 8000 to 9000 K is nearly invisible. A 90-minute ramp writes about once a minute instead of once a frame.

  • Displays remembered properly

    Settings key to a durable display identity, never an index that is reassigned on every dock and wake. Identical monitors that cannot be told apart are reported as ambiguous instead of guessed at.

  • It refuses a suspicious baseline

    Before adjusting anything it validates what normal means for a display. With f.lux running, the table once read back R 1.00 / G 0.36 / B 0.10; a test is pinned to those exact numbers.

  • Getting out of the way

    ⇧⌥⌘R restores normal output from anywhere with no permissions. Quitting restores your displays, and after a crash macOS restores the color table itself, verified under SIGKILL, which is why there is no watchdog helper.

  • Sunrise without a permission prompt

    Solar times are computed on your Mac from a place you choose. It can suggest a starting point from your time zone, never asks macOS where you are, and makes no network requests.

What it does not claim

  • A comfort and routine tool, not a medical one: it does not prevent eye damage, treat eye strain, or improve your sleep
  • No invented circadian, eye-health, or melatonin scores. There is no score of any kind
  • Temperature values are approximate display targets, not measurements of emitted light
  • Brightness is software dimming, not backlight control, and the app says so wherever the word appears
  • It does not calibrate your display or make its color accurate, including in Colour Work mode

It stays on your Mac

Account
None
Network requests
None, ever
Location permission
Never asked
Analytics or telemetry
None
Screen contents, keystrokes, camera
Never touched
Settings
One readable file to export, import, or delete
History
Off by default; switching it off deletes what was kept

If you turn on app rules, Daylight reads the identifier of the frontmost application while deciding what to do, and keeps no record of it.

Two things that are not finished

  • Multi-display on real hardware

    Every path is written and covered against simulated devices, but only one display was attached during development. Daylight --diagnose shows what your own displays report.

  • Backlight over DDC

    External-monitor backlight control has unit-tested packet framing, but the hardware path has never exchanged a byte with a monitor, so it is off by default.

Both are stated on the product’s own site, next to the download.

Why I built it

  • I wanted display comfort without medical theater, scores, or melatonin claims
  • Existing tools either hide failures or overwrite each other quietly. I wanted the opposite
  • The interesting work was the control model: one printed ladder, durable display identity, and honest certainty

How it was built

  • Directed product, design, and implementation in Cursor; ownership and quality judgment are mine
  • Native macOS with no third-party dependencies; it builds with Command Line Tools alone, no Xcode required
  • 263 tests ship with the source, and the website runs the app’s own schedule engine and color math rather than a picture of it
  • Solar position follows the published NOAA algorithm and the color-temperature approximation follows Kim et al. (2002), both implemented from their descriptions
  • Signed v1.0.0, 2.1 MB, for Apple Silicon and Intel on macOS 14 or later. Not notarized yet, so Gatekeeper needs one extra step on first open

Role & tags

Product, design, and build. Designed the schedule model, the six-layer precedence ladder, certainty reporting, and the menu-bar product that stays out of the way.

  • Schedule fades
  • Explainable state
  • Readback certainty
  • No location permission

Impact

A signed macOS app (v1.0.0) with four schedule presets, app rules, pause and restore, durable display identity, and a website that runs the same schedule engine. Built end-to-end with no third-party dependencies. Not notarized yet, so Gatekeeper needs one extra step on first open, and the site says so.

See the product

Daylight is a signed macOS menu-bar app. Its site runs the real schedule engine in the browser, explains Gatekeeper and certainty, and carries the download and the source.

Open Daylight (opens in a new tab)

1-9 beats · j / k · ← → adjacent · y link · b brief