Skip to content

Releases: shadesofdeath/Arbitrium

Arbitrium 0.9.8

Choose a tag to compare

@github-actions github-actions released this 24 Aug 19:05
4328a17

411 tweaks, twelve more blocks on the dashboard, and a migration that was deleting the wrong key

The largest release so far, and it opens with a bug worth reading about.

A migration step was deleting a context menu entry Arbitrium never wrote. The 0.9.5
cleanup removed HKCR\*\shell\runas and HKCR\Directory\shell\runas outright, on every
install that had not yet recorded migration level 2 — which includes every machine that
never ran 0.9.4 at all. runas is a verb name Windows itself defines and any program may
register; "Run as administrator on every file type" is one of the most widely copied
registry tweaks there is. If you had that entry and it disappeared, this is why. The step
now reads the verb's command first and removes only the one that invokes Arbitrium with
--own or --disown. The module's own header always said it would touch nothing but keys
Arbitrium created; now it does.

Four more real ones alongside it:

  • The Apps page could crash the app. A QProcess that dies emits both errorOccurred
    and finished; the first handler cleared the pointer and the second read the scan output
    off it.
  • MULTI_SZ values were written back as REG_SZ. Reverting a journalled multi-string
    value changed its type behind your back. DWORD and QWORD reads also took four or eight
    bytes out of the buffer without checking that many were there.
  • The journal recorded the wrong value on a restore. It wrote down the catalogue's
    target rather than what the write actually put in place — and those differ precisely when
    you are putting something back, which is when the Log page matters most.
  • Applying a tweak with no options asked qBound for a range whose minimum exceeded its
    maximum.

Two settings did nothing. Confirm before applying is on by default, so most people
had been promised a confirmation they never saw — Apply went straight to the writes either
way. Check for updates at launch had no caller but the manual button. Both are wired up.
A failed apply now also tells you what failed, rather than only how many did.


268 → 411 tweaks

Checked against what is actually maintained: WinUtil's sixty-six tweaks were already in the
catalogue almost to the last one, Optimizer was archived in January, and privacy.sexy's
history-recording material was missing entirely. What follows comes from those gaps rather
than from a longer list of the same things.

Three new categories.

Windows Update 30 The catalogue had sixty-two tweaks for Sistem and not one for this. Automatic restart, update behaviour, feature and quality deferral, pinning a release (TargetReleaseVersion — stay on 24H2), where drivers come from, active hours, notification level, Insider builds, Delivery Optimisation mode; Windows Error Reporting, crash dump type, DiagTrack; reserved storage, Storage Sense
Security hardening 23 SmartScreen's three separate faces, AutoRun/AutoPlay, Windows Script Host, the PowerShell 2.0 engine, LSA as a protected process, anonymous SID enumeration, the LM hash, WDigest, remote registry, RDP network level authentication, SMBv1, SMB signing, WPAD, IP source routing, Defender cloud/PUA/network protection, the spooler value that closes the PrintNightmare family, Point and Print, Office macros
Power management 11 USB selective suspend — the commonest cause of a mouse that stutters on wake and an external drive that drops — USB controller sleep, PCIe ASPM, S3 instead of modern standby, the hibernation file and its size, lid close, battery saver threshold, adaptive brightness

And the thin ones filled in. Cleanup 3 → 26 (history recording, cache control, event log
sizes, shutdown timeouts). Memory & CPU 9 → 36 (MMCSS responsiveness, network throttling,
Win32PrioritySeparation, core parking, power throttling, NTFS last-access and 8.3 short
names, the three GameDVR keys, Game Bar, Auto HDR, mouse acceleration). Network 18 → 30, all
of it stack tuning: TCP autotuning, Nagle, QoS reserved bandwidth, LLMNR, NetBIOS, mDNS,
Wi-Fi Sense. Context menu 9 → 20: copy as path, SHA256 hash, unblock, run as a different
user, open PowerShell or Terminal here, empty the Recycle Bin, end tasks that are not
responding, turn off the display. And a new audio section under System.

Two of these do not fit the tweak model and were not forced into it. A scheduled task's
enabled state is not a reversible registry value, so the four that do have a policy key are
tweaks and the rest are not pretended to be. Most "recent activity" lists are cleared rather
than switched, so what went in are the seven keys that stop the recording in the first place.


