A native macOS digital-rain screen saver — the iconic Matrix code, rendered in pure Swift. No WebView, no JavaScript, no network.
This screen saver brings two Matrix savers together under one popup.
The Cinematic look is patrickschaper/matrixScreenSaver, a native Swift/AppKit saver with depth layers, glow, glyph morphing and the "Wake up, Neo" intro. On top of it I added a calm Classic look (now the default), modeled on an older web-based Matrix saver I liked, with uniform slow streams, long fade trails and none of the frantic shimmer. Then I wired up the options to switch between the two and to dial the rest in (style, speed, color, no-white-heads, no-block) and did some refinement under the hood. It runs in-process, never touches the network, and is easy on the CPU.
- Download
MatrixScreenSaver.zipfrom the latest release and double-click to extractMatrixScreenSaver.saver. - From the folder containing the extracted file, run:
xattr -dr com.apple.quarantine MatrixScreenSaver.saver
mkdir -p "$HOME/Library/Screen Savers"
rm -rf "$HOME/Library/Screen Savers/MatrixScreenSaver.saver"
ditto MatrixScreenSaver.saver "$HOME/Library/Screen Savers/MatrixScreenSaver.saver"
open "x-apple.systempreferences:com.apple.Wallpaper-Settings.extension"- In Wallpaper settings, switch to Screen Saver and pick MatrixScreenSaver.
That's it. Click Options… to tweak the look.
Why the
xattrstep? The saver is not yet notarized or signed with a paid Apple Developer ID, so macOS quarantines it on download. The command above strips that quarantine flag so Gatekeeper will load the bundle. If you'd like to help fund notarization, see Support below.
- Two looks, one popup. Choose between a calm Classic rain and a layered Cinematic rain (details below).
- Six colors. Green (default), red, blue, amber, cyan, white, each hue-rotated from a tuned xterm-256 green so they stay true to the terminal palette.
- Speed slider. Control how fast the text falls, independent of frame rate.
- CRT scan lines. Optional vertical or horizontal scan-line overlay for that cathode-ray feel.
- Custom glyph set. Swap in your own characters, e.g.
ATGCfor a DNA-helix look. - Multi-display aware. Every screen animates independently, while scripted intros stay in sync across displays.
- Fully offline. No telemetry, no network, no analytics. Ever.
- Native Options sheet. AppKit UI grouped into Look / Cinematic effects / Cinematic intro. Cinematic-only controls auto-disable when Classic is selected, and settings persist via
ScreenSaverDefaults.
My addition: calm and uniform, with slow evenly-paced streams and long fade trails. No per-glyph morphing, no twinkle, no glow, no intro scenes. Modeled on an older web-based Matrix saver, pleasant to leave running for hours.
The color picker applies to both styles (here, cyan):
patrickschaper's original look: depth layers for parallax, twinkling glyphs, soft glow halos, per-glyph morphing, and optional intro scenes, a typed "Neo message" and a cascading number scene, before the rain takes over.
The optional "Wake up, Neo" intro message:
All options live in the native Options… sheet, grouped exactly as they appear in the UI. Cinematic-only controls are greyed out while Classic is selected.
| Option | Type | Default | Description |
|---|---|---|---|
| Style | Classic / Cinematic | Classic |
The overall look. Classic = calm uniform streams; Cinematic = depth, glow, morphing, intros. |
| Color | green / red / blue / amber / cyan / white | green |
Rain color, hue-rotated from a tuned xterm-256 green. |
| White leading characters | toggle | Off |
When on, the leading "head" glyphs fade to white. Off keeps them in the rain color (no white accents). |
| Filled block character (█) | toggle | Off |
When on, the solid block █ can fall with the rain. Off keeps it out of the pool. |
| Speed | slider (0.2×–3.0×) | 1.0× |
How fast the text falls, independent of frame rate. |
| Density | number | 1.0 |
Rain density multiplier. |
| Character size | slider | 16×30 |
Character cell size in pixels. |
| Scan lines | slider + direction | 25%, Vertical |
CRT scan-line intensity (0–100%) and orientation. |
| Frame rate | number (fps) | 25 |
Target frame rate, 1–1000. Honored in both styles. |
| Characters | text | (empty = default) | Custom glyph set, e.g. ATGC. Honored in both styles. |
| Option | Type | Default | Description |
|---|---|---|---|
| Twinkling effect | toggle | On |
Per-glyph twinkle shimmer. |
| Glow effect | toggle | On |
Soft glow halos around glyphs. |
| Error rate | number | 1.0 |
Character-change (morph) rate factor. |
| Option | Type | Default | Description |
|---|---|---|---|
| Neo message · Activate | toggle | Off |
Show the typed "Neo message" intro before the rain. |
| Neo message · Lines | editable list | (built-in default) | The lines typed during the intro (1–10 lines, max 256 chars each). |
| Neo message · Typing speed | number | 1.0 |
Speed multiplier for intro typing. |
| Number scene · Activate | toggle | Off |
Show the cascading startup number scene. |
- macOS Tahoe (26.x) on Apple Silicon (arm64).
- No Xcode required to build (see below).
git clone https://github.com/f17mkx/matrix-saver
cd matrix-saver
bash build.sh && bash install.sh # builds the .saver and installs it
bash preview.sh # fast iteration in a preview window
bash tests.sh # TAP test suite, no Xcode neededSource lives in Sources/MatrixScreenSaver/. The bundle is built directly with swiftc; there is no Xcode project to open.
The native Swift/AppKit screen saver this is built on, and the Cinematic style, are patrickschaper/matrixScreenSaver (MIT). Thanks to Patrick Schaper for the original and its enduring digital-rain feel.
The calm Classic look (modeled on an older web-based Matrix saver), the style switch that brings the two together, the added options (speed, no-white-heads, no-block, reconsolidated settings), and the performance work are by f17mkx.
If this screen saver brightens your idle screen, you can help fund a paid Apple Developer ID (so future releases ship notarized, no xattr step needed) and continued maintenance:
MIT. Forked from patrickschaper/matrixScreenSaver, © Patrick Schaper; modifications © f17mkx. See LICENSE.




