Repository navigation
Releases: ersinkoc/RustWTM
Releases · ersinkoc/RustWTM
Release list
v0.20.2
Fixed
wtmcommands and Telegram's /kill, /info, /suspend and /wait match
process names case-insensitively beyond ASCII (çizimisÇizim.exe), as
/find already did.wtm app-limit setandremovefind an app's limit whatever the case of
its name; a limit set under another case used to be added a second time,
and its budget ignored.- Settings and the Overview's protection levels change a configuration that
writes its tables inline (governor = { enabled = true }) or with dotted
keys; before, the change was refused, and a level button did nothing. - Game mode no longer starts for an ordinary maximized window (a browser, an
editor) on a monitor without a visible taskbar: with the taskbar hidden
automatically, or on a second monitor, such a window covered the whole
monitor and counted as full screen.
v0.20.1
Fixed
- A rule or kill-list entry that ends or suspends
*.exe,**,*.*or
match.path = "*"is refused like*: such a rule ended every
unprotected program as it started. A command line (or a narrower name or
path) still picks programs out, e.g.*.exewithcmdline = "vitest".
A configuration holding such an entry no longer loads; the service runs on
its defaults in dry run and says why. - App limits on names that are not plain ASCII (
Çizim.exe) are applied;
before, they planned the processes but capped nothing, and the Limits tab
andwtm app-limit listshowed them without usage. - Turning game mode, or its power plan option, off while a game is in front
puts the previous power plan back at once instead of when the service
stops. - A program added to the rescue core's exemptions while it is engaged gets
every core back at once, not when the load recovers. - Insights: a second finding with actions (memory growth after chronic CPU)
reaches the instances already running, and a finding that clears takes its
actions back while another one stands. - The stuck-swarm cleanup never ends copies of RustWTM's own programs.
- Updating works from a user folder with a typographic apostrophe
(C:\Users\O’Brien); such a quote could end the quoted path in the
update scripts. - Telegram: when the bot cannot answer a button press in time, it still
reports what the press ended or suspended.
v0.20.0
Changed
- Stopping, restarting or disabling a service and blocking a program's
network access are asked first. - Snapshots and the service's recent points carry the time they were
measured (IPC protocol 15). The data age and the out-of-date warning use
it, so a snapshot received again from the service's cache ages instead of
reading as new; the age now reads Data measured N s ago. - Network, Services and Ports searches clear with Escape or a ✖ button as
the process search does; Network and Ports say when nothing matches and
offer to clear the search; table toolbars wrap in a narrow window. - Performance and process graphs place each point at its measurement time:
a slowersample_interval_msor a delayed sample keeps its real place on
the time axis, and a snapshot received twice is drawn once. - The block list refuses programs whose blocking would break signing in,
elevation, services, consoles or installers (consent.exe,
svchost.exe,msiexec.exeand others). A rule'scpu_cap_relative
needswhen.cpu_above, which is also the least it resolves against. - The MCP server offers
create_timeas text: JavaScript clients round it
as a JSON number, which a rounded value still matches.
Security
- Policies acting on their own (kill list, rules, governor, game mode,
insights) never end or suspendsvchost.exeor RustWTM's own programs;
the config refuses such kill-list entries and rules, and a*name with
kill or suspend. Insights no longer touch service processes (session 0). - MCP control tools require
create_time, so a process that took the PID
since the listing is never changed;wtm panicandrecent_eventsuse
only the installed service's pipe, not one a program took while the
service is not running. wtm-service installrefuses a program folder that others than SYSTEM,
Administrators and TrustedInstaller can change, or a folder above it they
could rename or take: whoever can replace the program gets SYSTEM. Set
RUSTWTM_ALLOW_ANY_INSTALL_DIR=1on a development machine to install from
a build folder. No folder on the way may be a link.install.ps1makes the install folder admin-only before copying, through
handles and without following links (wtm-service prepare-install-dir
sets aside what is not only administrators' and refuses a folder others
could move, or one reached through a link), refuses stray DLLs, checks
and copies the download from an admin-only folder, anduninstall.ps1
continues from a fresh admin-only folder instead of a fixed name in the
user's temp folder. Both delete folders without following links in them.- The updater checks the installer again after copying it to a folder only
administrators can reach, and installs that copy: the download in the
user's temp folder could be swapped after it was checked. - The hardware provider no longer unpacks native libraries to a temp folder
(as SYSTEM possiblyC:\Windows\Temp, where .NET would reuse files planted
beforehand); they ship next to it. - Releases are built with read-only permissions, without a build cache and
with third-party actions pinned to a commit; only a separate job that runs
no project code may publish. - The service makes sure its data folder is its own before it reads it: a
folder (or anything in it) owned by someone else, writable by others, a
link or a file with a second name is set aside under an unguessable name
and created anew, without following any link. If that cannot be done the
service stops with a service-specific error instead of running on it. - Clients no longer trust the service pipe while the service is installed
but not running, and the service keeps its pipe name even when a client
vanishes before it is accepted. - Protection rules judge the image of the process actually opened, not the
name a request gives (also for refusing to dumplsass.exe).
Fixed
- Limits a failed lift left on a process are lifted again on the next tick
and when the service stops, instead of staying for good. - An app limit whose launcher exited before its child was counted is lifted
rather than dropped with the child still capped. - Changing the governor, memory guard, insight or game mode settings lets go
at once of what they applied (as rules already did): a newly exempt app
is no longer kept throttled. - A failed history query keeps the insight findings instead of lifting and
re-announcing them all. - Setting the clock forward no longer makes every copy of a crowd old enough
to end. - Why won't it end and the module list check the process's start time and
hold it open while they look, so a PID taken by a later process is never
described as the one asked about. - Downloads and Telegram answers are limited in size and total time: a
server sending without end can no longer grow the service's memory or
hold it. - Reading a command line retries when the process changes it meanwhile;
restarting a service waits when its status cannot be read. wtm kill --treeandfree-port --treeno longer report failure for
children that ended with their parent, andfree-portlists every
failure of a tree, not the first.- MCP: answers to the client and malformed messages are handled as JSON-RPC
requires (-32600, unknown tools-32602), and why not responding
says when its analysis is incomplete. - The Ports tab no longer ends a program missing from the process list (it
could have been a later program with the same PID); it says to try again. - Without the service, "Calm them all down" spares the app in front as it
does with the service. - The Network tab narrows to the selected process only while that process
runs (not a later one with its PID), and offers Show all. - The Apps view adds up the network rates of an app's processes.
- The Disks tab checks a typed folder off the window's thread: a sleeping
network drive no longer freezes the window. - GPU engine load per type is its busiest engine, as in Task Manager: two
video engines at 60% each read 60%, not 100%; a process shows its busiest
engine instead of the sum of engines of one type. - Trace sessions no longer pile up (Windows allows 64): a window waits for
its worker to stop its sessions when it closes, its own disk trace stops
after 30 s unread or once the service answers, the service clears those
closed windows left every 10 minutes, and session names carry the owner's
start time so a reused PID no longer keeps an orphan alive. - A power plan game mode switched is put back after a crash too: it is
remembered on disk while replaced and restored at the next start or on
uninstall, instead of leaving the machine on High performance. - The service stopped accepting clients for good after 16 client threads
failed to start (for example during a memory shortage); a failed start now
gives its slot back. - A connection's announced frame length no longer reserves up to 32 MiB
before any of the body has arrived. - Unblocking a program deleted a
Debuggervalue another program had put
in its place, and failed outright when RustWTM's own value was already
gone. - App history lost the earlier part of a minute written twice (the service
restarted within it, or the clock went back); the parts are now merged,
weighted by sample count. - An update check started while an update was installing replaced the
install's progress and offered the install again. - A priority or efficiency mode rolled back to the value from before an
unrelated earlier limit instead of the one in place when RustWTM took it. - End process tree on a PID reused by a newer process ended that
process's children. - A process whose exit code is 259 was reported as still running, and a
window title longer than 63 characters could match a different window. - Panic, End all and Calm them all lost requests past the service's 16
clients and showed only the last success; requests now go in order over
one connection and failures are reported. - Removing or editing a rule left what it applied in place; switching from
dry-run to enforcing never acted on processes already running. - A network adapter coming back up showed a burst of its whole traffic
since boot; a failed sensor provider was never started again; lifting a
CPU and memory limit stopped at the first failure and lost the job. - App history counted an app's CPU only over the samples it was seen in,
so a short-lived helper looked like a chronic hog; fully throttled
processes held the governor's slots. - Wait-chain requests behind a walk stuck in a frozen process each left a
thread blocked; process icons were cropped on scaled displays. - The first local sample after losing the service averaged over all the
time the service was used; limits set without the service could not be
lifted once it connected; acting on a process that is not shown replaced
the details of the one that is. - The kill list saved an edit over whichever entry had moved into its
place; kill and limit forms emptied before the save was confirmed;
Settings saved over changes made elsewhere meanwhile without a warning. wtm kill <name> --treefailed on matches inside another match's tree;
wtm free-portcould end a process that got a port owner's PID.- MCP server: a process started since the service's last snapshot was
reported as missing; a line that is not UTF-8 ended the server; batches
and non-object messages got no answer;network_connectionswith a
malformedpidlisted every process's connections.
v0.19.0
Added
wtm-service cleanupremoves RustWTM's blocked-program entries and its
firewall rules; the MSI runs it on a full uninstall and
wtm-service uninstall(used byuninstall.ps1) runs it too.- The MSI asks a running RustWTM window to close before it removes or
replaces files. wtm list,wtm infoandwtm portstake--json.- Snapshots say whether a process is suspended and whether per-process
network traffic was measured; the service status carries the error of a
configuration file it could not load (IPC protocol 14).
Fixed
- Uninstalling left blocked programs pointing at a deleted
rustwtm.exeand
RustWTM's firewall rules in place. - Remove limits reported success for a process RustWTM had not limited; it
now says so. - Resuming a process suspended several times left it frozen; resume now
undoes every suspension. - A client could suspend itself through the service and freeze.
- An invalid configuration at service start was only logged to file; it is
now an event and part of the status. - A priority or efficiency mode set by hand was undone when the governor
later rolled back its own change. - The hardware sensor helper kept running after the Sensors tab was closed;
it now stops after 30 s without requests unless a fan profile is active. wtm list/topand the MCP server no longer present unmeasured
per-process network traffic as 0 B/s. The MCP server measures CPU, disk
and network over a fresh window instead of since the previous call (or
uses the service's sample), and its control tools accept the
create_timefromlist_processesto refuse a reused PID.- The stale 0.13.0 review is no longer installed by the MSI.
- An Explorer window on a folder named RustWTM stopped RustWTM from
starting; the single-instance check now uses a per-session lock and finds
the running window by its program. - Restart as administrator could end with no RustWTM running; the new copy
waits for the old one to exit. - With a newer service the window advised installing an older version; the
advice and the status badge now name the actual problem. - Events were listed twice after reconnecting to the same service.
- Ending processes or testing Telegram no longer holds up monitoring
updates while the request runs. - A RustWTM hidden in the tray now quits when Windows or an installer asks
it to. - Raw error codes on a service restart and command-line wording in the
window's error messages are replaced by plain messages.
Changed
- The window draws with OpenGL instead of wgpu: about 250 MB less memory
and a 30% smaller program. - Visual pass: readable status colours and visible bar tracks and text
fields in the light theme; full column headers in every language with
right-aligned numbers; one card title and sortable-header style; loading
and empty states with text; a stale-data banner that dims the page; the
data age on the subtitle line; a gear icon for Settings; labels before
controls in the power and cooling forms; translated priority, startup and
finding names; level filter and sorting in Events; a ⋯ menu for the
busiest apps' actions. - Processes marks suspended processes and shows "—" for network traffic
that is not measured; Settings and the Overview show why the service
could not loadconfig.toml. - Ctrl+Tab and Ctrl+Shift+Tab switch pages, Ctrl+F searches Services,
Network and Ports, and Esc closes the process details. - The More below hint also shows on Performance, About and the process
details.
v0.18.1
Changed
- Settings: split into pages chosen at the top (This window, Service
settings, config.toml, Telegram) instead of one long scrolling page;
theconfig.tomleditor fills the window. - Pages and lists that continue below the visible area (the Disks tab, the
space analysis tables, the config editor and other long pages) fade at the
bottom and show a More below button that scrolls further.
v0.18.0
Changed
- Performance pass across every crate, measured with new ignored timing tests
(2000 synthetic processes):- Policies: one tick of rules, limits, kill watch, insights and the other
policies costs about 2 ms instead of 55–70 ms. Wildcard matching no longer
allocates, and per-rule state is kept only for processes a rule matches. - Window: the process table is filtered, grouped and sorted only when the
data, search, filters or sort change, not on every frame; a frame of the
Processes tab takes about 1 ms instead of 2–3.5 ms. - Service: snapshot, status and recent-event replies are encoded straight
from shared state instead of copied first; history samples and queries
allocate far less (History tab query 3–4 times faster); the start watcher
runs only when a rule needs it. - System queries: GPU and disk counters, process snapshots, connection
tables and the disk and network traces reuse their buffers and make fewer
calls; per-event maps use a faster hasher. - Space analysis: workers share folders at every depth, so one huge folder
no longer runs on a single thread (about twice as fast there). - Process tree lookups and sorting by name are 6–10 times faster.
- Policies: one tick of rules, limits, kill watch, insights and the other
v0.17.0
Added
- Processes: Started in the last N min lists only recently started processes
(presets from 1 minute to 4 hours, or any number of minutes) and shows the
Running for column. More filters adds disk-active (1 MiB/s+), GPU-active
(5%+) and session (user apps, or services and system in session 0) filters;
active filters show as removable chips and combine with the quick filters
and search. - Disks tab: drives with label, file system and free space; live activity per
physical disk and the processes with the most disk I/O; and a space analysis
of any drive or folder with a folder tree (sizes, share of parent, file
counts), the largest files and space per file type, with Show in Explorer.
Scans run on background-priority worker threads, can be stopped, report
unreadable folders and never follow junctions or symbolic links. - Disks tab: Files being read and written per program, from a kernel ETW
trace that runs only while the tab is open (service or administrator).
Without administrator rights the service shows only your session's programs. - Not responding programs: marked in Processes (with a quick filter) and on
the Overview; Analyze wait chain in the details panel shows what their
blocked threads wait for and flags deadlocks. - Why won't it end?: protection, drivers that withhold the right to end it,
critical processes and the programs still holding it open. - Modules: loaded DLLs with their Authenticode or catalog signer, unsigned
and invalid ones first. - Network bytes per process (ETW in the service, or in the window when run as
administrator): a Network column, details rows and the busiest programs in
the Network tab. Close resets an IPv4 TCP connection. - Block network access: two Windows Firewall rules per program, grouped as
RustWTM; listed with Unblock in the Network tab. - Game mode (
[game_mode]): while a full-screen app is in front, busy
background apps get below-normal priority and efficiency mode, optionally the
High performance power plan; rolled back when it ends or the service stops.
Only apps in the game's own session are calmed, never services or other
users' apps.
Shown on the Overview and in the status bar, configurable in Settings. - Handle and thread leak findings in the app history (report only).
wtm mcp [--allow-control]: a Model Context Protocol server on stdio for AI
assistants, read-only unless--allow-control.
Changed
- Memory dumps are written from a process snapshot (the process is frozen for
milliseconds), falling back to a live dump; lsass and LsaIso are refused. - IPC protocol version 13: foreground reports carry full screen, status
carries game mode, and connection closing, firewall and disk activity
requests were added. Install the service of the same version. - Usage history stores average handles and threads per app; older databases
are upgraded in place.
v0.15.0
Added
- A monitoring-data receipt age on every GUI page, with a stale-data warning
after a sampling failure or a delayed update. The last received values remain
visible. The timeout allows slower sampling intervals; successful updates
clear the warning. All five interface languages are supported. - Resources reserved for RustWTM (
[reserve]): while the CPU is overloaded a
rescue core is kept free for RustWTM and Windows by moving other programs off
it with CPU Sets, and handed back when the load recovers. The service keeps
working_set_mbresident and opts out of EcoQoS; the window runs above
normal priority with 64 MB resident. Shown on the Overview and in the status
bar, configurable in Settings. - Window drawing times on the About page, and
RUSTWTM_FRAME_REPORT=<file>
to benchmark every page and write per-page frame timings.
Changed
- The window reads command lines and image paths of new processes without
holding the data lock it needs for every frame, so a burst of new processes
no longer stalls drawing. The About logo is uploaded once instead of every
frame, and the Overview cards line up at equal height. - IPC protocol version 12 (status carries the rescue core).
v0.14.0
Added
- GUI and desktop notifications in English, Turkish, German, French and Spanish.
The language selector applies immediately and persists per Windows user;
the default follows the Windows UI language. Missing translations fall back
to English, while unknown/native diagnostic details retain their source text. - Translation coverage and placeholder checks in the regular test suite,
five-language page/navigation tests and optional visual reviews in both themes
at wide and compact sizes. - 96 and 128 px sizes in the embedded product icon, alongside the existing
16, 20, 24, 32, 48, 64 and 256 px sizes; executable resource verification.
Changed
- IPC remains protocol 11.
- Navigation width follows translated labels; saved actions, process identities
and service configuration keys remain language-independent.
v0.13.1
Added
- Hybrid CPU topology from Windows CPU Sets:
wtm cores [--json], processor
group/core identifiers and relative P/E/LP-E tiers without hard-coded class values. wtm affinity <target> --pcores|--ecores|--lp-ecores|--all-coresand a CPU core
type menu in Processes. PID identity/protection checks remain enforced;
processes spanning multiple groups are rejected rather than truncated.- Performance graphs label hybrid tiers; uniform CPUs omit the hybrid controls.
- Explicit shared Windows frequency limits in Sensors & cooling and
wtm power show|limit|restore. Administrator access and confirmation are
required for writes. Original values are saved before mutation, partial
failures attempt rollback, and detected external changes are preserved.
These are power-plan settings, not per-PID MHz caps; class 1 is not assumed
to mean E-cores.
Changed
- IPC protocol 11 adds core-tier requests.
Update the GUI and service together.