Version History

Release notes and what's new in each version of Highwind.

Version 3.7.0 — In development

Three things arrive together.

Everything new is opt-in for administrators. The new App Control pages are visible to administrators only by default, the SharePoint Decision Store is off until you enable it, and the Fleet Agent service is only installed if you ask the MSI for it. An upgrade from 3.6.0 changes nothing on a machine until you configure it.

Fleet portal: what needs attention, what changed, and Ask Highwind

The Fleet portal keeps every number it had and adds a way in. Dashboard, Devices, Security posture, Firewall and App Control now open with a short strip of insight chips: a plain label, a count, how it compares with before, and one click to the exact devices behind it.

Chips are ranked, not fixed: a critical security gap or a widespread outage comes first, routine noise stays out of the way, and the order does not jump around for small changes. Each page shows only the chips it has real data for, and says so when a source could not be read.

App Control: By application and scanner rule order

Advanced Hunting has a new By application view next to By publisher, grouping events by application with devices, files, would-block counts, versions, hashes and the rules needed.

The App and File Scanner now honours your rule precedence in the Recommend column as soon as you change it, and files scanned through an administrative share (\\localhost\C$\…) are recognised as local protected paths, so a FilePath rule is no longer skipped in favour of a hash.

Fixed: Advanced Hunting reports a file’s folder together with its name, which made path rules end in file.dll\* and never match, so they showed as Would Still Block after Compare. Path rules are now built for the folder.

A new device box next to the day and row limits queries one or more devices instead of the whole tenant, and filters added to the query now always land in the main query rather than the signer lookups.

The application Rules window has a new Save as supplemental… option: pick the base policy and the rules are saved as a supplemental policy attached to it, with its own PolicyID; the base is not changed, and you are warned if the base does not allow supplemental policies.

The expanded application view now fills the width, popup windows can be moved, and Policy Comparison and Policy Merge are working screens where you gather policies from files, a folder or this machine and then compare or merge them.

App Control menu: Policy Comparison and Policy Merge are now one "Compare and Merge" page with three tabs (Policies, Compare, Merge), so nothing opens in a separate window. To merge, pick a master policy; the other ticked policies have their rules added to it, the master keeps the policy options (such as Audit mode), and the result is saved as a new policy with a new Policy ID.

The Policies page moved to Endpoint Tools > Local Policies, now showing policy names first.

App Control menu: "Endpoint Tools" is now Local Endpoint and sits above Investigate. Events moved into it (next to Local Policies, Device Status and CiTool). Device Status now shows the Code Integrity policy, VBS, security services and Smart App Control state instead of a placeholder.

Installed applications scan is faster: files are now read several at a time, each file is read once for both hashes, and the machine’s enforcement state is looked up once per scan instead of once per file.

The App Control page also documents the Advanced Hunting sign-in permissions: what the consent prompt asks for, where approval requests go, how to review grants and how to remove your own to repeat the sign-in.

Installed applications: products that leave no install path in the registry (for example Global Secure Access Client, .NET runtimes and agents) are now located by matching the application name to a folder under Program Files, and show "(found by name)" in the Source column. Broad vendor folders such as Adobe or Microsoft are never guessed.

Installed applications: scanning now only lists applications by default. Tick the ones you need and choose Check selected, or Check all, to read their files and work out recommended rules. Turn on Check files while scanning to keep the old all-at-once behaviour. Creating a policy checks any ticked application that has not been checked yet.

Fixed: some Windows Installer products (for example ODBC Driver 17 and System CLR Types for SQL Server) showed an install folder of C:\?\WINDOWS and "Folder missing". Placeholder paths are no longer treated as folders.

App Control menu: App and File Scanner is now first under Deploy App Control, and Block Applications and Allow Applications use its scan results when Advanced Hunting has no events loaded. Impact Scanner and Enforcement Readiness moved under Investigate, because they work from Advanced Hunting results.

