I couldn't find a good Matrix rain screensaver, so I made one myself.
No one should be paying for shitty screensavers in 2026!
Glass mode with blur, running across two monitors while a video plays underneath.
MatrixRainer is a Matrix digital rain screensaver for Windows 11, built as a
tiny tray app instead of a legacy .scr file. It sleeps in the notification
area doing almost literally nothing, and when your mouse and keyboard have
been idle for a configurable time (default 60 minutes) it covers your
monitors with rain. Any input dismisses it instantly.
- Film-style rain - mirrored half-width katakana with a hot white-green leading glyph, fading trails, and random glyph mutation, on a fixed grid like the movies
- Multi-monitor - detects every display with its resolution and orientation (landscape and portrait both supported), runs on all of them or just the ones you pick, each with its own random rain, started in sync
- Glass mode - see your live desktop through the rain, with an adjustable darkness tint and optional frosted blur
- GPU composited - rain frames are presented through a DirectComposition swapchain; nothing about the animation depends on what is happening behind it
- Gamer safe - idle detection is a passive kernel counter read, not an input hook, so it cannot add input latency and gives anti-cheat nothing to object to; it also refuses to trigger over fullscreen D3D apps
- Tiny - a single ~58 KB executable, no runtime to install, no dependencies, ~28 MB RAM idling in the tray
- Grab the zip from the latest release
- Unzip anywhere and run
MatrixRainer.exe - A green M appears in the system tray - right-click it:
- Start now - start the rain immediately (any input stops it)
- Settings... - everything configurable lives here
- Pause idle detection - temporarily disarm
- Exit
On first run it registers itself to start when you sign in (toggle in
Settings). Settings are stored in %APPDATA%\MatrixRainer\settings.ini.
| Setting | What it does |
|---|---|
| Idle minutes | How long mouse and keyboard must be untouched before the rain starts (1-1440) |
| Monitors | Detected displays with resolution and orientation; check the ones you want, none checked means all |
| Solid / Glass | Classic black background, or see the live desktop through the rain |
| Darkness | How dark the glass tint is (15% = nearly clear, 95% = nearly black) |
| Blur | Frosted-glass blur of the desktop behind (DWM accent, may cost fps) |
| Frame rate | Animation rate, 10-60 fps |
| Glyph size | Grid cell size in pixels, 12-32 |
| Start with Windows | Per-user Run registry entry, no admin needed |
Idle detection. A single GetLastInputInfo read - a passive kernel
counter that covers mouse and keyboard system-wide - polled adaptively: up to
30 seconds between checks while the deadline is far away. There are no
SetWindowsHookEx hooks, no raw input registration, no process access.
While the rain is not showing, the app is one sleeping process.
Rendering. The simulation keeps a glyph grid per monitor; each column has
a bright head that sweeps down and leaves a fading trail, and lit glyphs
occasionally mutate. Glyphs are pre-rendered once (MS Gothic half-width
katakana, mirrored like the film, glow baked in) into premultiplied pixel
tiles. Each frame, a small software blitter blends only the changed cells
into a memory canvas (~1 ms per frame), and just the changed region is
uploaded into a premultiplied-alpha DXGI flip-model swapchain bound to the
window through DirectComposition. DWM composites that texture over the
desktop on the GPU. The window has no redirection bitmap
(WS_EX_NOREDIRECTIONBITMAP), so no part of the pipeline is CPU-composited -
glass transparency is native alpha blending, not a layered-window trick.
Dismissal failsafes. Idle time is re-read immediately before the rain appears; it will not appear over fullscreen D3D apps, presentations, or the lock screen; after any dismissal, fresh input is required before the countdown re-arms; while active, a 100 ms system-wide watchdog plus per-window handlers close everything on any input on any monitor; a render failure closes the windows rather than leaving them stuck.
Measured with the built-in harness (MatrixRainer.exe --render-diag,
1920x1080 window, 60 fps target) against the naive GDI+ implementation this
project started with:
| Renderer | Idle desktop | Busy desktop (video + terminals) |
|---|---|---|
GDI+ DrawImage (old) |
37 ms/frame, ~25 fps | 996 ms/frame, 1.2 fps |
| Software blitter + DirectComposition (current) | 1.0 ms/frame | 13-16 ms/frame, ~34 fps |
The old approach is kept in the source only as a fallback for machines without a working Direct3D 11 stack.
.\build.ps1That's the whole build. It uses the C# compiler that ships inside every
Windows installation (.NET Framework 4.8), so there is nothing to install -
no SDK, no NuGet, no Visual Studio. tools\make-icon.ps1 regenerates the
icon. Diagnostics: --diag (monitors and idle state),
--render-diag (renderer benchmark); both write to %TEMP%.