The dashboard answers twelve more questions

SysInfo is on the startup path, so everything it reads has to be answerable in a frame.
That ruled out most of what you actually go looking for when something is wrong. A second
reader now does it off the startup path, in three stages that each repaint as they land —
the window opens as fast as it did.

Windows Update · System integrity · Scheduled tasks · Drivers · Privacy · Encryption ·
Accounts · Virtualisation · Disk health · Performance · Connection · Sensors.

A few are worth pointing at. The crash row reads the bug-check code out of the minidump
header itself and names it, instead of saying that a crash happened; the two kernel dump
headers keep it at different offsets and both are handled. The pending-restart row names
which flag is actually set rather than answering "yes". The privacy block reads each switch
where Windows reads it — policy before per-user setting — and ends on a single number. Disk
health reports real SMART counters: health, remaining life, power-on hours, total bytes
written, temperature.

Nothing on that page is guessed. A value the machine cannot answer stays at the dash it
started at, and the sensor rows say "not readable" rather than inventing a temperature.


Every word of it, in ten languages

All 143 new tweak names and descriptions are translated, along with the new category,
section and option labels — 302 new keys. The table is at 1533 and not one of them is short
a language.

That also fixes something that had been quietly wrong: the catalogue is built once, so every
Locale::tr() inside the service and startup synthesisers froze that text in whichever
language the app started in. Service positions, startup positions, section titles and row
descriptions now resolve at draw time and follow the language switch like everything else.
The words that had never been given a key at all have one now.


Also

  • The sidebar list is a scroll area. It was a plain widget clipped to the height left over,
    so a row past the bottom edge was not scrolled out of view — it was not drawn at all. A
    large interface scale already did that; three more categories would have taken Advanced
    off the end.
  • Info rows can stack the label above the value. Side by side, the value takes what it asks
    for and the label gets the remainder — right for "Version 24H2 · 26100", wrong for a row
    naming a physical disk, where Samsung SSD 990 PRO 2TB was arriving as Sam….
  • Sorting alphabetically and the "busiest category" tile were reading the raw Turkish out of
    catalog.json instead of what is on screen.
  • A CHANGELOG.md now lives in the repository.

Downloads

Arbitrium-v0.9.8-win64.zip is the application with the Qt runtime beside it — unzip it
anywhere and run Arbitrium.exe. No install, nothing to register.

This one is built by the release workflow rather than by hand, which is new: the tag, these
notes and the archive all come out of .github/workflows/release.yml, and the run refuses
to start if the tag disagrees with the version in CMakeLists.txt, app.rc or the
manifest.

The single-file build from earlier releases needs a statically linked Qt, which takes about
an hour to compile and is not something CI does on every tag. If it turns up here later, it
is the same application in one executable.

Arbitrium 0.9.7

Choose a tag to compare

@shadesofdeath shadesofdeath released this 19 Aug 13:50

Startup switches that stay where you put them

Two bugs, both of which had been quietly wrong for a while.

The update check offered 0.9.6 to a 0.9.6 build. The version number was typed out in four
separate places, and three of them moved on without the fourth: main.cpp still said 0.9.4, and
that is the string the update check compares GitHub's latest tag against. So every 0.9.6 install
has been announcing its own release as an upgrade. If that is what brought you here — this is the
update. The running version now comes from one place, and the build refuses to finish if the other
copies disagree with it.

Disabling a startup entry didn't stick. Turn one off, close Arbitrium, open it again, and
everything was back on. Windows stores that on/off state as a twelve-byte blob, and Arbitrium was
reading it through an API that decodes binary data as text: twelve bytes came back as six, and a
blob with a timestamp in its tail came back as something else entirely. Nothing then matched what
was actually in the registry, so every entry fell through to its default position — which, for a
startup item, is "runs at login". Measured on a real machine, all four entries read wrong.

Fixing that turned up two more in the same feature:

  • Turning an entry back on could leave it off. Putting a tweak back writes what the machine
    held before Arbitrium first touched it — but for an entry Windows had already disabled, that is
    the blob that keeps it off. The switch moved and nothing happened.
  • Two entries could share one switch. Startup rows were keyed by name alone, so a program
    listed under both HKCU and the 32-bit HKLM key — Discord, on the machine this was found on —
    got a single row for two separate entries. Flipping it moved the other one's switch and wrote
    neither.

