Skip to content

VladislavTsytrikov/frostbyte

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

60 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

FrostByte: Reclaim GBs of RAM on Linux by auto-freezing idle apps

Official Website: vladislavtsytrikov.github.io/frostbyte


FrostByte β€” auto-freeze idle apps, reclaim your RAM

Release Tests License Python GNOME Shell Wayland

Install β€’ Live Monitor β€’ How It Works β€’ Configuration β€’ CLI

FrostByte TUI Demo


The Problem

Modern apps are hungry. Firefox, Slack, VS Code, Spotify sit on 4+ GB of RAM while you're not looking at them. Linux won't reclaim pages that apps are technically "using" just by being alive.

The Solution

FrostByte puts idle apps into cold storage:

  1. Freeze β€” Idle apps above a RAM threshold get SIGSTOP. The kernel instantly reclaims their physical pages.
  2. Thaw β€” Focus or click a frozen window β€” the GNOME extension fires SIGCONT. Instant. Transparent.

Tip

Your system stays snappy, swap stays empty, battery lasts longer.


Features

⚑Instant Wake-upZero-latency thawing via native GNOME Shell extension
β–ˆLive TUIReal-time dashboard β€” frozen apps, candidates, RAM saved
β™»Smart ThawWakes entire process trees including child processes (TUI apps in terminals)
❄Auto-FreezeScans /proc for RAM-heavy apps idle beyond threshold
🎡Audio-AwareSkips freezing apps that are currently playing audio
πŸ“‹Per-App RulesRegex patterns with custom freeze timeouts per application
πŸ””NotificationsDesktop notifications when apps are frozen or thawed
πŸ”„Hot ReloadConfig changes apply instantly β€” no daemon restart needed
πŸ–±Mouse-FriendlyClick frozen windows to thaw, even without focus
βš™Panel IndicatorGNOME top bar snowflake with live frozen count + quick-thaw menu
🌐BilingualEnglish / Russian β€” toggle with L
πŸ“¦Single FileOne Python script. No deps. Daemon + TUI + extension + installer

Install

curl -fsSL https://raw.githubusercontent.com/VladislavTsytrikov/frostbyte/main/install.sh | bash

Note

One command. Downloads a single Python script and runs frostbyte install which sets up the daemon, GNOME Shell extension, and systemd service.

Alternative methods

Direct download:

curl -fsSL https://github.com/VladislavTsytrikov/frostbyte/raw/main/frostbyte -o /tmp/frostbyte
python3 /tmp/frostbyte install

From source:

git clone https://github.com/VladislavTsytrikov/frostbyte.git
cd frostbyte
python3 frostbyte install
Uninstall
frostbyte uninstall          # keeps config
frostbyte uninstall --purge  # removes everything

Live Monitor

frostbyte monitor
Key Action
Up Down Navigate processes
Enter Freeze / Thaw selected
e Exclude from auto-freezing
f / t Quick-search freeze / thaw by name
Tab Switch tab: Frozen / Candidates / Exclusions
L Toggle language (EN / RU)
q Quit

How It Works

flowchart LR
    subgraph daemon [" Daemon (Python)"]
        direction TB
        scan["Scan /proc\ntrack CPU time"]
        freeze["SIGSTOP\nidle app"]
        thaw["SIGCONT\nwake app"]
    end

    subgraph ext [" GNOME Extension (JS)"]
        focus["Window\nfocused"]
    end

    scan -- "idle > N min\nRSS > threshold" --> freeze
    focus -- "$XDG_RUNTIME_DIR/frostbyte-focus" --> thaw

    style daemon fill:#1a1a2e,stroke:#00b4d8,color:#e0e0e0
    style ext fill:#1a1a2e,stroke:#7c3aed,color:#e0e0e0
    style scan fill:#0d1b2a,stroke:#00b4d8,color:#e0e0e0
    style freeze fill:#0d1b2a,stroke:#e63946,color:#e0e0e0
    style thaw fill:#0d1b2a,stroke:#2ec4b6,color:#e0e0e0
    style focus fill:#0d1b2a,stroke:#7c3aed,color:#e0e0e0