Highwind Fleet: the portal is a free trial, for as long as you need up to one year, but a license file is still required (it tells us who is using the portal) and pricing may change in the future. Azure is the only supported way to host the portal and API today; an on-premises install is coming soon.

The Local File Scanner is now the App and File Scanner, since it scans folders and installed applications on this device or, through an administrative share or Scan device, on a remote one.

Block Applications and Allow Applications now also use the installed applications you have checked (previously only scanned folders showed up), list separate files of one product (for example 7-Zip’s 7z.exe and 7zFM.exe) by file name, and have a compact layout, a full-height application list and a hint while nothing is selected, matching the other App Control pages.

App and File Scanner:

Policy Comparison and Merge:

Fixed: a path rule written with the %OSDRIVE% macro never matched anything in Compare (the drive was expanded with a doubled backslash), so applications installed under Program Files kept showing as blocked. By application now shows Files blocked and Files allowed rather than event counts, and searching no longer changes which application a file belongs to.

🔥 Endpoint Firewall Reporting (Fleet)

Fleet now answers “is the firewall healthy, what is blocked, what is allowed, and why?” from the devices you already manage.

Simple first, details on demand: an Overview with three lenses (Overview, Security, Troubleshooting), a Needs Attention list, Top Blocks and Top Allows, a Rules view, a firewall section on every device and a “why was this blocked or allowed” page.

Troubleshoot, Exposure and Baseline:

All read-only; listening ports need the updated agent, and saved views need the updated database script.

🧠 Highwind AI

👀 Security Watch

Highwind already keeps 30 days of configuration history. Now it reads that history on its own — two minutes after launch and every two hours after that — and looks for one thing: a protection that was weakened or removed from policy. Signature updates, scan counters and other routine churn are ignored.

📌 Pinned prompts and a proper prompt library

🔧 Better answers

🖱️ Readable at any scale

Highwind now follows the Windows Text size setting and per-monitor DPI, and reacts live when either changes. The main window is capped at 150 % so dense grids stay usable; the chat and pop-out answer windows scale fully.

🛡️ App Control

🌐 Fleet central management Preview

Host your own Highwind Management API and Portal. Devices running the optional Highwind Fleet Agent service register, send heartbeats, advertise what they can report, and answer approved read-only questions on demand.

Operators use the Portal or the API; every request is authorised by role and audited, and a device will only run an operation it has advertised.

Set up and test central management →

Enterprise documentation reorganized

The Enterprise pages now share one left-hand navigation and open with a short overview. New pages cover Client reporting, the Security model and Troubleshooting.

The long central management page is split into Deploy and verify, Devices, posture and access, App Control and Scale and network protection. Text diagrams are replaced with images. Old links to sections of the central management page still work from this site.

👤 For Administrators

Version 3.6.0 — In development

A maintenance release with one job: move Highwind onto .NET 10 before .NET 8 stops receiving security updates. There are no new features and no behaviour changes. If everything has gone to plan, the only thing you will notice is that the download is slightly larger.

Why this release exists. Microsoft ends support for .NET 8 on 10 November 2026. Highwind ships self-contained — the runtime is packaged inside the MSI and the portable ZIP rather than installed separately — so after that date every release would carry a runtime that will never receive another security patch. A tool that reports on your security posture has no business shipping one. .NET 10 is a Long Term Support release, supported until November 2028.

🔄 Moved to .NET 10

🔧 The PowerShell engine is back in step

Highwind pins the PowerShell SDK so its collectors behave identically everywhere, rather than inheriting whatever PowerShell happens to be on the machine. That pin had drifted: the SDK and the automation engine underneath it were held at different versions, which .NET 8 tolerated silently and .NET 10 refuses to build at all.

The two halves are now kept together by construction instead of by hand, so they cannot drift apart again. This is invisible in normal use, but it is the one change in this release with any real chance of affecting collector behaviour, and it is the thing worth watching if a collector reports something unexpected after upgrading.

🧹 Small correctness fixes found on the way