Also fixed: the Remove shortcut suffix tweak never read as applied. Its off value was
authored in upper-case hex and the registry hands it back in lower case, so the comparison never
once matched.

Every one of these was verified end to end against a real registry, with the app closed and
reopened between each step, because surviving a restart was the whole problem.

Still one file

Arbitrium-v0.9.7-win64.exe is the whole application — 32 MB, no install, no runtime to chase.
The .zip is the same executable with the README beside it.

Arbitrium 0.9.6

Choose a tag to compare

@shadesofdeath shadesofdeath released this 16 Aug 23:36

The values speak your language now, not just the labels

0.9.5 translated the interface but left a handful of values in Turkish — the Overview page still read Yok, Var and dolu no matter which language you picked, and uptime came back as 3 sa 20 dk.

The reason is unglamorous: those words are pure ASCII. The sweep that found the Turkish text by looking for ı ş ğ ö ç ü walked straight past every Turkish word that happens not to contain one. Uptime and idle time were worse — their units were baked into the format string itself, so there was nothing to find at all.

Fixed, and this time verified by a sweep that reads the words rather than the characters.

Now translated as well:

  • TPM, battery, page file and pending-restart values — None / Yes / No / full
  • Uptime, idle time and memory slots, units included
  • Registry and apply errors, and everything the Take Ownership dialog says
  • Preset load failures and update-check messages
  • Accent colour names — Sage, Lavender, Neutral

A full sweep of the source now reports zero user-facing Turkish outside the self-test's own diagnostic file.

Still one file

Arbitrium-v0.9.6-win64.exe is the whole application — 32 MB, no install, no runtime to chase. The .zip is the same executable with the README beside it.

Arbitrium 0.9.5

Choose a tag to compare

@shadesofdeath shadesofdeath released this 16 Aug 23:22

One file. No install. No runtime to chase.

Arbitrium now links Qt statically, so the whole app is a single 32 MB executable. Download it, run it, done — no unpacking, no DLLs sitting next to it, nothing left behind if you delete it. Grab Arbitrium-v0.9.5-win64.exe and that is the entire product.

The .zip is the same executable with the README beside it, for anyone who prefers a folder.

Apps — debloat that reads your machine, not a list

A new page that asks Windows which packages were preinstalled with your image, then reads each one's real icon straight out of its own package folder. Real names, real logos, real version numbers — no hardcoded catalogue of app names that goes stale the moment Microsoft renames something.

Removal takes the app off every account on the machine and deprovisions it, so it does not quietly return the next time someone new signs in. Shared runtimes, and anything Windows itself marks non-removable, are shown with a padlock instead of a button — visible, so the page stays an honest inventory, but not a foot-gun.

Everything destructive still shows you the exact script before it runs.

Ten languages — all the way down

Translation used to stop at the buttons. Now it does not stop anywhere.

All 268 tweak names and descriptions, every service state, every section heading, every action, every label on the dashboard, every line in the Log — 1,033 strings across ten languages.

🇹🇷 Türkçe · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano · 🇵🇹 Português · 🇵🇱 Polski · 🇷🇺 Русский · 🇸🇦 العربية

The Log page re-resolves tweak names from the catalogue rather than replaying whatever was recorded at write time, so entries written months ago read in whatever language you are using today. Switch language in Settings and the whole interface changes instantly — no restart.

Fixes

  • An elevated package query that enumerated inconsistently, so apps could appear and disappear between scans
  • PowerShell's OEM codepage silently corrupting the scan results once app names carried non-ASCII characters — which showed up as an empty list rather than an error
  • A translation key collision that put a literal %2 on screen in the storage row
  • The title bar's "Administrator" / "Standard" no longer hardcoded to one language

Install

Run Arbitrium-v0.9.5-win64.exe. It asks for administrator rights once at launch, because it edits system-level settings and pretending otherwise would be dishonest.

Arbitrium 0.9.4

Choose a tag to compare

@shadesofdeath shadesofdeath released this 15 Aug 18:36

Switch, redesigned

