Quiet character animation for terminals and native screensavers, powered by Rust.
Choose Monochrome, Matrix, or Dense Matrix rain, and add your own words in a repeating sequence. Stillterm runs in your terminal or as a native macOS/Windows screensaver, with deterministic seeds and a 30 FPS default. It has no background service or browser runtime.
Engine snapshot: seed 42, four seconds, 96×28 cells. Font and brightness vary by terminal. An animation recording is planned for the first release.
Status: In development; source installation is available now. The Mac build is Developer ID signed, with Apple notarization pending. Public binary releases are not available yet; Windows builds remain unsigned. The Hyprland adapter is experimental. Stillterm provides animation; your operating system controls locking.
Requires Rust 1.88 or newer and a system linker. With rustup, this checkout selects the tested Rust 1.88.0 toolchain.
git clone https://github.com/saeedet/Stillterm.git
cd Stillterm
cargo install --path crates/terminal --lockedThis installs stillterm into Cargo's binary directory. Ensure that directory is
on your PATH. Uninstall with cargo uninstall stillterm.
Signed prebuilt downloads are not available yet. There is no published crates.io package at this stage; use the source installation above.
On macOS, build a universal native screensaver and try it in a window:
rustup target add aarch64-apple-darwin x86_64-apple-darwin
scripts/build-macos.sh
scripts/check-macos.sh --previewOpen target/macos/Stillterm.saver to install. The native options panel includes
all three themes, custom characters, ordered words/phrases, and animation controls.
Build 15 passed local settings, rendering, lifecycle, and memory regression checks
on Apple M3 / macOS 27.0.1. Earlier installed-screensaver checks passed on macOS
14.6.1, including multiple displays and sleep/wake. Longer sessions and a clean-Mac
installation of the final notarized download still need testing.
See macOS setup and distribution.
On Windows, run ./scripts/build-windows.ps1 from PowerShell to build
target/windows/Stillterm.scr. It supports full screen, native settings, and the
embedded Windows preview. The baseline manual checklist passed on Windows 10 and
Windows 11. The latest word-sequence and dense-theme updates have automated checks;
manual Windows testing of those additions is pending. Builds remain unsigned. See setup and the test checklist.
An experimental adapter runs Stillterm in one Foot terminal per monitor, with input dismissal and cleanup on locking or display changes. Install and try it using the Linux guide. Standalone Hypridle integration is optional; Omarchy 4.0.4 supports manual preview only because its current idle service has no suitable replacement interface. Physical Linux desktop validation remains pending.
stillterm
stillterm run --fps 30 --seed 42
stillterm --speed 0.6 --density 0.12
stillterm --config examples/config.toml
stillterm listPress q, Escape, or Ctrl+C to quit. Resize the terminal while it runs.
For development without installation, use cargo run --release -- --seed 42.
Use an ANSI-capable terminal; Windows Terminal is the intended Windows surface.
stillterm --theme matrix
stillterm --config examples/matrix.tomlGreen trails, pale heads, and half-width Katakana mixed with digits and symbols.
The preset uses speed 1.6, density 0.35, and intensity 1.0; explicit file or
CLI settings override those defaults. The original look remains the default and
is available as --theme monochrome.
Engine snapshot using the theme's ideal colors; terminal palettes and fonts vary.
Use a font with half-width Katakana support. For an ASCII fallback, add
--characters '0123456789:<>*+-'. Standard terminal glyphs cannot reproduce the
movie's mirrored characters. True-color terminals show the smoothest green ramp;
256-color and basic-color terminals use reduced palettes. NO_COLOR disables color.
For a fuller screen, choose Dense Matrix in native options or run:
stillterm --theme dense-matrix
stillterm --config examples/dense-matrix.tomlThis preset uses long trails scaled to the grid height and scattered pale heads
(speed 1.2, density 0.95, intensity 1.0). On macOS, three overlapping layers
vary character size, speed, and brightness, with soft distant rain, glowing near
heads, and a fade toward the bottom. Terminal and Windows rendering use one grid.
Native theme selection sets the base character size to 10; adjust it after
selecting the preset.
In a terminal, use the terminal's font settings to fit more columns and rows.
Dense rendering costs more than the sparse presets; see local measurements.
Open the native screensaver's Options/Settings and enter words in
Words / phrases (Windows: Words), separated by commas or line breaks.
For example, FREE, YOUR, MIND shows FREE → YOUR → MIND, then repeats.
Each phrase appears one at a time at a randomly chosen rain position. Choose
Rare, Occasional, or Frequent; leave the field empty to disable it. All themes
support phrases.
In a terminal, including the Linux adapter:
stillterm --theme matrix --words 'FREE,YOUR,MIND' --word-frequency frequent
stillterm --config examples/words.tomlTOML files also accept an array: words = ["FREE", "YOUR", "MIND"].
Blank entries are ignored; phrases keep their input order, including repeats.
Words stay fixed vertically in a column. As the falling head passes each letter,
it lights up and stays bright: F, FR, FRE, then FREE. After the final letter
lights up, the letters fade in the same order from top to bottom. The surrounding
rain continues normally.
The first attempt is after roughly 3–5 seconds, then waits for a suitable stream; speed and density affect the reveal. After the last letter fades, pauses are 4–7 seconds (Frequent), 12–20 seconds (Occasional), or 30–50 seconds (Rare). Phrases taller than the current grid are skipped. Up to 16 phrases of 64 printable, single-column characters are supported; spaces create gaps. Zero density disables both rain and words. The text stays in local settings and is not sent to a service.
Settings apply in this order: built-in defaults, an explicitly supplied TOML file, then command-line overrides. The selected theme supplies defaults for omitted visual settings. Files must be UTF-8 TOML, no larger than 64 KiB. No configuration file is written automatically.
These settings configure the terminal and Linux adapter. The macOS and Windows screensavers use their own Options/Settings panels and per-user preferences; changing a CLI file does not change either native screensaver.
| Setting | Default | Accepted values |
|---|---|---|
effect |
"rain" |
rain |
theme |
"monochrome" |
monochrome, matrix, dense-matrix |
fps |
30 |
Integer, 10–60 |
speed |
1.0 |
0.1–4.0 |
density |
0.18 |
0.0–1.0; stream activation probability |
intensity |
0.7 |
0.0–1.0 |
characters |
"0123456789.:+*" |
1–256 printable, single-column characters |
seed |
42 |
Unsigned 64-bit integer |
words |
"" |
Ordered text separated by commas/line breaks, or a string array; up to 16 × 64 characters |
word_frequency |
"occasional" |
rare, occasional, frequent |
See the example configuration or stillterm --help.
The numeric and character defaults in the table describe the monochrome theme.
ASCII is the most portable character set. Wide, combining, control, and
ambiguous-width characters are rejected. Nonempty NO_COLOR disables color;
the monochrome theme otherwise uses a detected grayscale or basic-color palette.
| Surface | Status |
|---|---|
| macOS terminal | Tested locally on Apple Silicon, including PTY lifecycle checks |
| Windows terminal | Cross-checked for compilation; native CI configured; interactive testing pending |
| Linux terminal | Cross-checked for compilation; native CI and PTY checks configured |
macOS .saver |
Build 15 checked locally on Apple M3; earlier installed checks on macOS 14.6.1; notarized download pending |
Windows .scr |
Baseline tested on Windows 10/11; latest phrase/dense additions await manual testing; unsigned |
| Hyprland / Hypridle | Experimental adapter; automated lifecycle tests; desktop acceptance pending |
| Omarchy 4.0.4 | Manual preview path; automatic idle replacement unsupported |
CI checks the workspace and macOS bundle, plus Linux launcher and terminal lifecycle tests. The optional Linux adapter provides desktop integration around the terminal executable. See platform research and acceptance checks.
stillterm-engine owns a character grid, seeded rain state, and fixed simulation
steps. stillterm owns the terminal, configuration loading, timing, and input.
The renderer compares presented cells and writes changed runs. The engine has no
OS or graphical-framework dependencies. Engine and CLI crates forbid unsafe Rust;
the macOS bridge isolates the documented C interface.
On the initial Apple M3 benchmark, the CLI used less than 1% of one CPU core at 30 FPS in a drained pseudo-terminal. This excludes terminal-emulator rendering; see measurements and reproduction steps.
For the boundaries and determinism contract, read architecture. To extend the engine, read adding an effect.
cargo test --workspace --all-targets --locked
cargo fmt --all --check
cargo clippy --workspace --all-targets --locked -- -D warningsContributing covers platform checks, visual changes, and bug reports. See the development changelog for implemented changes and remaining limits. Licensed under MIT.