👤 For Administrators

If you inventory the bundled runtime. Software inventory, vulnerability scanners and allow-lists that key on the .NET version inside C:\Program Files\Highwind\ will see .NET 10 where they previously saw .NET 8. The file count in the install directory changes for the same reason. Nothing is wrong — but a scanner pinned to the old runtime will report a difference.

Version 3.5.0 — Latest

Four things happen in this release. The tool is renamed from MDE Toolkit to Highwind; Highwind AI becomes the fastest way to find out what is actually going on with a machine — including, for the first time, what has changed on it; remote targeting is repaired — a much bigger statement than it sounds, because until now a remote scan could quietly report the local machine instead; and App Control gains the tooling to take a rollout from audit mode to an enforceable policy.

Read the administrator notes before deploying. The rename moves the install directory, the registry keys and the scheduled task names. Existing policy configuration is migrated for you, but detection rules and management scripts that look for MDE-Toolkit will need updating.

🏷️ Renamed to Highwind

Same project, same maintainer, same licence. The old name described a Microsoft product rather than this tool, and the tool is not a Microsoft product — it is an independent project that reads Microsoft's telemetry and tells you what it says. A name that implied otherwise was doing nobody any favours, least of all the people who had to explain it in a change ticket.

The reason this is handled so carefully is that the failure mode is invisible. A renamed policy key that nothing reads does not produce an error — the application starts, the UI looks healthy, and the fleet quietly runs with no upload endpoint, no tenant and default guardrails. That is worse than a crash, because nobody investigates it.

🧠 Highwind AI

Ask a question about a machine in plain English and get an answer, instead of reading six pages of settings and working out for yourself which of them matter. “Is this machine protected?”, “why is Defender not updating?”, “what changed last week?” — Highwind reads the machine, works out which parts of it are relevant to what you asked, and explains what it found and what to do about it.

Two things make the answers worth trusting. Every fact comes from the machine itself and is shown with its source, so you can check it rather than take it on faith. And where Highwind cannot read something, it says so — it will not fill a gap with a confident guess, because a wrong answer that looks right is worse than no answer at all.

🕒 It remembers what your settings used to be

The biggest addition in this release, and the one with no equivalent elsewhere. Highwind now takes a quiet snapshot of the machine’s security configuration every few hours and keeps a rolling 30 days of history. That turns a question nobody could previously answer into an ordinary one:

“What has changed on this machine in the last 30 days?”

🔍 And it explains the setting, not just the change

Being told a value moved is only half an answer. Each reported change now comes with the part you would otherwise go and look up: what the setting actually does, where it is configured in Intune and in Group Policy, the registry location, what the numbers mean, and the handful of things that realistically cause it to move — most likely first.

Highwind then checks the machine live and tells you whether anything is enforcing that value right now. That is the difference between “go and check Intune or Group Policy” and “nothing is enforcing this here, so look at who has local administrator rights.”

Where the change cannot be traced to a specific policy — which is usually, once the logs have rolled — it says so plainly and points at the places evidence may still survive, rather than inventing a culprit.

📚 Research, with its sources shown

For the questions that are about Defender rather than about your machine — what a setting means, why a feature behaves the way it does — Highwind draws on a built-in knowledge base, and, if you allow it, looks things up at Microsoft Learn and other public sources. Answers carry links, so you can read the original. Your organisation can turn outside lookups off entirely by policy.

💻 Works on a machine with no internet, and on machines that are not yours

📄 Reports you can hand to someone else

Highwind AI can write the whole thing up as a report, and you choose what it should concentrate on: a security review, or a troubleshooting investigation. The same machine, the same evidence, but the emphasis, ordering and recommendations shift to suit the reader — a summary for management is not the same document as a working list for whoever has to fix it.

🐜 The typing hang

The original bug report, and the one that started everything else in this release. Every keystroke in the target field triggered a synchronous UNC probe of the typed value. Typing a machine name meant firing a network round trip at every prefix of it, on the UI thread, so the window locked up for as long as the network took to give up on names that were never going to resolve.

