MiniMouseMacro 9.0.0 Release Notes
Release status
Published: 2026-05-14
Applies to: MiniMouseMacro desktop app for Windows
MiniMouseMacro 9.0.0 restores the Windows desktop installer release line and ships a large set of desktop app updates, fixes, and optional cloud-connected desktop features.
Highlights
- MiniMouseMacro is back on an MSI-based Windows installer.
- The installed app now uses a stable root launcher and a versioned
app\9.0.0\desktop payload. - Update checks now use the MiniMouseMacro appcast/MSI update flow.
.mmmacrofiles are registered with Windows for open/run commands.MOUSE TO IMAGEandDETECT IMAGEwork better with transparent images, cropped UI images,(0, 0)matches, and multi-monitor layouts.- OCR setup is cleaner: English OCR data is bundled, Tesseract runtime files are installer-owned, and extra OCR language files are managed separately.
DEFINE INTEGER VARIABLEandDEFINE STRING VARIABLEgained more capable action-only expression and string-operation support.- Event Log filtering, verbosity, cloud history, and cloud connection messages are clearer.
- Optional cloud workspace support is much broader, including desktop linking, cloud macro library access, desktop screenshots, desktop map data, file-change waits, OCR extraction, text to speech, and safer command acknowledgements.
- Help, purchase, website, and social links were refreshed to current MiniMouseMacro destinations.
Detailed changes
Installer, launcher, and updates
- Restored MSI distribution for the Windows desktop app.
- The installer targets the 9.0.0 release line.
- The installer uses an x64 MSI package.
- The installer emits the MSI directly instead of relying on a bootstrapper
setup.exe. - The installed layout now has a stable root launcher at
MiniMouseMacro.exe. - The real desktop app is installed under the versioned
app\9.0.0\MiniMouseMacro.exepayload folder. - Shared install folders such as
macros,plugins,data, andlogsare preserved beside the launcher. - The root launcher reads
config.inifor the active version and app path. - The launcher can recover if the configured app path is missing by using the fallback version or scanning installed
appfolders. - The launcher rewrites
config.iniwhen recovery selects a different valid app payload. - The launcher writes diagnostic information to
logs\launcher.log. - Command-line arguments passed to the root launcher are forwarded to the versioned desktop app.
- Update checks now use NetSparkle and the production MiniMouseMacro appcast.
- Startup update checks and manual Check for updates actions now use the MSI update flow.
- Old text-feed update checks were replaced by the appcast flow.
- Old ClickOnce publish metadata was removed as part of the installer-based update transition.
- Release metadata was aligned around desktop version
9.0.0. - The desktop assembly version was aligned to
9.0.0.0. - Installer file rows were corrected so the MSI packages Release build output, not Debug build output.
- The installer now packages the intended root launcher from the staged Release launcher output.
- The installer now packages the intended versioned desktop app from the staged
app\9.0.0\Release payload. - Duplicate dependency source paths for
System.Runtime.CompilerServices.Unsafe.dllwere corrected so installer validation no longer looks in the setup project folder for that file. - The duplicate unsafe-runtime dependency is excluded where needed so the MSI ships one intended copy.
.mmmacrofile association was moved to explicit Windows registry entries in the installer..mmmacrofiles now use theMiniMouseMacro.mmmacroProgID.- Windows open and run commands for
.mmmacrofiles go through the root launcher with/o "%1"and/r "%1". - The
.mmmacrodefault icon points at the installed root launcher.
Macro editing, playback, and variables
RUN ACTION | DEFINE INTEGER VARIABLEnow supports action-only integer expressions with variables, parentheses, and nested arithmetic.- Existing prefix-style integer math such as
::+10,::-5, and chained legacy forms remains supported. - Integer expressions can use built-in values such as
%I%,%MOUSE_X%, and%MOUSE_Y%. - Integer expressions can use named custom integer variables.
- Repeated integer expressions are compiled once and re-evaluated with current values during playback.
- Decimal intermediate values are preserved during nested integer-expression evaluation before the final integer result is produced.
RUN ACTION | DEFINE STRING VARIABLEnow supports action-only stacked string operations.- Plain string assignment still works as an implicit
SET. - String operations now include
SET,APPEND,PREPEND,CLEAR,REPLACE,INSERT,REMOVE,SUBSTRING,TRIM,TRIMSTART,TRIMEND,UPPER,LOWER,PADLEFT, andPADRIGHT. - String operations can use built-in string slots and named custom string variables.
- Repeated string-operation expressions are compiled once and re-evaluated with current values during playback.
- Whole-variable token lookup is faster for repeated declared integer and string evaluation.
- Fast token lookup covers common exact tokens such as
%INTEGER%,%STRING%,%I%,%MOUSE_X%,%MOUSE_Y%,%RETURN%,%RANDOM%,%RANDOM_x-y%, and exact named custom variables. - Settings help text for variables was updated to describe the new string operation family.
- Main window opacity can be adjusted, which helps when authoring or debugging macros while watching another window behind MiniMouseMacro.
- Clearing the macro list now uses a styled confirmation dialog instead of the old basic message prompt.
- Clearing the macro list now clears the loaded macro identity used by desktop activity reporting.
Image detection
MOUSE TO IMAGEandDETECT IMAGEnow support explicit monitor selection.- Omitting the monitor clause uses the primary monitor for full-screen image detection.
::on primary::searches the primary monitor.::on secondary::searches the first non-primary monitor in Windows monitor order.::on monitor N::searches a zero-based monitor number.- Image-region capture now supports
X=0andY=0. - Image-region capture now supports negative virtual-desktop coordinates, which helps monitor layouts with displays to the left of or above the primary monitor.
- Explicit
on monitor Nplus anatregion validates that the region intersects the selected monitor. - Existing
atregion behavior remains virtual-desktop based. - Legacy
on primaryandon secondarywith anatregion do not constrain the region to that monitor. - Found image coordinates are returned as desktop coordinates.
- Matching no longer depends on brittle corner-plus-diagonal image samples.
- Matching now uses a foreground target pixel as the scan anchor.
- Transparent pixels in target images are ignored during verification.
- Uniform corner backgrounds in target images are ignored during verification.
match quicknow checks sampled foreground pixels with a small RGB tolerance.match fullnow verifies every foreground target pixel.- Cropped UI tabs, icons, and buttons should be easier to match.
- A valid image match at desktop coordinate
(0, 0)is no longer treated as “not found”. - Mouse To Image dialogs now expose monitor selection.
OCR
- OCR runtime and language lookup now use one shared capability model.
- The installed app owns the Tesseract 5.2.0 runtime files.
- English OCR language data (
eng.traineddata) is bundled into the versioned app payload. - Extra OCR language files are stored in writable data locations rather than deleting or replacing installer-owned runtime files.
- The Plugins window now behaves as an OCR language-pack manager instead of a DLL downloader.
- OCR language-pack downloads extract only
tessdata/*.traineddatafiles. - OCR language-pack storage prefers
%ProgramData%\MiniMouseMacro\ocr\tessdatawith%LocalAppData%\MiniMouseMacro\ocr\tessdataas fallback. - Legacy macro OCR, OCR dialogs, queued OCR, and desktop observation OCR now use the same runtime/language checks.
- Missing OCR runtime and missing OCR language data are reported separately.
- Obsolete MySQL DLL download/removal behavior was removed from the Plugins flow.
- OCR
At locationscreen captures can optionally use::on monitor N::to validate the selected region against a zero-based monitor. - Existing OCR
From image,From folder, and unqualifiedAt locationpayloads keep their previous behavior. - The OCR designer placeholder was corrected to use real OCR grammar.
Event Log and diagnostics
- Event Log gained a clearer Verbose and Very Verbose split.
- Verbose shows higher-level macro line snapshots, IF/skipped scaffolding, and macro event rows.
- Very Verbose adds deeper detail such as condition true/false results, comparisons, variable assignments, running-action detail, FOR iteration detail, and encryption/decryption traces.
- Turning on Verbose or Very Verbose now emits a performance/volume advisory when event logging is enabled.
- Very Verbose no longer produces a duplicate verbose warning.
- Verbose and Very Verbose settings are persisted in registry/INI settings.
- Very Verbose automatically enables Verbose on load.
- INI boolean values for event verbosity are accepted case-insensitively.
- Event Log parsing is safer when a macro line contains the internal delimiter text
|evt|. LOGGER ::VERBOSEnow assigns the intended verbosity value.- The Event Log Cloud checkbox now sits in Event Types beside Recording and Macro.
- Turning Macro events off no longer clears the Cloud event toggle.
[Cloud]rows show when Cloud is enabled or when the matching severity filter is enabled.- Turning on only Cloud shows the full
[Cloud]stream. - Cloud diagnostic event rows remain Cloud-only where appropriate.
- Event Log History now includes a Cloud filter.
- Clear History -> Cloud clears the cloud-specific history slice.
- Cloud history stores type 44 cloud rows and
[Cloud]-prefixed message bodies. - Cloud connection lifecycle messages are clearer.
- The Event Log records when a cloud connection is established after being offline.
- The Event Log records when cloud sync drops because a session ends, a heartbeat fails, a token is missing, or the heartbeat timer is stopped.
- Routine successful heartbeats remain quiet.
- Empty cloud command polls no longer spam the Event Log.
- Cloud command logging is collapsed to one useful line per command after ack unless verbose diagnostics are enabled.
- Outbound desktop command acknowledgements can be logged in chunks for troubleshooting.
- The Desktop Cloud Diagnostics window opens from the Desktop cloud diagnostics link in Cloud Connect.
- Desktop Cloud Diagnostics was removed from the Debug File menu entry.
- Desktop Cloud Diagnostics now opens larger.
- Desktop Cloud Diagnostics now has live state badges, grouped scenario actions, a current-state card, and a larger trace panel.
- Read-only diagnostics text areas no longer start selected on load.
- Diagnostics headings and grouped panels now have more stable spacing and sizing.
Help, branding, and support links
- Help and documentation links were moved away from old
turnssoft.comURLs. - Condition/action help now points at
docs.minimousemacro.com. - Help anchors were aligned to the correct action/object documentation pages.
- The Pro purchase link now points at
https://minimousemacro.com/buy. - Remote help now opens the REMOTE action documentation.
- Script Builder export title text now references MiniMouseMacro.
- Settings-load error text now references minimousemacro.com.
- Main Help menu items no longer use the Turnssoft name for website/social entries.
- Help menu captions now use neutral labels such as Website, YouTube, and Facebook.
- The old Twitter item was removed from the About submenu.
- The About dialog was redesigned with a cleaner two-column layout, Segoe UI typography, a links card, assembly description text, DPI-aware scaling, and a clearer Close button.
- The About dialog support email link is aligned with the visible support address.
Application cleanup and reliability
- Repeated registry path literals were centralized so runtime settings use a more consistent storage path.
- Legacy SDK-based Firebase/Auth and Firestore client code was removed after it was confirmed to be unused.
- Stale Firebase/Auth, Google Cloud Firestore, Google API, and gRPC references were removed from the desktop project.
- The remaining Firebase handler path keeps the current REST-based behavior that is still used by the app.
- Startup initialization was hardened so desktop cloud client setup no longer forces shared resource initialization too early.
- Default sound players are initialized during settings load instead of at module field initialization time.
- The desktop app now creates the desktop cloud client lazily instead of during main-form field initialization.
- Project/resource metadata for the main form was verified after a stale locked Debug build artifact produced missing-resource startup errors during development.
Keyboard and condition editing fixes
- Fixed a crash that could happen after the three-second capture delay when adding an IF Keyboard Keypress condition.
- Fixed related key-capture crashes in edit flows that use the same background keyboard monitor.
- The crash could appear as DragDrop registration did not succeed or Current thread must be set to single-thread apartment (STA).
- Multi-key Off state is captured before background key monitoring starts, so the background worker no longer needs to touch the Settings window.
Optional cloud connection
- The desktop app includes a browser-based cloud link flow.
- Cloud Connect can start a link request, open the browser approval page, poll for approval, and save the approved desktop session locally.
- Cloud Connect now opens as a reusable modeless window.
- Cloud Connect is no longer forced to stay topmost over the rest of the desktop.
- Cloud Connect shows the device code returned by the link request so it can be compared with the web approval page.
- Saved desktop session settings include the session token, session id, user id, user email, device name, and connected/expiry timestamps.
- Cloud Connect includes a startup auto-connect checkbox.
- The startup auto-connect preference is saved with the normal runtime settings.
- Saved cloud sessions reconnect on app startup only when that preference is enabled.
- Manual connect/reconnect remains available when startup auto-connect is off.
- Cloud Connect reports Connected only when the heartbeat timer is running and the last heartbeat succeeded.
- Unreachable servers and failed heartbeat states show Not syncing with a status message instead of pretending the desktop is connected.
- The desktop heartbeat payload now reports live playback activity instead of a fixed idle state.
- Heartbeat activity includes idle/playing/paused status, current macro identity, last macro run time, daily execution count, recent execution count, and hourly execution trend buckets.
- Meaningful playback state changes request extra heartbeat updates after start, pause, resume, stop, and natural completion.
- Immediate heartbeat work is deferred while command dispatch is active so cloud commands can finish and acknowledge reliably.
- Session invalidation now prefers structured failure information such as 401, 403, or heartbeat rejection details before falling back to text matching.
- Heartbeat cleanup now unwinds after failures so the recurring sync loop is less likely to get stuck.
Cloud Macros desktop window
- Added a desktop Cloud Macros window for linked workspace users.
- The window shows linked account context, plan label, slot usage, cloud macro list, selected macro details, and macro preview text.
- Cloud macro preview auto-refreshes with a loading indicator.
- Preview text is normalized to CRLF line display.
- Cloud macro library columns are sortable.
- Selected macro metadata and right-column spacing were cleaned up.
- Cloud library selection persists more reliably.
- Action tiles for preview/open/play/save are full buttons.
- Play routes through the normal MiniMouseMacro editor/play path.
- Opening a cloud macro clears local file-path identity so desktop activity reflects the cloud macro correctly.
- Save-current-to-cloud and overwrite-from-desktop actions use the current desktop macro state.
- The window opens as a normal non-owned desktop form instead of being pinned over the main editor.
- Workspace summary actions link to Profile, Editor, and Flow surfaces.
- An embedded cloud browser test surface was added for linked workspace flows.
- Cloud macro endpoint resolution now uses documented cloud function names.
- Older settings with blank cloud macro endpoints can derive the needed URLs from the existing desktop cloud base URLs.
- If cloud macro endpoints are not configured, the UI reports that honestly instead of showing fake success.
Web-to-desktop macro commands
- The desktop can poll for pending cloud workspace commands after a successful heartbeat.
editor.replaceContentcan replace the desktop editor content through the existing macro-load path.- Web-originated editor loads now use the provided macro name, JSON name, or a title derived from the document id instead of fixed
from web/weblabels. - Cloud library relative paths are shown as clearer
Cloud Library: ...recent list labels. macro.play,macro.pause, andmacro.stopare routed through the same play/pause/stop behavior as the desktop UI.macro.openDesktopFileuses the normal desktop file-open path.macro.clearuses the normal clear-macro path.macro.saveandmacro.saveAsuse the normal desktop save paths.app.showMainWindowuses the normal show-window behavior.- Dialog-backed command actions acknowledge user cancel and no-current-path cases honestly.
- Successful open/clear/save/save-as commands request a later heartbeat refresh so the web workspace sees the updated macro identity.
- A command acknowledgement regression was fixed so commands are not dropped on the desktop before an ack is sent.
- Command dispatch is treated as a critical section so heartbeat I/O does not block command completion.
Function execution from the workspace
function.executedirect mode runs through the real MiniMouseMacro playback engine.- Direct function execution no longer has to replace the visible editor content.
editor_load_then_runremains available for flows that intentionally load function content into the editor before running.- Function acknowledgements now wait for actual playback completion.
- Direct function execution can return the normal
%RETURN%value. - Direct function execution can return a text value from a specified MMM string variable.
- Legacy
returnMode: stringis normalized totext. - Text returns are capped to 4000 characters in the command acknowledgement.
- Direct function execution can return yes/no values from a requested or unambiguously inferred MMM boolean variable.
- Direct function execution can return whole-number values from a requested or unambiguously inferred MMM integer variable.
- Direct function execution can return decimal values from a requested or unambiguously inferred MMM decimal variable.
- Boolean, whole-number, and decimal return sources are initialized before playback so stale previous values do not leak into the result.
- Boolean results are normalized to lower-case
true/false. - Whole-number results are normalized to integer strings.
- Decimal results are normalized with invariant decimal formatting.
failGracefully: truecan return the current seeded or assigned typed value after runtime playback errors for typed direct return modes.- Ambiguous or invalid requested return variables now fail clearly instead of inventing a result.
- Active playback policy remains fail-fast for function execution.
Desktop screenshots, desktop map, and anchor support
- Added queued desktop support for
desktop.getEnvironmentSnapshot. - Environment snapshots report monitor count, primary monitor index, monitor bounds, working areas, virtual desktop bounds, foreground window/process details, runtime state, and device context.
- Monitor inventory includes richer geometry data such as orientation and rotation where Windows exposes it.
- Added queued desktop support for
desktop.captureScreenshot. - Screenshot capture supports primary monitor capture.
- Screenshot capture supports explicit monitor capture.
- Screenshot capture supports exact region capture in virtual-desktop coordinates.
- Region screenshot capture validates numeric bounds, positive width/height, virtual-desktop containment, and uncovered monitor-layout gaps.
- Region screenshot results confirm
actualCaptureMode = region. - Screenshot results preserve requested-vs-actual region metadata.
- Screenshot capture uses PerMonitorV2 awareness for improved multi-monitor capture behavior.
- Monitor screenshot capture prefers Win32 monitor bounds when available.
- Screenshot results can include local artifact path, dimensions, monitor index, capture mode, capture time, and geometry metadata.
- Screenshot capture can optionally upload through the backend and return browser-usable image references when upload succeeds.
- Successful screenshot captures write local sidecar metadata that later image enrichment can reuse.
- Added desktop observation publishing for
fastSurvey,windowMap,deepRegionMap, andpostActionVerifyprofiles. - Desktop map observations reuse truthful snapshot and screenshot evidence.
- Desktop map observations can include windows, regions, text blocks, OCR summaries, process summaries, region hashes, product surfaces, control candidates, and anchor candidates.
- Observation publishing includes local dedupe/throttling to avoid repeated map revisions with no meaningful change.
- Minimized windows are now reported as minimized state instead of live renderable geometry.
- Minimized windows no longer feed canvas geometry, regions, control candidates, or anchor candidates.
- Taskbars are classified as semantic system surfaces.
- Taskbar metadata can include Start, pinned apps, running apps, tray, clock, search, task view, widgets, Copilot, and notification overflow where evidence exists.
- Taskbar child surfaces include parent linkage, click points, safe insets, detection method, verification support, and diagnostics.
- Added queued desktop support for
desktop.verifyAnchorCandidate. - Anchor verification supports desktop work areas, taskbars, named top-level windows, window client areas, and supported taskbar child anchors.
- Supported taskbar child anchors include Start, running apps, pinned apps, tray, clock, search, and show desktop when current shell evidence is direct.
- Ambiguous, stale, unsupported, minimized, or derived-only candidates return
not_verifiedinstead of false success. - Several desktop-map candidate issues were fixed, including missing candidates when client bounds were absent, empty-list handling, missing profile candidates, and untitled-but-identifiable windows.
- Common app window labels and role hints were improved for surfaces such as File Explorer, Chrome, and VS Code.
Desktop actions for linked cloud workflows
- Added queued desktop support for Flow Canvas Wait For through
desktop.waitForCondition. - Desktop wait conditions run locally and return
readyorgave_up. - Long waits no longer block the command-fetch loop while the desktop is waiting.
- OCR checks inside wait conditions use separate throttling.
- Added queued desktop support for Flow Canvas File Changed through
desktop.watchFileChanges. - File Changed uses a real local
FileSystemWatcher. - Existing folders can be watched directly.
- Existing files, or not-yet-existing files whose parent folder exists, can be watched by observing the parent folder and filtering to the target file.
- Missing folders and unusable paths fail honestly.
- File watch events are debounced to reduce duplicate low-level save events.
- Rename events are mapped into the supported event contract as honestly as possible.
- Each fetched File Changed command returns one observed event result.
- Stable
watch.watchIdownership prevents one flow from accumulating multiple simultaneous local watchers. - Duplicate still-pending watch commands no longer spam visible Event Log warnings.
- Watcher start/stop lifecycle rows are written with the watched path and operations.
- Added queued desktop support for
ocr.extractText. - Desktop OCR extraction accepts remote image URLs and storage references with a usable image URL.
- Desktop OCR extraction rejects browser-memory-only sources such as
blob:,data:, and inline images. - Desktop OCR extraction runs locally through the installed Tesseract capability.
- Desktop OCR results include success/no-text status, text, raw text, lines, mean confidence when available, source metadata, and diagnostics.
- Added queued desktop support for
image.enrich. - Image enrichment supports
desktopFile,screenshotRef, directurl, and variables that already resolve to one of those sources. - Image enrichment rejects unsupported source or option shapes instead of guessing.
- Image enrichment can preserve safe screenshot metadata.
- Image enrichment avoids exposing raw desktop paths or unsafe EXIF/device details in browser-visible results.
- Image enrichment can report content hash, optional perceptual hash, transparency, dominant color sampling, and safe image metadata.
- Added queued desktop support for
tts.speakandtts.stop. - Desktop text to speech reuses the Windows
System.Speechpath already used by MiniMouseMacro. - Text-to-speech playback tracks a local handle and supports a real stop command for active playback.
- Spoken text is redacted from local acknowledgement logs while still being sent to the backend for the requested command.
- Added deterministic non-macro
desktop.launchApplication. - Launch Application supports arguments, working directory, wait-for-exit, and timeout handling.
- Added deterministic non-macro
desktop.runPowerShell. - PowerShell execution supports one command text, script path, or script content input.
- PowerShell execution captures stdout/stderr previews and local artifacts.
- PowerShell execution reports timeout and non-zero exit failures truthfully.
Compatibility notes
- Local macro recording, editing, and playback remain the compatibility priority.
- Existing
.mmmacrofiles remain the core file compatibility target. - Existing macro strings for image detection and OCR remain valid.
- Existing OCR
From image,From folder, and unqualifiedAt locationsyntax remains valid. - Existing local desktop macro use does not require signing in.
- Optional cloud workspace features require a signed-in account, online service support, and a linked compatible Windows desktop.
- The installer uses a stable launcher plus versioned app payloads. Seeing
app\9.0.0\under the install folder is expected. - Older versioned app folders are not automatically removed by this first MSI release line.
- OCR runtime files are owned by the installer. Additional language files are managed separately in writable data locations.
Upgrade notes
- Install MiniMouseMacro 9.0.0 with the MSI from the downloads page.
- After installation, launch MiniMouseMacro through the root
MiniMouseMacro.exelauncher. - Use Check for updates in the app for manual update checks.
- If you use OCR, English language data is included. Install additional language data through the OCR language-pack flow when needed.
- If you use
.mmmacrofile association, use Windows open/run behavior after installing the MSI. - If you use optional cloud workspace features, reconnect or confirm your desktop link from Cloud Connect after installing.
Known limitations
- Cloud workspace features depend on the website, the account plan, and the linked desktop being online and compatible.
- Cloud workspace changes are documented separately because the website ships continuously.
- Some advanced linked-desktop command results are intentionally narrow and truthful; unsupported source types, stale anchors, ambiguous return variables, missing paths, and unavailable OCR/runtime data fail instead of pretending to succeed.
- Older installed version folders are not automatically cleaned up by this first MSI release line.
Downloads
Discussion
Check the Community forum for release discussion and user reports.