MiniMouseMacro 9.0.0 Release Notes Release status Published: 2026-05-14 Applies to: MiniMouseMacro desktop app for Windows Release notes: https://docs.minimousemacro.com/releases/9.0.0/ 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, branding, and support links - Help and documentation links were moved away from old turnssoft.com URLs. - Condition/action help now points at https://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 https://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.