The probe is gone from the keystroke path entirely. Reachability is established when you actually target the machine, where waiting for the network is something you asked for.

📡 Remote targeting actually works now

Investigating this exposed something considerably worse than a hang. Credentials were not reaching most of the remote data paths, and the code that needed them fell back to reading the local machine instead of failing.

⚠️ Silently-local data is gone

This is the headline correctness fix. When a remote collection could not complete, several subsystems fell through to the local machine and presented the result as though it came from the target. A remote assessment could therefore describe the analyst's own workstation while naming somebody else's device at the top of the report.

That is not a cosmetic bug. It produces a confident, specific, well-formatted answer about the wrong computer, and there is nothing in the output to suggest you should not believe it. Every one of the following now reports the target or reports nothing:

🔒 Wrong-machine writes are blocked

The mirror image of the previous problem, and the more dangerous half. Several actions could write locally while a remote target was selected — so an operator intending to change a remote device would instead modify their own.

Device Control policy edits, ASR exclusion creation, Quick Actions and support bundle generation are all now refused rather than silently redirected when the write cannot be performed against the selected target.

👁️ Uncertainty is visible

The through-line of this release: where the tool does not know something, it now says so instead of producing a verdict it cannot support.

🛠️ CLI / GUI parity and batch reporting

The command line and the interface had drifted apart and could produce different results from the same inputs. They now run the same code path. Batch reporting, previously CLI-only, is available in the GUI on that same shared path — so a report generated either way is the same report.

🔧 PsExec

PsExec-based remote provisioning was broken and is repaired. Fetching it is now an explicit, optional, signed download rather than an assumption, and it remains disabled entirely where DisablePsExecDownload is set — a tool Defender flags as HackTool:Win32/PsExec should never arrive on a machine without someone choosing it.

🔐 App Control — building a policy from Advanced Hunting

The largest body of work in this release. The goal is narrow and specific: make it realistic for an administrator to go from “App Control is deployed in audit mode” to “here is the policy I am prepared to enforce” — the step most rollouts stall on.

📊 Very large tenants

Advanced Hunting has a 30-day retention, a complexity limit, a response-size cap and a rate limit. On a six-figure device estate all four bite, and the previous behaviour was to quietly return less data rather than say so.

📈 Renamed: Endpoint Posture Score

The old name sat too close to Microsoft Secure Score, an unrelated Microsoft product. This score is calculated locally by Highwind from local data and has never had any relationship to it. The score, weighting and remediation guidance are unchanged — only the label.

📕 App Control documentation

Numbered walkthroughs in the in-app knowledge base, and a fuller guide at App Control. The guided tour now loads policies before running the query, so results come back already compared.

👤 For Administrators

Update anything that detects the old name. Configuration Manager detection rules, Intune requirement scripts, allow-lists keyed to C:\Program Files\MDE-Toolkit\, and monitoring that watches for the MDE Toolkit Collect task will all stop matching. The application will be installed and healthy; only your tooling will disagree.

Download 3.5.0 from GitHub Enterprise deployment

Version 3.4.0

The headline is supply chain: release artifacts are now digitally signed, so you can verify what you downloaded before you deploy it to a fleet. Alongside that, a Smart App Control reporting bug is fixed that had been wrong in the dangerous direction, EDR onboarding moves onto the Overview page, and the application icon changes.

This release shipped under the tool’s former name, MDE Toolkit. It was renamed to Highwind in 3.5.0.

🔏 Signed releases

Every release artifact is signed with Azure Artifact Signing and RFC‑3161 timestamped. Until now the toolkit shipped as an unsigned MSI — an installer that requests elevation and reads your Defender configuration, with no way for you to confirm it was the file that left the build.

Timestamping matters more than usual here. Azure Artifact Signing issues short‑lived certificates by design; the RFC‑3161 countersignature is what keeps the signature valid after that certificate expires, rather than the download turning untrusted a few days later.