Rectangular now, matching the window's square corners and the 1px-line language of the rest of the UI. The accent fills in behind the knob rather than cross-fading, and the fill edge runs slightly past it so the colour reaches the far side — stopping at the knob left an unfilled sliver in the corner. 140ms, no overshoot, no glow.

Apply, slower and clearer

Paced to about 3.6 seconds instead of 1.1, between 75 and 300ms per tweak, so the name and registry path of each one can actually be read as it goes past. The dimmed layer now covers the sidebar as well, so the page cannot be changed halfway through a write.

190 tweaks, from two sources

40 new tweaks imported from christitustech/winutil, on top of the 150 already sourced from elevenforum.com/tutorials. 11 were dropped as duplicates of registry targets already covered, and 16 more as either script-only or security-weakening.

A tweak can now own several registry values. Plenty of real tweaks only take effect when two or three move together — 13 of the 190 do. Such a tweak counts as applied only when every one of its values is at its on state, and elevation is decided for the tweak as a whole, because writing half of one would leave the machine in a state neither side of the switch describes.

A much deeper overview

Fifteen sections in three columns, up from nine in two. New blocks:

  • Firmware — manufacturer, model, board, BIOS vendor and date, SMBIOS version, UEFI vs legacy boot
  • Processor — vendor, base clock, architecture, firmware virtualization
  • Memory — installed, in use, free, page file, populated slots
  • Software — installed program count, startup entries, .NET, PowerShell, default browser
  • Time & region — time zone with UTC offset, NTP server, locale, keyboard layout
  • Processes — live process, thread and handle counts, and idle time

Plus new rows across the existing blocks: build branch, edition ID, IPv6 address, gateway, adapter count, virtual desktop size and profile path.

Install

Unpack Arbitrium-v0.9.4-win64.zip and run Arbitrium.exe. The Qt runtime ships with it; nothing else to install.

Arbitrium 0.9.3

Choose a tag to compare

@shadesofdeath shadesofdeath released this 15 Aug 17:58

What's new

Redesigned switch. The accent no longer cross-fades in — it is wiped across the track from behind the knob, so the fill and the knob read as one movement. Held down, the knob squashes towards where it is heading and springs back on release; turning on overshoots slightly, turning off settles. A soft accent bloom sits under the capsule, which is what lets an enabled switch read from across a dark window.

Apply progress overlay. Pressing Uygula now raises a layer over everything below the title bar and writes the tweaks one at a time: a progress rail, a live count, and the name and registry path of the tweak being written. The work is genuinely incremental; the pacing is scaled so a run takes about a second whatever the queue length.

Explorer restart offer. Some tweaks only take effect once the shell re-reads the registry. When the run finishes the card says so and offers a Restart Explorer button. It never does it on its own — that would close every open Explorer window, so the decision stays with you.

Also

  • The sidebar is dimmed during a write as well, so the page cannot be changed halfway through.

Install

Unpack Arbitrium-v0.9.3-win64.zip and run Arbitrium.exe. The Qt runtime ships with it.

Arbitrium 0.9.2

Choose a tag to compare

@shadesofdeath shadesofdeath released this 15 Aug 17:41

First release.

A minimal, dense tweaking tool for Windows 11. Dark, 1px rules, deliberately not Fluent: frameless window, custom title bar, 26×15 switches.

What's in it

  • 152 tweaks across nine categories, every one of them sourced from an elevenforum.com tutorial and carrying the URL it came from.
  • Really wired to the registry. The live state of every switch is read at startup; nothing is written until Uygula is pressed. The previous value is journalled before each write, and turning a tweak off restores what the machine actually had — not the catalogue's default.
  • Overview — live CPU / memory / storage / network tiles, a 60-second chart, and nine sections of real system facts (version, hardware, display, network, power, security, volumes, session).
  • Settings — dark and light palettes, four accent presets, row density, XML preset export/import, update check.

Install

Unpack Arbitrium-v0.9.2-win64.zip and run Arbitrium.exe. The Qt runtime ships with it.

Tweaks under HKLM need administrator rights; the app says so when it matters and offers to restart itself through UAC.

A note on safety

Security-weakening tweaks are not in the catalogue: SmartScreen, Defender, core isolation, UAC, the firewall, and Windows Update itself.