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.
  • .mmmacro files are registered with Windows for open/run commands.
  • MOUSE TO IMAGE and DETECT IMAGE work 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 VARIABLE and DEFINE STRING VARIABLE gained 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.exe payload folder.
  • Shared install folders such as macros, plugins, data, and logs are preserved beside the launcher.
  • The root launcher reads config.ini for 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 app folders.
  • The launcher rewrites config.ini when 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.dll were 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.
  • .mmmacro file association was moved to explicit Windows registry entries in the installer.
  • .mmmacro files now use the MiniMouseMacro.mmmacro ProgID.
  • Windows open and run commands for .mmmacro files go through the root launcher with /o "%1" and /r "%1".
  • The .mmmacro default icon points at the installed root launcher.

Macro editing, playback, and variables

  • RUN ACTION | DEFINE INTEGER VARIABLE now 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 VARIABLE now 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, and PADRIGHT.
  • 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 IMAGE and DETECT IMAGE now 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=0 and Y=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 N plus an at region validates that the region intersects the selected monitor.
  • Existing at region behavior remains virtual-desktop based.
  • Legacy on primary and on secondary with an at region 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 quick now checks sampled foreground pixels with a small RGB tolerance.
  • match full now 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/*.traineddata files.
  • OCR language-pack storage prefers %ProgramData%\MiniMouseMacro\ocr\tessdata with %LocalAppData%\MiniMouseMacro\ocr\tessdata as 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 location screen captures can optionally use ::on monitor N:: to validate the selected region against a zero-based monitor.
  • Existing OCR From image, From folder, and unqualified At location payloads 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 ::VERBOSE now 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 and documentation links were moved away from old turnssoft.com URLs.
  • 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.replaceContent can 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 / web labels.
  • Cloud library relative paths are shown as clearer Cloud Library: ... recent list labels.
  • macro.play, macro.pause, and macro.stop are routed through the same play/pause/stop behavior as the desktop UI.
  • macro.openDesktopFile uses the normal desktop file-open path.
  • macro.clear uses the normal clear-macro path.
  • macro.save and macro.saveAs use the normal desktop save paths.
  • app.showMainWindow uses 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.execute direct mode runs through the real MiniMouseMacro playback engine.
  • Direct function execution no longer has to replace the visible editor content.
  • editor_load_then_run remains 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: string is normalized to text.
  • 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: true can 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, and postActionVerify profiles.
  • 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_verified instead 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 ready or gave_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.watchId ownership 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, direct url, 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.speak and tts.stop.
  • Desktop text to speech reuses the Windows System.Speech path 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 .mmmacro files remain the core file compatibility target.
  • Existing macro strings for image detection and OCR remain valid.
  • Existing OCR From image, From folder, and unqualified At location syntax 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.exe launcher.
  • 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 .mmmacro file 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

Download MiniMouseMacro

Discussion

Check the Community forum for release discussion and user reports.