Verify before you deploy:

PowerShell
Get-AuthenticodeSignature .\MDE-Toolkit-3.4.0.msi |
    Format-List Status, SignerCertificate, TimeStamperCertificate

Status should read Valid. A signed package also means SmartScreen has something to build reputation against, and that you can write WDAC or AppLocker publisher rules for the toolkit instead of hash rules that break on every update.

🐛 Smart App Control was reported incorrectly — in the dangerous direction

Two independent defects, both fixed. The second is the one worth reading.

Both the WMI and registry paths now produce the same normalised values, so the compliance check and the Security Score can no longer disagree about the same device. Thanks to Eric Lawrence for identifying the registry mapping error.

📡 EDR onboarding on the Overview page

The Intune / Entra Management card gains three rows: EDR Onboarding, Sense Service and MDE Org ID. Previously this required opening a support bundle.

They are deliberately grouped separately from the enrollment rows above them, because MDM management and EDR onboarding are independent. A device can be fully Intune‑enrolled, compliant, and syncing happily while sending Microsoft Defender for Endpoint no telemetry whatsoever. Reading “Enrolled” and concluding “monitored” is exactly the mistake this is meant to prevent.

Works against remote targets on the same terms as the rest of the Overview page.

🎨 New application icon

The previous icon was Microsoft Defender’s own product icon. This is an independent open‑source project and is not a Microsoft product, so shipping Microsoft’s product iconography was not appropriate regardless of how recognisable it was.

The replacement is a telemetry trace. The choice is deliberate: a shield claims protection, and the toolkit does not protect anything — it measures, reports, and tells you what to fix. The icon is supplied at every size from 16 to 256 pixels, each rendered natively rather than scaled down, so it stays legible in the taskbar.

📦 Dependencies and project hygiene

👤 For Administrators

Verify the signature before wide deployment. Run Get-AuthenticodeSignature on the downloaded MSI and confirm Status is Valid and a timestamp is present. This is worth doing on the first signed release specifically, because it is the release that establishes what a genuine artifact looks like.

Download 3.4.0 from GitHub Enterprise deployment

Version 3.3.4

A sign-in correctness release. The Highwind Upload scheduled task could open a Microsoft Edge window and ask an unattended machine to authenticate. The failure was counterintuitive enough to be worth writing down: the machines that prompted were the ones joined to the tenant that owns the Function App, and the machines that stayed silent were the ones joined somewhere else entirely.

🐛 Why the joined machines were the ones that prompted

The uploader authenticated with DefaultAzureCredential. That credential knows nothing about Entra device join and cannot use the machine’s primary refresh token — it simply walks a fixed chain of providers and returns the first token it gets. The chain ends at an interactive browser.

So device join was not just unhelpful here, it was invisible to the credential. The quieter machine was the misconfigured one.

🔒 The broker now does the sign-in

Scheduled uploads acquire tokens through the Windows broker (WAM), which is the only provider that can redeem the machine’s Entra PRT. On a joined or registered device this is silent and uses the correct identity. The interactive browser is now excluded outright from every code path the background collector uses, and automatic authentication is disabled on the broker itself, so a machine that cannot sign in silently fails and logs a reason instead of rendering a window nobody will ever see.

The previous PreferredAuthMethod = WAM setting never actually used WAM — it constructed a plain interactive browser credential with no broker attached, so it could not do silent SSO either. It now does what its name says.

The fallback path is still available for machines that genuinely rely on a signed-in Azure CLI or Azure PowerShell session, but it is now pinned to the configured TenantId, so a stale sign-in to an unrelated tenant can no longer quietly become the upload identity.

⚙️ New optional setting: AuthClientId

Broker sign-in needs a client application to request the token as. In most deployments the toolkit can work this out on its own, so no configuration change is required to upgrade. It tries, in order:

