This is a macOS screen saver based on the iconic rain of characters and symbols known from the movie The Matrix.
-
Open the latest release and download the versioned
.zipfile from the release assets. -
Double-click the downloaded
.zipfile to extractMatrixScreenSaver.saver. -
In Terminal, run the following commands from the directory that contains the extracted
MatrixScreenSaver.saverfile: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 the opened Wallpaper settings, switch to Screen Saver and select MatrixScreenSaver.
The saver exposes a native Options… sheet. The values are stored with ScreenSaverDefaults.
| Option | Description | Default |
|---|---|---|
| Number scene | Show the startup number scene before continuous rain. | On |
| Twinkle | Turn on/off the twinkling effect. | On |
| Diffuse | Turn on/off the glow effect. | On |
| Character size | Set the character cell width and height in pixels. Example pairs: 8 x 15, 9 x 17, 10 x 19, 11 x 21, 12 x 23, and 13 x 24. |
9 x 17 |
| Rain density | Set the factor for the density of rain drops. A positive number. | 1.0 |
| Frame rate | Set the frame rate per second. A positive number less than or equal to 1000. | 25 |
| Error rate | Set the factor for the rate of character changes. A non-negative number. | 1.0 |
- Native Swift/AppKit screen saver bundle
- Edge-to-edge full-screen saver output, with terminal-style chrome kept in the preview host
- In-process renderer for
rain-foreverwith an optional upstreamnumberintro - Native Options… sheet for Number scene, Twinkle, Diffuse, Character size, Rain density, Frame rate, and Error rate
- Preview app for fast iteration without reinstalling
Sources/MatrixScreenSaver/MatrixScreenSaverView.swift- screen saver view, layout, drawing, and option wiringSources/MatrixScreenSaver/NativeMatrixRenderer.swift- native Matrix scene rendererSources/MatrixScreenSaver/MatrixScreenSaverOptions.swift- options model and native configure sheetSources/MatrixScreenSaver/TerminalSupport.swift- small shared terminal types used by the active rendererScripts/install-saver.sh- shared ditto-based installer used by local installsTools/PreviewHost.swift- local preview host used by./preview.shResources/Info.plist- bundle metadata
- macOS
- Xcode Command Line Tools with
swiftc
Full Xcode is not required.
./build.shThis creates the screen saver bundle:
build/MatrixScreenSaver.saver
build.sh reads the current version from ./VERSION and writes it into the saver bundle metadata.
./preview.shThis rebuilds the bundle, compiles the preview host, and opens the saver in a normal macOS window for quick iteration.
./install.shinstall.sh:
- rebuilds the saver bundle
- strips quarantine from the source bundle and copies it to
~/Library/Screen Savers/MatrixScreenSaver.saver - verifies the installed executable matches the build output
- stops running
ScreenSaverEngine/legacyScreenSaverprocesses so macOS reloads the updated bundle
After installing:
- open System Settings > Wallpaper > Screen saver...
- select MatrixScreenSaver
To relaunch the screen saver host manually:
open -a ScreenSaverEngineThis project started as an attempt to wrap cxxmatrix inside a macOS screen saver.
The current implementation is based on the upstream akinomyoga/cxxmatrix project and keeps its look and scene behavior, but it no longer launches an external terminal process at runtime. The active saver is a native in-process Swift/AppKit renderer because ScreenSaverEngine did not reliably render the external terminal stream.
The active renderer currently ports rain-forever and can optionally start with the upstream number intro.


