A dead-simple macOS app to clean your MacBook screen and keyboard.
Screen goes full black (or white, red, green, blue) at maximum brightness so you can spot every smudge. Keyboard is completely locked so you can wipe without triggering random shortcuts.
- Full-screen cleaning mode — solid color fills the entire display, including under the notch
- Max brightness — automatically cranks brightness to 100% to reveal smudges, restores your original level on exit
- Keyboard lock — all keyboard input is suppressed via a system-level event tap
- Color cycling — click anywhere to cycle through black → white → red → green → blue (different colors reveal different types of marks)
- Hold to unlock — hold
fn+Returnfor 7 seconds to exit (progress bar shows countdown) - Cleaning timer — subtle elapsed time display in the corner
- Instructions fade-out — on-screen hints disappear after 5 seconds
- Unlock sound — audible "Glass" feedback when you unlock
- macOS 14 (Sonoma) or later
- Xcode Command Line Tools (
xcode-select --install)
git clone https://github.com/fexxdev/Wipe.git
cd Wipe
make installThis builds a release binary, packages it into Wipe.app, signs it with an ad-hoc signature, and copies it to /Applications.
To just build without installing:
make bundle # creates Wipe.app in the project directory
make run # builds and opens the appWipe needs Accessibility permissions to lock your keyboard. macOS will prompt you the first time, but if you need to do it manually:
- Open System Settings
- Go to Privacy & Security → Accessibility
- Click the + button (you may need to unlock with your password)
- Navigate to
/Applications/Wipe.app(or wherever you placed it) and add it - Make sure the toggle next to Wipe is ON
Without Accessibility access the app will launch, but the keyboard won't lock during cleaning — the "Start Cleaning" button stays disabled until permissions are granted.
If you run via swift run during development, you'll need to grant access to your Terminal app (or iTerm, Warp, etc.) instead.
- Launch Wipe from Applications (or
make run) - Click Start Cleaning
- The screen goes full-screen black at max brightness
- Clean your screen and keyboard
- Click anywhere to cycle through colors and spot different marks
- When done, hold
fn+Returnfor 7 seconds — a green progress bar appears at the bottom - The app unlocks, plays a sound, restores your brightness, and returns to the home screen
swift build # debug build
swift run # build and run (debug)
make bundle # release .app bundle
make clean # remove build artifactspip3 install Pillow
python3 scripts/generate_icon.pyWipe collects completely anonymous usage stats purely for fun — we just like seeing how much collective screen-cleaning the community does.
What's collected (when enabled):
- A launch counter (no device ID, no IP, no fingerprinting)
- Cleaning session duration
What's never collected:
- Personal information of any kind
- Device identifiers or IP addresses
- Anything that could identify you
You can disable analytics entirely from the Stats panel (click the chart icon in the app). When disabled, zero network requests are made.
The stats are visible to everyone in the app's "Community" section — total launches, active users today, and global cleaning time across all Wipe users.
| Component | What it does |
|---|---|
KeyboardManager |
Creates a CGEvent tap at the session level to intercept and suppress all keyboard events. Monitors for the fn + Return unlock combo. |
BrightnessManager |
Uses the private DisplayServices framework (loaded via dlopen) to save, maximize, and restore screen brightness. Fails gracefully on unsupported displays. |
AppState |
Central state management — coordinates cleaning mode, timer, color cycling, and keyboard/brightness managers. |
CleaningView |
Full-screen SwiftUI view with color fill, fade-out instructions, timer, and unlock progress bar. |
MIT