Set AuthClientId (REG_SZ, under HKLM\SOFTWARE\Policies\Highwind) when your client and API are separate registrations, or to pin the choice and skip the probe. Whichever registration ends up being used needs public client flows enabled, redirect URI ms-appx-web://microsoft.aad.brokerplugin/<client-id>, and access to the scope named in FunctionAppAudience. When the probe succeeds on a fallback candidate, the log names the client ID that worked so you can pin it.

Recommended for production: set it explicitly. Optional is not the same as advisable — if the probe lands on the built-in Azure CLI client, your Function App is being accessed through Microsoft's app registration. That works, but it means anyone with the Azure CLI installed can request tokens for your API, and Conditional Access cannot be scoped to an application you control. Note that a registration used for blob upload also needs a delegated user_impersonation permission on Azure Storage; the Azure CLI client has that by default, a fresh registration of your own does not.

🔑 Machines outside the tenant: --auth-login

A device that is not Entra joined to the tenant that owns the Function App has no primary refresh token for it, so the broker cannot sign in silently there no matter how AuthClientId is set. Until now such machines worked only because a leftover az login session was quietly supplying every token — an unchosen dependency on a developer tool that would break the moment it expired.

Run once, as the user the upload task runs as:

Command Line
"C:\Program Files\Highwind\Highwind.exe" --auth-login

This prompts once, acquires consent for every configured upload target, and saves an authentication record to %LOCALAPPDATA%\Highwind\auth-record.json. Scheduled uploads then refresh that account silently. It is the only mode in the toolkit that will ever display a sign-in window. Devices joined to the correct tenant do not need it.

👤 For Administrators

If uploads start failing after the upgrade, check service.log in the cache folder (default C:\ProgramData\Highwind\cache\service.log). A silent-auth failure now names the account Windows is signed in as, the tenant a token was requested for, and the client IDs tried, rather than dumping the raw credential chain. If the signed-in account belongs to a different tenant than the Function App, that is the cause — run --auth-login once on that machine.
Nothing else changed. No changes to the JSON schema, the collected fields, the OData entity keys, the CLI, or any policy value. The interactive application signs in exactly as it did before.

Download 3.3.4 from GitHub Enterprise deployment

Version 3.3.3

A telemetry honesty release. Building the fleet dashboards surfaced four fields that the enterprise collector had been reporting without ever measuring. Each was uploaded at its default value on every device, so a report reading them saw false or 0 and had no way to tell that apart from a real result — which is worse than not collecting them at all.

📋 Fields that were never actually collected

🐛 Scan timestamps were dropped for the freshest devices

Quick and full scan times are derived from Defender’s scan age in days, and the code only recorded a timestamp when that age was greater than zero. A scan that ran today has an age of exactly zero, so the machines that had just scanned — the ones in the best shape — uploaded no scan time at all and were indistinguishable from machines that had never scanned. The test is now >= 0.

👤 For Administrators

Existing rows are not backfilled. Azure Table Storage keeps whatever each row was written with, so reports covering history will still show the old defaults for devices that have not yet uploaded on 3.3.3. Slice on ServiceVersion to see how far the rollout has reached, and consider deleting pre-3.3.3 rows if the false zeros would skew a fleet percentage.
Nothing else changed. No changes to the JSON schema, the OData entity keys, the collect/upload scheduled tasks, the CLI, or any policy value. The interactive application is unaffected — these fields are only used by the background collector.

Download 3.3.3 from GitHub Fleet dashboards

Version 3.3.2

A policy-surface cleanup. An audit of every value under HKLM\SOFTWARE\Policies\Highwind found nine settings that were read into the configuration object and then never used, so setting them did nothing at all. Two were worth building; seven were removed.

🔒 Two flags now actually work

Both were documented on this site and in the in-app KB while doing nothing — the same failure mode as ForceReadOnlyMode in 3.3.1. An administrator who set DisableRemoteTarget=1 reasonably believed remote access was off.

🧹 Seven dead settings removed

