WpfHexEditor IDE v0.6.5.8 — Release Notes
Cumulative release since v0.6.4.75 · 2026-05-12
This release rolls up everything shipped between v0.6.4.75 and the prior 0.6.5.225 build, then resets the IDE build number to a small monotonic counter inside the 0.6.5.* revision slot — no functional change versus 0.6.5.225.
🆕 Major Features
📊 Code Analysis Report
A full code-quality report panel wired into the IDE, with three scopes (Solution / Project / File), an 11-tab layout, and an end-to-end fix flow.
- Scope-aware SplitButton re-run — left part re-runs the last scope; dropdown offers Re-run (same scope), Run Solution, Run Project…, Run File…; the scope label (
Solution: WpfHexEditorControl,Project: WpfHexEditor.App,File: Foo.cs) is displayed in italic between buttons and filters when a report is loaded;_lastScope/_lastPathpersisted inCodeAnalysisModuleso switching tabs does not reset the scope - Treemap context menu — right-click any tile: Open File, Copy Path, Copy Metrics, Run Analysis on File, Filter to This Project, Highlight Top 10 Hotspots (toggle dims non-hotspot tiles)
- Inline Code Actions (
Ctrl+.) —CodeActionRegistry+ 3 mechanical fixers (WH0032,WH0062,WH0070) + Suppress here, plugged into the LSP code-action pipeline (ADR-019) - Suppressions UX — 4-mode pyramid — Source / File / Baseline / Disable in the Issues context menu, with automatic re-run after apply (ADR-017)
- Roslyn fixers v2 —
IRoslynFixer+AsyncVoidToTask/UnusedLocalRemove/UnusedPrivateRemoveplug into the existingCodeActionRegistryalongside the regex v1 fixers (ADR-025) - Historical Trending — per-run
HistoryEntrysnapshots + sparkline on Overview; honoursSnapshotRetentionDays(ADR-020) - Duplication tab redesign — master/detail layout, side-by-side code preview with whitespace-only diff, severity chips, virtualized DataGrid, 8-item context menu, Markdown export (ADR-023)
- Categories + SARIF 2.1.0 —
RuleCategoryenum +RuleMetadatatable; SARIF export with enriched rule descriptors; radial chord CyclicDepGraph on the Coupling tab (ADR-024) - 15 new localization keys translated across all 28 satellite languages
📝 DocumentEditor — Glyph-Accurate Engine, Rulers, Forensic Trio
The rich-text editor switches its caret, hit-testing, and ruler pipeline to glyph-run geometry, gains interactive page rulers, and adds a three-feature forensic toolkit.
- Glyph-accurate hit-test & caret — new
GetCharOffsetFromGlyphLinesandGetCaretXYFromGlyphLineshelpers route all hit-testing and caret positioning throughPlacedSegment.AdvanceWidthsandInlineVisualLine.CharStart/CharEnd(same pipeline asDrawVisualLines); eliminates the caret/insert misalignment on wrapped lines caused byFormattedTextvsGlyphTypefacewrap-width divergence - Synchronous
RebuildLayoutin all edit paths (InsertTextAtCaret,SplitBlockAtCaret,DeleteAtCaret) — no more one-frame stale layout between typed character and caret beam - Interactive page rulers — horizontal + vertical, drag-to-resize top/bottom margins, drag-to-move Word/VS-style selection;
LayoutTransform-based zoom with snap-to-pixel inGlyphRunRenderer; ruler graduation anchored toPageCanvasPadding × zoom − scrollOffset × zoom; horizontal ruler indent markers update on every caret movement (mouse + keyboard) PageCanvasPaddingpublic accessor — exposed onDocumentCanvasRendererso dependent controls (vertical ruler, minimap) can compute scroll-relative geometry without internal couplingSetVerticalOffsetfiresPageGeometryChanged— vertical scroll now notifies rulers and minimap viewport in addition to the existingPageChangedevent- Forensic trio (ADR-024) — P1 rich Copy/Paste (HTML + RTF), P2 Anonymize (savers honour
Extra["anonymized"]), P3 Embedded Objects pane (extract + open-in-hex); 532 satellite entries - DOCX / RTF / ODT style cascade —
DocxStyleTable+ 5-stagedocDefaults → pStyle → pPr → rStyle → rPrresolution (ADR-013);RtfStyleTable(font/color/style +basedOnflatten); ODT parent-style-name flattening + para→run cascade +fo:color(ADR-016) - DOCX family + Flat ODT —
DocxDocumentLoaderextended to.docm/.dotx/.dotm; newFlatOdtDocumentLoader; 9 formats total, plugin v1.1.0 (ADR-018) - Waves B–G features — headers/footers, page breaks, table insert/edit dialog, hyperlink insert dialog, auto-list (bullet & numbered), page settings dialog (margins/paper/orientation), rich context menu
🔀 HexEditor Split View (#229)
HexEditorSplitHost wraps two HexEditor instances sharing the same ByteProvider.
- Inline split toggle at the top of the scrollbar; independent scroll, selection, caret per pane
ByteProvider.DataChangedpropagates modify / insert / delete to the peer pane (previously only modify events were forwarded)- Synced across panes: breadcrumb bar, format detection blocks, undo/redo, custom background overlays
- Focus borders in split mode only; status bar hidden on secondary pane
- Standalone-safe —
HexEditorSplitHostused inSample.HexEditor IDocumentEditorundo/redo always delegated to the primary pane (sharedUndoEngine)- Options toggle
ShowSplitToggleButton; layout persistence - HexEditor 3.3.1 ships this host plus an auto-generated
HexEditorSettingspanel, parsed fields, and a unifiedxmlns:hexnamespace
📐 Class Diagram — Round-Trip + UML 2.5 + DSL Importers
Round-trip code↔diagram editing for C# and VB.NET, with live sync and rich import/export.
- Live Sync code → diagram (ADR-021) — FileSystemWatcher + Roslyn workspace events, 300 ms debounce, cycle-prevention via per-file suppression window
- Round-trip diagram → code (ADR-022) — Roslyn
DocumentEditorpatches.cs/.vbon diagram edit;SourceFileBackupUndoEntrydouble-layer undo; preview-diff dialog - Round-trip wiring (ADR-034) — editor mutations (rename type/member, add/delete member, delete type, duplicate, change visibility) wired via
RoundTripScopehelper; in-memory-only nodes skip silently; 8 integration tests - VB.NET parity (ADR-037) —
VisualBasicRoundTripEditormirrors C# (11MemberEditcases via VBSyntaxFactory+ Formatter); 13 VB tests - UML 2.5 model enrichments (ADR-030) — generics with constraints, user-defined stereotypes, multiplicities
- Industrial undo + alignment (ADR-031) — undo depth 200 → 2000;
DiagramAlignmentService(6 align + 2 distribute + equalize-size) - DSL importers (ADR-032) —
IDiagramImporter+ Registry +MermaidImporter+PlantUmlImporter; round-trip with existing exporters - Target file resolver (ADR-035) —
DiagramTargetFileResolverinfers.cstarget for Add Class/Interface/Enum/Struct - ClassDiagram SDK surface (ADR-033) —
WpfHexEditor.Editor.ClassDiagram.Corere-exported viaWpfHexEditor.SDK; third-party plugins get RoundTrip / Import / CodeGen / Layout / Model contracts transitively - ClassDiagram code-gen pipeline (ADR-014) — IR +
ILanguageGenerator+ RoslynSyntaxFactory; C# + VB generators;ExportCodeDialogwith live preview + JSON settings; 65/65 tests pass
🌍 Full IDE Localization — 28 Languages
Per-assembly LocalizedResourceDictionary localization across all panels, menus, context menus, dialogs, and toolbar buttons — 77.9 % DynamicResource coverage; remaining literals are intentionally English (proper nouns, technical identifiers, icon glyphs).
ar-SA · cs-CZ · da-DK · de-DE · el-GR · es-419 · es-ES · fi-FI · fr-CA · fr-FR · hi-IN · hu-HU · id-ID · it-IT · ja-JP · ko-KR · nl-NL · pl-PL · pt-BR · pt-PT · ro-RO · ru-RU · sv-SE · th-TH · tr-TR · uk-UA · vi-VN · zh-CN
Includes 4 new OptionsResources keys (CodeEditor_Tab_Formatting, CodeEditor_HighlightCurrentLine, TextEditor_WordWrap, TextEditor_HighlightCurrentLine) × 29 locales, fully DynamicResource on CodeEditorFormattingPage and TextEditorOptionsPage, plus a new ErrorPanelOptionsPage.
🐞 Core Module Integrations
Two former plugins promoted to first-class core IDE modules — extension points preserved.
- DebugModule —
WpfHexEditor.Plugins.Debuggermerged intoWpfHexEditor.App/Debug; nine debug panels (Locals, Autos, Watch, Call Stack, Threads, Tasks, Registers, Memory, Disassembly) pre-register shells at startup for immediate docking restore - VS-style Call Stack toolbar — search field, navigate backward/forward (← / →), Show All Threads, Show External Code toggles
IDebugAdapterRegistry+IDebugVisualizerRegistrySDK extension points preserved- AssemblyExplorer — merged into
WpfHexEditor.App/AssemblyExplorer; NuGet diamond resolved viaScripting.Common 4.14pin
📦 NuGet Release Wave — 13 Standalone Packages
Coordinated NuGet publish across the standalone package portfolio, with full satellite-assembly isolation and bundled guides.
| Package | Version |
|---|---|
WPFHexaEditor |
3.3.1 |
WpfCodeEditor |
0.9.9.0 |
WpfDocking |
0.9.8.0 |
WpfTerminal |
0.9.7.1 |
WpfColorPicker |
2.0.2 |
WpfHexEditor.Core.ByteProvider |
1.1.1 |
WpfHexEditor.Core.BinaryAnalysis |
1.0.1 |
whfmt.FileFormatCatalog |
1.3.2 |
whfmt.Analysis |
1.1.1 |
whfmt.CodeGen |
1.1.2 |
whfmt.Fuzz |
1.1.1 |
whfmt.Validate |
1.0.0 |
WpfHexEditor.SDK |
2.0.0 (frozen) |
Satellite-assembly contamination fix (_BundledProjectDll direct-path pattern + single _AllSatellites glob with per-filename Condition) resolves NU5118 collisions; GeneratePackageOnBuild=false on all non-release projects; full guide docs bundled in each package.
🔬 .whfmt v3 + 799 Format Definitions
- +109 definitions since v0.6.4.75 (690+ → 799+); Groups C–J complete
- Schema v3 canonical — camelCase, 15 block types, 2 variable schemas; 0 deletions during migration (ADR-038)
- Expression engine + function registry
FormatSchemaValidatorwired at load time (schema v2.3/v3 validation on open, violations reported viaFormatLoadFailure)whfmt.FileFormatCatalogv1.1 utility layer —FormatMatcher,FormatFileAnalyzer,CatalogQuery,FormatMetadataExtensions,FormatSummaryBuilder;GetAll()/GetCategories()returnIReadOnlySet<T>backed byFrozenSet<T>;LazyInitializer.EnsureInitializedreplaces manual double-checked lock- Whfmt load-failure guard (ADR-004) — dual-pipeline guard (IDE =
OutputLoggerred/yellow, standalone =StatusTextred) +EmbeddedWhfmt_Testsbuild gate (6 tests, 427+ formats)
✨ Other Additions
Editors & Code Intelligence
- WpfCodeEditor 0.9.9.0 — inline code actions, Refactor ▶ menu with preview dialog (rename, extract method, inline variable, change signature), dynamic snippets with variable expansion + user store (
~/.wpfcodeeditor/snippets/*.json), Debugger integration (Data Tips, Autos, edit-in-place, Run to Cursor, Exception Settings, Attach to Process),IDebugValueProviderSDK contract +DebugValueHintsLayeroverlay, LSP semantic token colorisation, zoom snap-to-pixel - Roslyn semantic inline hints upgrade —
IReferenceCountProviderSDK contract decouples reference counting from the Roslyn implementation; exposed viaIDEHostContext; whfmt-drivenCanProvideopt-in per language - Ctrl+Click Links & Emails —
ClickableLinksEnabled/ClickableEmailsEnabledDPs in CodeEditor and TextEditor; opens URLs in default browser and emails in default mail client - Goto Position dialog — jump directly to a byte offset in the hex view
- LSP semantic highlighting — semantic token colorisation wired in Code Editor
UI, Docking & Window Management
- Window menu — new top-level
_Windowmenu — Close / Close All But This / Close All Documents / Next / Previous Document (Ctrl+Tab),F11fullscreen via Win32MonitorFromWindow/GetMonitorInfo(covers full monitor including taskbar, restores exact position) - Docking 0.9.8.0 — horizontal reorder for docked tool-panel tabs (drag left/right within the same edge); tab-switch triple-fire eliminated (layout passes 3 → 1); StaticResource toolbar labels resolved on first display; full localization wired
- Docking overlay polish — VS-like overlay border with active-tab gap, placement-aware tab styles (top → top CornerRadius, bottom → bottom CornerRadius),
SelectionBordermatrix (TopBar/FullBorder/Glow × Top/Bottom) - Docking layout auto-reset — corrupt or oversized saved layouts auto-reset on startup instead of crashing; layout persistence save/restore on close/load wired in
MainWindow - Context menu polish — drop shadow + accent band on all context menus; MDL2 icons; Light theme
ContextMenualigned with Dark theme style
HexEditor Engine
- Shared
UndoEngine—IUndoAwareEditorcontract +HexByteUndoEntry;DocumentBufferundo wiring viaByteProvider;Ctrl+Z/Yhistory shared across editor types - ByteProvider extraction — promoted to standalone
WpfHexEditor.Core.ByteProviderlibrary and published as a standalone NuGet package; regression test suite added - HexEditor drag-selection auto-scroll — window-level mouse capture for both HexEditor and TextEditor; scroll continues while the cursor is outside the control boundary
- Column highlight defaults —
ShowColumnHighlightandShowAsciiColumnHighlightdefault tofalseto reduce visual noise out of the box
Build & NuGet Infrastructure
- NuGet CI pipeline — generic publish workflow covering all 23 packages
- NuGet satellite isolation —
_BundledProjectDlldirect-path pattern; single_AllSatellitesglob + per-filenameCondition; ResxEditor, Debugger, and other unrelated satellites no longer appear inside standalone packages GeneratePackageOnBuild=falseon all non-release projects to prevent auto-pack during solution builds
🐛 Notable Fixes
- Caret / insert position mismatch on wrapped lines —
GetCharOffsetAtPointusedFormattedTextgeometry (different wrap width from GlyphRun); fixed by routing all hit-testing throughGetCharOffsetFromGlyphLines - Vertical ruler not tracking document scroll —
SetVerticalOffsetdid not firePageGeometryChanged; both the firing and the subscription path are fixed - Ruler indent markers frozen on paragraph click —
OnMouseDownand edit-path operations did not call caret-moved notifications; horizontal ruler indent markers only updated whenCommitCaretwas reached via keyboard - Document opens dirty —
UndoEngine.MarkSaved()andmodel.IsDirty = falsenow called inBindModel GetCaretXArgumentOutOfRangeException — guard added when_caretOffsetexceeds the current block's text length after a deletion- Minimap viewport rect disproportionate — viewport rectangle in
DocumentMiniMapControlwas computed using pre-zoom metrics; fixed to use the same scaled content height as the renderer - AssemblyExplorer blank panel on restore — dual-cache bug where
DockControl._displayContentkept serving a stale placeholder after_contentCachewas cleared; both caches now invalidated together - Module panel restore dual-cache — clearing only
_contentCacheleft_displayContentserving the stale placeholder on next activation; both caches now cleared onEagerContentKeymiss - Code Analysis empty column headers —
DataGridTextColumn.Header,ComboBoxItem.Content, and button labels were rendering as empty becauseDynamicResource CodeAnalysis_*keys require the dictionary to be in the local UserControl scope; fixed by includingAppLocalizedDictionaryinUserControl.Resources.MergedDictionaries - Code Analysis Re-run always ran on solution —
_reRunCallbackwas wired toGetSolutionPath()unconditionally; now uses_lastScope/_lastPath - HexEditor
ByteProvider.DataChanged— now propagates all mutation types (modify / insert / delete) to the peer pane in split view - BreadcrumbBar freeze + phantom row — Render-priority dispatcher guard prevents mouse re-dispatch loop during visual tree rebuild; visual tree locked during navigation; XAML/code-behind duplication resolved; double-rebuild-per-click eliminated
- Bookmark chip re-render — stopped rebuilding chips on every navigation tick; rebuild only on actual bookmark set changes
- Minimap scroll — scroll position in
MinimapControlnow tracks viewport changes correctly - Plugin panel loading overlay — suppressed after the first initialization; no longer flashes on subsequent panel activations
- ClassDiagram layout loop — removed
ArrangeOverride100 k extent that caused an infinite WPF layout loop - Satellite contamination in nupkgs — unrelated assembly satellites no longer appear inside standalone packages
- NU5118 collision — multiple
TfmSpecificPackageFileitems with overlapping culture folders resolved by single-glob + condition pattern - WpfDocking toolbar StaticResource — localized labels now resolve correctly on first display (pre-register output queue)
- DocEditor ruler zoom alignment — ruler horizontal origin computed via
TranslatePointfrom renderer canvas to ruler control; handles margin, padding, and container offsets correctly at all zoom levels
🔧 This Release (0.6.5.8)
WpfHexEditor.AppVersion/AssemblyVersion/FileVersionreset from0.6.5.225to0.6.5.8— new small monotonic build counter inside the0.6.5.*revision slot. No functional change versus0.6.5.225.docs/CHANGELOG.md— new[0.6.5.8]HEAD entry with a per-component version tabledocs/ROADMAP.md—Last revised: 2026-05-12; current-build banner; "Recently Shipped" row prependedREADME.md— IDE badge →v0.6.5.8, NuGet badge realigned to 13 packages, revised date- Guide headers tagged with their package version for consistency:
WpfTerminal v0.9.7.1,WpfDocking v0.9.8.0,WpfCodeEditor v0.9.9.0
⬇️ Download
WpfHexEditor-IDE-0.6.5.8-win-x64.zip — self-contained Windows x64 build (.NET 8 runtime embedded). Unzip and run WpfHexEditor.App.exe. No .NET SDK required on the target machine.
📚 Documentation
- Full changelog: docs/CHANGELOG.md
- Roadmap: docs/ROADMAP.md
- Per-package guides bundled inside each NuGet (
WPFHexaEditor-guide.md,WpfCodeEditor-guide.md,WpfDocking-guide.md,WpfTerminal-guide.md,WpfColorPicker-guide.md,whfmt-FileFormatCatalog-guide.md)