Loading

What's in the box:

frostbyte (single Python file)
β”œβ”€β”€ daemon        β€” polls /proc, sends SIGSTOP / SIGCONT
β”œβ”€β”€ TUI monitor   β€” curses dashboard with 3 tabs
β”œβ”€β”€ GNOME ext     β€” embedded JS, tracks focused window PID
└── installer     β€” writes extension + systemd service from embedded resources

Important

Self-coupling β€” the daemon auto-enables the extension on startup. The extension auto-starts the daemon via systemd if not running. They can't get out of sync.

Freeze / thaw in detail

Freeze cycle: the daemon polls /proc every second, tracking CPU time per process. If a process with RSS above the threshold shows no CPU activity for N minutes, it gets SIGSTOP. The kernel reclaims the physical memory pages.

Thaw cycle: the GNOME Shell extension writes the focused window's PID to $XDG_RUNTIME_DIR/frostbyte-focus. The daemon reads this file, finds the frozen ancestor and stopped descendants (for TUI apps inside terminals), and sends SIGCONT.

Process tree awareness: when you focus a terminal, FrostByte thaws both the terminal itself (ancestor search) and any stopped child processes like vim, htop, or mc inside it (descendant search).


Configuration

~/.config/frostbyte/config.json

{
  "freeze_after_minutes": 10,    // idle time before auto-freeze
  "min_rss_mb": 100,             // minimum RSS to consider
  "scan_interval": 30,           // seconds between /proc scans
  "notifications": true,         // desktop notifications on freeze/thaw
  "whitelist": ["chrome"],       // your additions
  "rules": [                     // per-app overrides (regex)
    { "pattern": "firefox", "freeze_after_minutes": 30 },
    { "pattern": "code", "min_rss_mb": 200 }
  ]
}
Option Default Description
freeze_after_minutes 10 Idle time before auto-freeze
min_rss_mb 100 Minimum RSS (MB) to consider freezing
poll_interval 1 Seconds between CPU polls
scan_interval 30 Seconds between full /proc scans
max_freeze_hours 4 Auto-thaw after this many hours
notifications true Desktop notifications on freeze / thaw
whitelist [] Extra process names to never freeze
rules [] Per-app rules (see below)

Note

FrostByte ships with a built-in whitelist (gnome-shell, pipewire, terminals, systemd, etc.). Your whitelist entries are merged on top β€” you only need to add app-specific names.

Per-app rules

Rules let you set custom freeze thresholds for specific apps using regex patterns:

"rules": [
  { "pattern": "firefox",  "freeze_after_minutes": 30 },  // give Firefox more time
  { "pattern": "code",     "min_rss_mb": 200 },           // only freeze VS Code above 200 MB
  { "pattern": "slack|discord", "freeze_after_minutes": 5 } // freeze chat apps faster
]

Each rule supports pattern (regex, case-insensitive), freeze_after_minutes, and min_rss_mb. The first matching rule wins. Unset fields fall back to global defaults.

Audio protection

FrostByte automatically detects apps playing audio via PulseAudio / PipeWire and skips freezing them. No configuration needed β€” if Spotify is playing music, it won't be frozen even if idle.


CLI

frostbyte run             start daemon (foreground)
frostbyte monitor         live TUI dashboard
frostbyte status          show frozen & candidate processes
frostbyte freeze <name>   manually freeze by name
frostbyte thaw [name]     thaw by name (or all)
frostbyte install         install everything
frostbyte uninstall       remove everything

Alternatives

FrostByte Nyrna XSuspender
Wayland yes no no
GNOME 45–48 yes yes yes
Auto-freeze (RAM-aware) yes no no
Instant thaw on focus yes no yes
Child process thawing yes no no
Audio-aware (skip playing) yes no no
Per-app rules (regex) yes no no
Config hot reload yes no no
Desktop notifications yes no no
Zero dependencies yes no yes
TUI dashboard yes no no
Single file install yes no no

MIT License β€’ Made for Linux desktops that deserve better memory management