CollectFirewallRules, CollectWfpFilters, CollectDeviceControl, CollectNetworkInfo, CollectSecurityScore, DisableAiFeatures and DisableAdvancedNetworking are no longer read, no longer seeded by the installer, and are ignored if present. The five Collect* flags promised scope control over data the background collector never gathered. The two Disable* flags duplicated VisibilityAiAnalysisPage and VisibilityNetworkingPage, which are enforced — use those instead.

The six remaining Collect* flags — DefenderStatus, DefenderPolicies, FirewallStatus, AppControl, IntuneEnrollment and DeviceGuard — are genuinely honoured by the collector and are unchanged.

👤 For Administrators

Check your policy before deploying. If you previously set DisableExportButtons=1 or DisableRemoteTarget=1 expecting them to work, they will now take effect for the first time. If you set them speculatively and still want export or remote targeting, set them back to 0 before rolling out 3.3.2.
Backwards compatible. No changes to the JSON schema, the OData entity keys, the collect/upload scheduled tasks, the CLI, or any Visibility*Page value.

Download 3.3.2 from GitHub All download options

Version 3.3.1

Attack Surface Reduction release. The ASR page becomes a two-page workspace β€” an overview that finally tells you what mode every rule is in and where that configuration came from, and a new Events page for investigating blocks and tuning them. Admins can create audited, expiring exclusions directly from an event.

πŸ›‘οΈ ASR Overview β€” one grid, real answers

The overview used to read rule state from a single registry key, which meant it could not see rules configured locally. Two consequences, both fixed:

πŸ“‹ ASR Rules > Events β€” a new sub-page

πŸ” Audited ASR exclusions (Admin Mode)

πŸ› Fixes

πŸ”’ Enterprise guardrails for ASR exclusions

New optional policy values under HKLM\SOFTWARE\Policies\Highwind restrict what admins may create. A device with none of them set behaves exactly as before.

Enforcement happens in the apply path, not just the dropdown, so the policy is not merely cosmetic. Temporary-only with a four-hour cap is two values: AsrAllowPermanentExclusions=0 and AsrExclusionMaxHours=4.

πŸ‘€ For Administrators

Exclusions survive uninstall by design.
Backwards compatible. No breaking changes to the JSON schema, the OData entity keys, the collect/upload scheduled tasks, or the CLI. Existing Visibility*Page policy values are unaffected.

Download 3.3.1 from GitHub All download options

Version 3.2.1

Enterprise telemetry + in-app guide release. Fixes the fields that were empty or wrong in the Azure Table row, adds richer columns for Power BI, and turns the Knowledge Base into a full offline guide for both MDE and the toolkit itself. No breaking changes β€” drop-in over 3.2.0.

πŸ“‘ Telemetry β€” rows now populate correctly

The following columns used to arrive empty, Unknown, or wrong in the storage table. All now populate with real values on every uploaded snapshot:

πŸ”’ App Control status β€” smarter derivation

AppControlStatus used to say NotConfigured on machines with 28 audit-mode .cip policies deployed. Now:

🏷️ Enterprise tags promoted to columns

The DeviceTag, OrgUnit, and Environment values from HKLM\SOFTWARE\Policies\Highwind were already inside every uploaded JSON but the Function App wasn't writing them as table columns. The ingestion function now promotes all three to top-level, sliceable columns β€” Power BI slicers on DeviceTag / OrgUnit / Environment start returning values on newly upserted rows.

☁️ Function App

πŸ“– Knowledge Base β€” the in-app guide

The Knowledge Base page (left-nav β†’ book icon) has been refreshed to serve as the primary in-app guide for both learning MDE and learning the toolkit. Everything is available offline β€” no external calls required.

Where to find it. Launch Highwind β†’ click Knowledge Base in the left navigation. The header search box at the top-right does full-text matching across every article, ASR rule, troubleshooting scenario, App Control concept, policy option, and KQL query.

