Nexa MemKeeper
v0.7.1An ultra-lightweight Windows memory watcher and cleaner that stays in the tray
Available on every desktop OS
Install
Windows
winget — installer (recommended)
winget install SosomLab.NexaMemKeeper Catalog v0.7.1 = latest (PR #443189 merged 2026-09-29). The installer is registered at machine scope, which adds a Start menu entry and an entry in the uninstall list. Upgrade: winget upgrade SosomLab.NexaMemKeeper · Uninstall: winget uninstall SosomLab.NexaMemKeeper
winget — portable
winget install SosomLab.NexaMemKeeper.Portable Catalog v0.7.1 = latest (PR #443190 merged 2026-09-29). As a user-scope portable, it registers a nexamemkeeper alias on PATH.
Chocolatey — installer
choco install nexa-memkeeper v0.7.1 approved. The previously approved 0.7.0 had a bug in its uninstall script that made choco uninstall fail, so if you installed 0.7.0, upgrade with choco upgrade nexa-memkeeper. Upgrade: choco upgrade nexa-memkeeper · Uninstall: choco uninstall nexa-memkeeper
Chocolatey — portable
choco install nexa-memkeeper.portable v0.7.1 approved. ⚠️ Unlike Nexa Dir, the portable package name uses dot notation (.portable). ⚠️ Uninstalling removes the whole tools folder, including data\settings.ini next to the exe — if you need to keep your settings, use the installer.
- Installer (recommended) — install with
winget install SosomLab.NexaMemKeeperorchoco install nexa-memkeeperabove, or downloadNexaMemKeeper-<version>-setup.exefrom GitHub Releases and run it. A directly downloaded installer needs no administrator privileges (it is a per-user install, so no UAC prompt appears) and installs to%LOCALAPPDATA%\Programs\Nexa MemKeeper(winget and Chocolatey install at machine scope to Program Files). The setup wizard asks about auto-start, checked by default (winget and Chocolatey install with it turned off), and you can turn it on or off later from the main window (list window) under the [Settings] menu → [Start with Windows]. Your settings remain after uninstalling, so they come back when you reinstall. - Portable — extract
NexaMemKeeper-<version>-portable.zipand runNexaMemKeeper.exe; that is all. Settings are created indata\settings.ininext to the exe, so if you move the whole folder, your settings move with it (you can carry it on a USB drive). If the folder is read-only, it falls back automatically to%LOCALAPPDATA%\NexaMemKeeper. It starts with auto-start turned off, which you can turn on from the main window's [Settings] menu. - If your browser blocks exe downloads, download
NexaMemKeeper-<version>-setup.zip, which wraps the same installer. The release assets includeSHA256SUMS.txt, so you can check integrity withGet-FileHash <file> -Algorithm SHA256. - Administrator privileges are optional — observation, the list, and cleanup all work with standard privileges, and elevating raises the amount reclaimed about 2.6 times (measured: standard +322MB vs administrator +847MB). When you need it, use [Restart as Administrator] in the tray menu (1 UAC prompt); to launch elevated from startup,
HKCU\…\Runcannot do it, so you must register it in Task Scheduler with "Run with highest privileges".
Both channels contain the same single NexaMemKeeper.exe, so the program is identical whichever you choose. System requirements: Windows 10 / 11 (x64) — no .NET or Visual C++ Redistributable required (it uses nothing beyond the OS's built-in DLLs). Because there is no code signing certificate yet, a SmartScreen warning ("Unknown publisher") may appear — continue with "More info → Run anyway". Package manager channel status (measured 2026-10-12): ✅ All four packages are published at v0.7.1. winget SosomLab.NexaMemKeeper (installer · PR #443189) and SosomLab.NexaMemKeeper.Portable (portable · PR #443190) were merged on 2026-09-29, and Chocolatey nexa-memkeeper and nexa-memkeeper.portable 0.7.1 were also approved. The previously approved Chocolatey installer (0.7.0) was the 08-11 submission, which lacked the uninstall script fixed on 08-21, so choco uninstall failed; this was corrected in v0.7.1. Real-machine verification of the installer's install-and-remove round trip is still in progress — if you run into a problem, use the portable ZIP. For detailed usage, see the user guide.
Shows what is taking up memory using the same criteria as Task Manager, and reclaims it when you need it. On the principle that the tool itself must be the lightest thing running, it holds to an exe of 0.67MB and about 1.3MB of idle resident memory, measured at every milestone. (Windows 10/11)
Screenshots
Key Features
- Usage display in the tray The current memory usage % is drawn directly on the icon, in colors for Normal, Warning (80%), and Danger (90%). Hovering shows a tooltip with used/total, the amount reclaimed by the last cleanup, and the time elapsed since.
- Top 5 popup Left-click the tray icon to see the 5 processes using the most memory, by private working set. It refreshes automatically every 2 seconds, and you can right-click an item to trim or end just that process.
- Task Manager-style process list Divides processes into 3 sections — Apps / Background processes / Windows processes — and combines the same program into one entry with its memory summed. Names appear as Sublime Text rather than sublime_text.exe, drawn from the same source as Task Manager (FileDescription).
- 3 views · header sorting Switch between Group by App (default), Process Tree (parent-child), and Flat List. Click a header to sort; showing threads and hiding pseudo-processes (Memory Compression and others) are view options.
- Live search (name, PID, window title) Typing in the search box at the bottom filters instantly while keeping the structure. If a window title matches, only the app row and that window remain; in the tree, if a child matches, its ancestors remain too so the hierarchy is visible.
- Safe ending and trimming Trim (reclaim memory only), End Process, End Process Tree, and End Thread are available by right-click. Ending is a 2-step process that requests a normal shutdown and waits 3 seconds before forcing termination, and essential system processes are excluded outright at the list stage.
- 6 selectable cleanup areas Turn on working set trim, priority 0 standby purge, full standby purge, modified page flush, system working set, and page combining individually. Aggressive areas that discard the file cache are off by default, and the settings window describes their side effects.
- Auto cleanup that acts only when needed Triggered by a usage threshold (90% by default) and Windows low-memory notifications, with a cooldown (5 minutes by default) to prevent repeated runs. Periodic cleanup is off by default based on measured evidence, and the settings window states why it is not recommended.
- Watchlist targeted trim Write an entry such as chrome.exe:1500 and that process is quietly trimmed only when its private working set exceeds the threshold. Other apps' caches are left alone, and when it is off the processes are not even enumerated, so the idle cost is 0. (Currently set in the settings file — a list editing UI is in preparation.)
- Auto cleanup deferred during full screen Auto cleanup is postponed while a game or presentation is full screen. It uses the same criteria Windows uses to decide whether to show notifications, and does not block cleanups you run yourself or the hotkey.
- Cleanup history (history.csv) Each cleanup records the time, trigger (manual, hotkey, threshold, periodic, low memory), amount reclaimed, and decrease in Active. Notifications disappear after 6 seconds, but the record stays for you to examine later, and only the most recent 200 lines are kept so the file does not grow without limit.
- Remembers window position and column widths Drag a header border to adjust column widths; the window position, size, and view mode are remembered for the next launch. Before restoring, it checks that a monitor actually exists at that position, so unplugging an external monitor does not leave the window off-screen.
- Honest reporting of reclaimed amounts Measurements showed that the increase in available memory alone could not explain even 1/5 of what actually happened, so notifications also show the amount apps actually released (decrease in Active). If measurement fails, it is omitted rather than filled in with an estimate.
- Self-minimization budget gate CI and the packaging script check idle resident RSS ≤5MB, a single exe ≤3MB, 0 external DLLs, and idle CPU ~0% by the same criteria, and exceeding them stops packaging altogether. Measured: exe 0.67MB, idle 1.3MB, enumerating 500 processes in 7.5ms.
- Separate resident shell and on-demand workers What remains in the tray is a light shell that only observes and triggers; the list window and cleanup are handled by separate processes. When they finish, the OS reclaims all of that memory, so resident memory returns to its original level even after you use these features.
- Global hotkey · multiple languages · truly portable Assign your own global hotkey that runs cleanup from any window, and choose the UI language from English (default), Korean, or following the OS. Settings are saved to data\settings.ini next to the exe, so moving the whole folder moves your settings too (falling back to %LOCALAPPDATA%\NexaMemKeeper if that location is not writable).
About
Nexa MemKeeper stays in the Windows system tray, continuously watches memory, and reclaims memory that is no longer needed to increase what is available. Built with pure Rust + direct Win32 calls, with no managed runtime (.NET) and no UI framework, it runs as a single exe with no external DLLs.
Its identity is "minimizing the tool's own footprint", because a tool meant to manage memory defeats its own purpose if it eats into memory. Idle resident RSS ≤5MB, a single exe ≤3MB, and 0 external DLLs are set as a budget gate, measured at every milestone, and nothing that exceeds them gets merged. The measured values are an exe of 0.67MB (v0.7.1) and 1.34MB of idle resident memory (v0.7.0).
The structure splits into a resident shell and on-demand workers. What always stays in the tray is a light shell that only observes and triggers; the process list window and the actual cleanup run in separate processes that exit when done. When they finish, the OS reclaims all of that memory, so resident memory returns to its original level even after you use these features.
There are four screens: a tray icon with the usage % drawn on it, a Top 5 popup that opens on left-click, a process list (the main window) that classifies and groups processes using the same criteria as Task Manager, and a settings window that holds Auto Cleanup, Cleanup Areas, and General in one place. In the list you can search live by name, PID, and window title, and choose a process, tree, or thread to end, or reclaim memory only.
Reclaiming puts safety first. There are six cleanup areas (working set trim, priority 0 standby purge, full standby purge, modified page flush, system working set, page combining); areas with side effects are off by default, and the settings window describes those side effects. System and protected processes are excluded outright at the list stage, so mistaken actions on them are impossible, and ending a process requests a normal shutdown and waits 3 seconds before moving on to forced termination.
This tool does not claim that "cleaning memory makes your PC faster." A controlled experiment showed that periodic cleanup did not help performance — half of the removed working set came back within 14 seconds and 96% within 4 minutes (because processes were actually using those pages), and cleaning every 60 seconds increased the free memory figure by 688MB while making app launches 4.3% slower and file reads 12.6% slower. To answer the objection "didn't you only measure when there was plenty of room?", it was measured again under memory pressure, and the conclusion was the same (app launch +7.0%, file read +14.4%). That is why periodic cleanup is off by default, and the settings window also labels it "Not recommended".
Instead, the features expanded in the direction those measurements pointed. The real problem is usually one or two apps whose memory has ballooned, so if you write an entry such as chrome.exe:1500 in the watchlist, only that process is quietly trimmed when it exceeds the threshold — other apps' caches are left alone, so there is none of the cost that global cleanup pays. Auto cleanup defers itself while a game or presentation is full screen (cleanups you run yourself still run), and each cleanup records the time, trigger, and amount reclaimed in history.csv so you can examine them later.
For the same reason, the reporting of reclaimed amounts in notifications was also revised. The commonly used "increase in available memory" misses what trimming pushes out and could not explain even 1/5 of what actually happened. Notifications now also show the amount apps actually released (e.g. 935MB reclaimed · apps released 5519MB). The value of this tool lies in observation (the list, Top 5, selective ending), on-demand cleanup at the moment you need it, and the narrowly targeted watchlist.
It is distributed through 2 channels, installer and portable, and both installer and portable packages are registered on winget and Chocolatey, so you can install it with a one-line command. Settings and data are created in the data\ folder next to the exe, and move to %LOCALAPPDATA%\NexaMemKeeper if that location is not writable. Under the PolyForm Noncommercial 1.0.0 license, personal and non-commercial use is free; commercial use requires a separate paid license (contact [email protected]).
Release Notes
v0.7.1 2026-09-29 A patch with no change in app behavior — fixes the Chocolatey installer's uninstall failure and re-releases on all channels.
Fixed
- Fixed Chocolatey installer uninstall failure — the uninstall script in the approved
nexa-memkeeper0.7.0 package could not be parsed by PowerShell 5.1 because of a syntax error, sochoco uninstallalways failed. The fix made on 08-21 was never resubmitted and so was missing from the approved package, and because an approved version cannot be re-uploaded, it was released as0.7.1. If you installed with Chocolatey, upgrade withchoco upgrade nexa-memkeeper. - The portable package and winget are not affected by this problem (winget uses the installer's own uninstaller).
Distribution
- All four packages updated to 0.7.1 — winget
SosomLab.NexaMemKeeper(PR #443189) andSosomLab.NexaMemKeeper.Portable(PR #443190) merged 2026-09-29; Chocolateynexa-memkeeperandnexa-memkeeper.portable0.7.1 approved. - The app code is the same as 0.7.0; only the version information changed. Measured: exe 0.67MB · 57 tests passed.
Distribution channels 2026-09-03 No change in app version (the executable is still v0.7.0) — 2 winget packages merged and 2 Chocolatey packages approved, opening up one-line installation.
Distribution
- First winget listing —
SosomLab.NexaMemKeeper(installer) andSosomLab.NexaMemKeeper.Portable(portable) 0.7.0 were merged on 2026-09-01 (submitted 08-11 · 21 days · via human review for a first-time contributor). - First Chocolatey approval —
nexa-memkeeperapproved 09-02 andnexa-memkeeper.portableapproved 09-03. However, the approved installer was the 08-11 resubmission, which lacked the uninstall script fixed on 08-21; this was corrected in0.7.1. - Added 4
winget installandchoco installcards to the installation guide. Because the app is unsigned, the SmartScreen warning may still appear.
v0.7.0 2026-08-08 In the direction the effectiveness measurements pointed — watchlist targeted trim, full-screen deferral, cleanup history, and honest reporting of reclaimed amounts.
Added
- Watchlist targeted trim — write an entry such as
chrome.exe:1500and only that process is quietly trimmed when it exceeds the threshold. It targets just the apps that have actually ballooned, without the cost global cleanup pays by stripping other apps' caches too. When it is off the processes are not even enumerated, so the idle cost is 0, and it respects a per-process cooldown and the protected list. (Currently set in the settings file — a list editing UI is in preparation.) - Auto cleanup deferred during full screen — auto cleanup is postponed while a game or presentation is full screen. It uses the same criteria Windows uses to decide "is it OK to show a notification now". Cleanups you run yourself and the hotkey are not blocked, because they are intentional actions.
- Cleanup history — each cleanup records the time, trigger, amount reclaimed, and decrease in Active in
history.csv, which you open in the main window under [Memory] > [Cleanup History…]. The trigger is recorded as manual, hotkey, threshold, periodic, or low memory so you can interpret it later. Only the most recent 200 lines are kept. - Remembers window position, size, and view mode; adjustable column widths — drag a header border to change a column width, saved the moment you release it. Before restoring the window, it checks that a monitor actually exists at that position, so unplugging an external monitor does not leave the window off-screen.
Improved
- Notifications also show the amount apps actually released — the previous "increase in available memory" figure missed what trimming pushes out and could not explain even 1/5 of what actually happened. Notifications now show both numbers, as in
935MB reclaimed · apps released 5519MB. When the two values are close, it does not list both, and if measurement fails it does not fill in an estimate. - Periodic cleanup item in the settings window shows why it is not recommended — "Not recommended — apps take it back within 14 seconds." The option was not removed, because it is better to choose knowing the reason.
Measurement
- Re-measured under high pressure — to answer the objection "didn't you only measure when there was plenty of room?", it was measured again with memory pressure applied. The conclusion was the same — app launch 341 → 365ms (+7.0%), file read 40.3 → 46.1ms (+14.4%). Reclaiming itself was large even under pressure (Active −5.8GB), but it did not translate into speed.
- The first measurement was discarded because the pressure eased within 1~2 minutes (the holding process touched only the first byte of each chunk). Only the values re-measured after fixing the touch method were kept, and true thrashing at the scale of hundreds of MB could not be sustained with this setup, so it is recorded as unverified.
- No defaults needed changing — periodic cleanup off, aggressive areas off, and the 90% threshold already match this conclusion.
Distribution
- 2 Chocolatey packages registered —
nexa-memkeeper(installer) andnexa-memkeeper.portable0.7.0 were uploaded and are awaiting moderation. - First 2 winget PRs submitted — #413829 (installer) and #413830 (portable). Neither channel is approved yet, so one-line installation is not open yet.
- Measured: exe 0.64MB · idle resident RSS 1.34MB · 0 external DLLs · 57 tests passed.
v0.6.2 2026-08-07 Fixed automatic attachment of the 4 release assets and prepared the winget portable package.
Fixed
- The installer ZIP was missing from the release — the packaging script created it, but that line was absent from the workflow's attachment list (
0.6.1). Now all 4 — installer exe, installer ZIP, portable ZIP, andSHA256SUMS.txt— are attached automatically.
Distribution
- winget 2-package setup completed —
SosomLab.NexaMemKeeper(installer, machine scope) /SosomLab.NexaMemKeeper.Portable(portable, user scope,nexamemkeeperalias). Chocolatey follows the same layout with 2 packages. They were split because a single winget package cannot hold both an installer and a portable. - No change in app behavior — after
0.6.0, the purpose of0.6.1and0.6.2was to verify the packaging pipeline and correct it.
v0.6.1 2026-08-07 A release to verify the packaging pipeline — the app behaves the same as v0.6.0.
Distribution
- The first release to verify automated packaging and attachment in GitHub Actions. This version did not have the installer ZIP (
-setup.zip) attached, which was corrected in0.6.2.
v0.6.0 2026-08-07 First public release — from the tray-resident shell to the process list, settings, and 2 distribution channels.
Added
- Tray-resident shell — an icon with the usage % drawn on it (color levels at 80/90%), a tooltip with usage and the last cleanup, and a right-click menu (Clean Now, Show List, Settings, auto-start, Restart as Administrator, Exit). The icon is restored when Explorer restarts.
- Top 5 popup — left-click the tray icon. Shows the top 5 by private working set, refreshes every 2 seconds, and lets you trim or end by right-clicking an item. Enumeration takes a single
NtQuerySystemInformationcall (7.5ms for 500 processes). - Process list (main window) — the same classification as Task Manager (Apps/Background/Windows) and grouping, display names (
Sublime Text), 3 views (Group by App, Process Tree, Flat List), header click sorting, a thread display option, and ending processes, trees, and threads. - Live search — filters instantly by name, PID, and window title while keeping the structure (if a window title matches, the app row + that window; in the tree, ancestors too). Collapsed groups are expanded while searching and return to their collapsed state when you clear the search.
- Cleanup engine — areas ①~⑥ selected individually. Working set trim and priority 0 standby purge (on by default) / full standby purge, modified page flush, system working set, and page combining (off by default, with side effects described).
- Auto cleanup — usage threshold (90% by default), Windows low-memory notification, periodic cleanup (off by default), and cooldown (5 minutes by default). Cleanup results are reported in a notification that disappears on its own after 6 seconds.
- Settings window · global hotkey · multiple languages — three groups (Auto Cleanup, Cleanup Areas, General) in one small window. Press your own combination to assign a global hotkey that runs "Clean Now" from anywhere, and choose the UI language from English (default), Korean, or following the OS.
- 2 distribution channels — installer (Inno Setup, per-user install, program list registration, auto-start question checked by default) and portable ZIP. Both channels contain the same single exe, and settings are saved to
data\settings.ininext to the exe in either case. - 7-page user Wiki published — features, cleanup areas, settings, installation, architecture, and troubleshooting + screenshots. Available from the "Docs (Wiki)" button at the top.
Measured
- All budget gate items passed — exe 0.64MB (≤3MB) · idle resident RSS 1.30MB (≤5MB) · 0 external DLLs (OS in-box only) · portable ZIP 356KB · 55 tests passed.
- Resident memory returns to its original level when feature windows close — opening the popup raises it to 6.94MB, and closing it brings it back to the idle level. This comes from the structure where separate processes handle heavy work and the OS reclaims all of it when they exit.
- 1 cleanup, measured — with administrator privileges, trimming 466 processes gave +847MB; with standard privileges, 115 processes gave +322MB. Administrator privileges are optional, and elevating raises the amount reclaimed about 2.6 times.
Notice
- There is no code signing certificate yet — directly downloaded files may trigger a SmartScreen warning ("More info → Run anyway"). If your browser blocks the exe, use
-setup.zip. - winget and Chocolatey registration is in the preparation stage — the manifests are in the repository, but they have not gone through community review, so one-line installation is not open yet.
Terms & Policies
No terms or policy documents are registered.
Contact: [email protected]