projects.akshatkatiyar.com/projects/deckle
A free, open-source macOS menu bar app that lays a subtle paper-grain texture over your entire screen, making long reading and writing sessions feel like paper instead of glass. Inspired by Paperman.
If Deckle makes your screen nicer, a star helps other people find it ⭐
A deckle is the wooden frame used in hand papermaking — it leaves behind the soft, feathered "deckle edge" that marks real handmade paper.
Not a blue-light filter — a matte texture overlay. The grain breaks up the perfectly uniform backlight glow that makes screens feel harsh, while every pixel of your work stays interactive: the overlay is fully click-through.
- 18 paper textures in three families:
- Papers — Soft Wove, Rice Paper, Laid Cotton, Newsprint, Cold Press, Artist Canvas, Felt Side, Frost Glassine
- Warm & tinted — Foxed Amber, Bookcloth, Recycled Kraft, Plum Kozo, Rose Quartz, Sage Press, Nordic Sky
- Dark — Ink Stone, Midnight Slate, Espresso
- Intensity slider (5–45%), plus grain controls — size (Fine → Grainy) and strength, applied to any texture
- Global hotkey — ⌥⌘P toggles the texture from any app
- In-app updates — checks GitHub Releases daily; one-click update, or turn on automatic installs
- Paper Mill — blend your own paper (tint, wash, weave, blotch) and save it; export as JSON, import others', or install shared recipes from the community papers repo
- Per-app rules — hide the paper in chosen apps ("Except…") or show it only in chosen apps ("Only…")
- Automation —
deckle://URL commands work from Shortcuts, Raycast, Alfred, cron, or Terminal - Capture privacy — optionally hide the texture from screenshots and screen recordings while it stays visible to you
- Snooze for 15 min / 30 min / 1 h — auto-resumes
- Multi-monitor support with per-display on/off
- Launch at login
- Click-through & lightweight — the texture is one small tiled image; ~0% CPU at rest
- Menu-bar only: no Dock icon, no windows to manage. The paper-sheet glyph fills in when the texture is on and shows as an outline when it's off.
brew tap yellowfoxh4xor/tap
brew trust yellowfoxh4xor/tap # Homebrew 6+ asks once for third-party taps
brew install --cask deckleGrab the DMG from the latest release, open it, and drag Deckle into Applications. The app is signed with a Developer ID and notarized by Apple, so it launches without any Gatekeeper warning.
Requires Xcode command line tools, macOS 13+:
git clone https://github.com/<you>/deckle.git
cd deckle
make install # builds, copies Deckle.app to /Applications, and launchesOr make run to try it from dist/ without installing. Look for the paper-sheet icon in your menu bar.
- One borderless, transparent
NSWindowper display at.screenSaverwindow level (above the menu bar), withignoresMouseEvents = trueso all input passes through. - The paper grain replicates SVG's
feTurbulence type="fractalNoise" baseFrequency="1.5" numOctaves="3": several octaves of seamlessly tileable value noise are summed, then mapped to translucent dark/light speckles. One 256×256 tile is generated per texture and tiled across the screen by the CoreAnimation render server, so memory stays flat no matter the resolution. - The intensity slider just drives the overlay window's
alphaValue— the texture itself is rendered once and cached. - Energy design: the overlay is retained-mode — after setup, Deckle renders nothing per frame and idles at ~0 wakeups. Scheduled work (update checks) uses
NSBackgroundActivitySchedulerso macOS coalesces wakeups, and slider drags are throttled to ~30 regenerations/second. ~18 MB physical footprint regardless of display count.
Anything that can open a URL can drive Deckle — Shortcuts' "Open URL" action, open in Terminal, Raycast, Alfred, cron:
deckle://on | off | toggle
deckle://snooze?minutes=30 deckle://resume
deckle://texture?name=Ink%20Stone
deckle://intensity?percent=25
deckle://grain?size=2&strength=1.2
Examples: a Shortcuts personal automation "At sunset → Open URL deckle://on" gives you circadian scheduling; "When Work Focus turns on → deckle://texture?name=Soft%20Wove" pairs papers with contexts.
swift run # run unbundled (dev)
make app # build dist/Deckle.app
make cleanNo dependencies; pure Swift + AppKit + SwiftUI.
- Battery auto-disable & Low Power Mode awareness
- Built-in sunset scheduling (today: use a Shortcuts automation with
deckle://on)
The easiest PR: share a paper recipe — 10 lines of JSON, no Swift needed. For code, see CONTRIBUTING.md and the good first issues. Questions and ideas → Discussions.