Doubles as the tool's own How to use Highwind guide. Each Components article calls out which pages in the toolkit surface that pillar and what a "healthy" result looks like β€” for example, the ASR component explains which cards on the Defender Policies and Advanced Hunting pages to check. New operators can open the KB, read a component article, and immediately know which page to open in the app.

πŸ“š Documentation

πŸ‘€ For Administrators

Backwards compatible. No breaking changes to the JSON schema, the OData entity keys, the scheduled tasks, or the CLI. Power BI reports built for 3.2.0 keep working; new columns are additive.

Download 3.2.1 from GitHub All download options

Version 3.2.0

App Control Deep-Dive: six new workflow features and a completely rebuilt ticket-attachment export pipeline. This is the biggest App Control release since 3.1.0.

πŸ” Six new App Control features

πŸ“Ž New "Export Report" dialog (replaces "Save PDF for ticket…")

🌐 HTML export (new)

Single self-contained .html file β€” no frameworks, no external assets, no CDN references. Same "attach it to a ticket, no assets folder" story as the PDF.

πŸ“ Triage Report HTML modernized

The Triage Report's HTML output now uses the same visual language as the Export Report β€” dark-mode, sticky TOC, verdict banner, collapsible sections, sortable tables, in-page search. The Save-File dialog now defaults to HTML with Markdown as the second option. Markdown output is unchanged for pasting into ticket bodies (still renders natively in ServiceNow, Azure DevOps, GitHub, Confluence).

πŸ–₯️ CLI parity with the GUI

The silent-mode App.xaml.cs handlers are now rewired through the same ExportReportAsync pipeline the GUI uses. Everything the dialog offers is exposed as a flag:

Backwards compatible: --export-pdf alone still produces exactly one PDF at the given path. Batch mode (--machines-file / --export-dir) now honours every new flag; per-host filenames get the appropriate extensions when --format both is used.

πŸ”§ Fixes

πŸ‘€ For Administrators

⚠️ Known limitations

Cosmetic: the Overview export toolbar icon changed from DocumentBriefcase to Save to better match the "save as file" intent.

Download 3.2.0 from GitHub All download options

Version 3.1.2

Focus release: the policies the Advanced Hunting page exports now actually compile and enforce. A pile of rule-quality, accuracy, and usability fixes built on top of 3.1.1.

✨ What's New

πŸ”§ Rule generation fixes

πŸ“Š Comparison & UI fixes

πŸ‘€ For Administrators

Heads-up for anyone who tested 3.1.1 exports. Re-export your policies with 3.1.2 — the 3.1.1 files compiled but didn't enforce anything because the SigningScenarios wiring was missing.

Download 3.1.2 from GitHub All download options

Version 3.1.1

New App Control for Business → Advanced Hunting sub-page that pulls live WDAC events from Microsoft Defender for Endpoint, compares them against your local or custom App Control policies, and recommends the right allow rules to author β€” with the same -Level / -Fallback precedence semantics as PowerShell New-CIPolicy.

✨ New: App Control for Business — Advanced Hunting

πŸ”€ Rule precedence (PowerShell -Level / -Fallback)

πŸ” Smarter, safer rule generation

🎨 UI polish

πŸ› οΈ Under the Hood

πŸ‘€ For Administrators

Heads-up for in-place upgrades. No configuration changes are required. The collector, upload task, registry policy keys, and Function App contract are all identical to 3.1.0. The new Advanced Hunting page is opt-in — it only runs when the operator opens it and clicks Sign in.

Download 3.1.1 from GitHub All download options

Version 3.1.0

Focused on scrolling quality of life across every page and grid in the app.

✨ What's New

πŸ› οΈ Under the Hood

πŸ‘€ For Administrators

Heads-up for in-place upgrades. No configuration changes are required. The collector, upload task, registry policy keys, and Function App contract are all identical to 3.0.x.

Download 3.1.0 from GitHub All download options

Previous Releases

Full release notes and downloads for older versions live on the GitHub releases page.

View all releases on GitHub β†’