Nexa MemKeeper icon

Nexa MemKeeper

v0.7.1

An ultra-lightweight Windows memory watcher and cleaner that stays in the tray

User Guide Download GitHub Docs (Wiki)

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.

  1. Installer (recommended) — install with winget install SosomLab.NexaMemKeeper or choco install nexa-memkeeper above, or download NexaMemKeeper-<version>-setup.exe from 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.
  2. Portable — extract NexaMemKeeper-<version>-portable.zip and run NexaMemKeeper.exe; that is all. Settings are created in data\settings.ini next 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.
  3. If your browser blocks exe downloads, download NexaMemKeeper-<version>-setup.zip, which wraps the same installer. The release assets include SHA256SUMS.txt, so you can check integrity with Get-FileHash <file> -Algorithm SHA256.
  4. 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\…\Run cannot 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

Main window — Task Manager-style classification, grouping, and header sorting
Main window — Task Manager-style classification, grouping, and header sorting
Top 5 popup — by private working set, auto-refresh every 2 seconds
Top 5 popup — by private working set, auto-refresh every 2 seconds
Live search — name, PID, and window title
Live search — name, PID, and window title
Settings — Auto Cleanup, Cleanup Areas, and General
Settings — Auto Cleanup, Cleanup Areas, and General

Key Features

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-memkeeper 0.7.0 package could not be parsed by PowerShell 5.1 because of a syntax error, so choco uninstall always 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 as 0.7.1. If you installed with Chocolatey, upgrade with choco 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) and SosomLab.NexaMemKeeper.Portable (PR #443190) merged 2026-09-29; Chocolatey nexa-memkeeper and nexa-memkeeper.portable 0.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) and SosomLab.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-memkeeper approved 09-02 and nexa-memkeeper.portable approved 09-03. However, the approved installer was the 08-11 resubmission, which lacked the uninstall script fixed on 08-21; this was corrected in 0.7.1.
  • Added 4 winget install and choco install cards 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:1500 and 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) and nexa-memkeeper.portable 0.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, and SHA256SUMS.txt — are attached automatically.

Distribution

  • winget 2-package setup completed — SosomLab.NexaMemKeeper (installer, machine scope) / SosomLab.NexaMemKeeper.Portable (portable, user scope, nexamemkeeper alias). 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 of 0.6.1 and 0.6.2 was 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 in 0.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 NtQuerySystemInformation call (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.ini next 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.