What a release! We are staying on the forefront of AI innovation while strengthening the core cross-platform .NET open-source ecosystem. The February release delivers something for everyone.
Studio users get tighter AI integration and Hot Design UX and workflow enhancements.
All users benefit from long-requested Unicode text support, further WebView2 improvements, drag-and-drop for browser targets, and a plethora of performance and stability fixes.
The numbers speak for themselves: 450+ community and customer issues resolved, delivering a faster, more stable Uno Platform experience end-to-end.
Note
- Please refer to the migration guide when upgrading to Uno Platform 6.5.
Read more on our blog post!
Here's the full change log:
Features
- Add
CLAUDE.md(28ab1a3) - Add basic regular snap points support for
ItemsPresenter(3df6143) - Add BindableAttribute to Uno.Foundation types for NAOT trimmer (12d31b5)
- Add DragUI support for external drag operations in Win32DragDropExtension (1d79256)
- Add DragUI support for external drag operations in WpfDragDropExtension (7e1dcee)
- Add file icon extraction for non-image files in Win32 drag-and-drop (b6a8df0)
- Add GeneratedCode and EditorBrowsable attributes to GlobalStaticResources class (8c8a73c)
- Add HTML clipboard sample to ClipboardTests (0aa213b)
- Add HTML format support for Clipboard on WebAssembly (2151f2b)
- Add JsonToObject markup extension (400572f)
- Add loopback address support for WASM and desktop platforms (6839b73)
- Add support for DispatchNewWindowRequested Wasm (fdfcf8d)
- Add support for MCP roots (7905b01)
- Add support for NewWindowRequestedCallback on macOS (0a31e77)
- Add support for tools caching (4416c5f)
- Add support for WrapMode in
PipsPager(64774da) - Add table of contents generation to llms files (adeba90)
- Add validation for CornerRadius, GridLength, and numeric types in XAML generator (70e2cef)
- Add WebView2 window close test page with keyboard shortcut functionality (53d8694)
- Adjust for multi-screen support (b46e2e4)
- Adjust runtime tests layout (4a635d4)
- Cache last HTML content on macOS (495c3a6)
- Correctly update drag regions on
WindowChromeand layout changes (b568f24) - Dynamically retrieve generator version from assembly (2b888b7)
- Enable partial code gen with invalid XAML (5d861f9)
- Enhance parser en code gen to pass over invalid syntax in Bindings (e4d7f8e)
- Enter filters including test class name (7f5a8a8)
- GBM + libDRM for linux framebuffer (7ae81c9)
- hr: Add ability to add/edit/delete multiple files at once (9df4175)
- hr: Add support for add cource code through HR (b7b5661)
- hr: Add support for multi TFM project, making support for add availble for mobile targets (fd72c60)
- hr: Make support of HRinfo check more reliable (1279f65)
- hr: Make sure we never init 2 HR workspace (173036f)
- Implement
WebView2NewWindowRequested event for all platforms (c6f6ff8) - Implement Option 2 - Remove matrix strategy and use inputs.branch with master fallback (c850497)
- Implement Package.Current.Id.Version for Skia and WASM platforms (aa8a7e1)
- Improve code generation erro reporting (32223de)
- Improve runtime tests output (28e09b7)
- Improve XAML gen error handling by continuing if object properties gen fails (d7240fa)
- mcp: Add tools list priming and solution folder (4d34e40)
- Output class/method names to nunit output document (bdbf21a)
- Remove legacy #error in XAML code generation (b502c84), closes #error
- Render file icon from shell information (f812b33)
- Reset
AppWindowTitleBarto default (ad521ed) - Restore
staticmethod when hot reload disabled (7fef569) - Separate Uno-specifics, add missing property notifications (5b4d35b)
- Support predictive back navigation in Android 15+ (8d66386)
- Track Inconclusive runtime tests (bbc6eb3)
- Use assembly version for
PackageId.Version(e57af79) - Use version in GeneratedCode attribute (af89841)
- wasmskia: Drag & drop support (149ab96)
- wasm: software rendering fallback (6e9fbca)
- win32: add support IDataObjectAsyncCapability Drag&Drop operations (43f8530)
- WinUI porting agent (896cee4)
- WinUI StackPanel (06b261d)
- X11: EGL+GLES support (57ff072)
Performance Improvements
- Avoid calculating the matrix multiple times (bd50f00)
- avoid creating unnecessary FrameworkTemplatePool entry (f7538bc)
- Cache logger instance and align exception handling (7012547)
- on macOS and Windows, load CLDR data from a shared icudt.dat instead of dynamically linking the data (82f28cc)
- Optimize loopback address duplicate check with HashSet (df01b05)
Bug Fixes
AndroidXversion overrides (68650c7)IMediaPlayerExtensionshould remainpublic(478e34e)SystemFocusVisualrender transform (e0ee4ac)- Add better error handling for custom markup extensions (edbfdd3)
- Add InitializeWithWindow to MessageDialog samples (2cb10bd)
- Add missing callback (f527697)
- Add missing sass:color import for lighten() function (ea94b68)
- Add null checks for empty version arrays and fix race condition in error handling (bc9bf87)
- Add Thickness validation to generate UXAML0001 for invalid margin values (4c7c4df)
- Address accessibility and scroll handler review comments (f8b9a3f)
- Address code review comments (dd7b60b)
- Address code review feedback - add HTML encoding and truncation (d1085ad)
- Address code review feedback - fix resource leaks, null checks, and improve documentation (14c657d)
- Address markdown linter issues with list formatting (17ccd41)
- Address open review comments - thread safety and clarifications (238bff3)
- Address PR review feedback - semicolon, range operator, and HTML behavior (b600777)
- Address review comments - XSS, memory leak, performance, aria-label (c9dc705)
- Address XSS vulnerability in edit link icon (febaf2f)
- Adjust
When_Visibility_Changesto run only for types with a parameterless constructor (180aea1) - Adjust compat attributes version inclusion (2aaee32)
- Adjust DllImportResolver for net10 compatibility (23021d5)
- Adjust MCP start and testing (0434330)
- Adjust nuget override location (6464f02)
- Adjust WebSocket error logging (258ee99)
- adjusted highlight in box (09f4145)
- Allow extending into titlebar on startup (cf603bf)
- Allow Key property in XAML for KeyboardAccelerator (3ed77c6)
- Allow snap layouts menu on maximize button (9f31bd8)
- Android: application crash when activated from deep link skia (5aca07d)
- Android: deep link for skia when app is running (6fc74d4)
- Apply code review feedback - fix error messages and null handling (2a47a4b)
- Apply extension on show (f9727e6)
- Apply same race condition fix to MSAL and MediaPlayer WASM projects (c6f9ae5)
- Apply suggestion from @Copilot (5420c47)
- Apply suggestion from @Copilot (65c9f42)
- Avoid redundant Extension suffix lookup (43b31ed)
- build (9701fc7)
- CalendarView: header value format when Spanish culture (1470f85)
- calendarview: snapping back mid-scroll (b2b80c0)
- CalendarView: wrong value when Spanish culture (ee9562c)
- Catch WebSocketException to prevent invalid error logs on disconnect (b8c9958)
- change MP volume range to 0.0-1.0 and propagate volume change from libvlc (b7bf7d7)
- Clarify comment about cachedDataDisplayed flag (c20bc08)
- Combine IOException and WebSocketException handlers (d62f302)
- Complete exception handling and optimize MemoryStream allocation (122cc0d)
- ContentPresenter: native element not moving with scrolling (c35f2be)
- Correct comment syntax in
PipsPagerPage(309efde) - Correct conditional check in OnButtonEnabledChanged method (69b656d)
- Correct output file locations to articles/llms folder (8d57c6e)
- Correctly extract display point (8d76310)
- create issue in appropriate repo (ce0023c)
- Define SC_MASK constant and optimize parentHwnd variable reuse (38953ff)
- docs: Fix Markdown validation (f223ca7)
- docs: Remove duplicate uno-check line (e832779)
- docs: use aka link for upgrade guide instead of hardcoded path (e33295a)
- droid: statusbar inset after deeplinking (6ebbb11)
- Enable the back button predictive behavior on Android 16+ (7511454)
- Enable value type support in metadata provider and add runtime tests (9e1b33c)
- Ensure consistent case comparison for loopback address (249d746)
- Ensure finite values in native element measurement for Win32 (2273b29)
- Ensure MessageDialog tests are associated with the correct window (2dfbdc9)
- Ensure top edge resizability (22b2567)
- External image sizing and anchoring (b5e891f)
- first frame white flash (be54758)
- Fix binlogs not generated on demand by HR on unix systems (713127e)
- Fix cannot HR app with proejct depedency with code and rider (dec7461)
- Fix markdown formatting in documentation (33f4ca8)
- Fix missing owner on XAML objects (ea29871)
- Fix possible ENC0004 with HR (86741af)
- Fix possible invalid encoding when HR with VS (e806856)
- Forward Alt+F4 and WM_CLOSE from WebView2 to parent window (bebd503)
- GlobalStaticResources: add an exclude xml doc tag to the generated type definition (05f8d87)
- Handle collection properties in custom markup extensions (683aeac)
- Handle null version values and clarify error handling logic (7b9849a)
- Handle value types (structs) in BindableTypeProviders generator (d085b67)
- hid box when overlaps doc content (6a95b0e)
- hr: Avoid double update when editing multiple files as once (c4f64b7)
- hr: Ensure proper disposale of HR workspaces (4e45203)
- hr: Fix HR compiling all target (69a4083)
- hr: Fix HR messages lost by JsonRPC due to buffer limitations (fcc8f26)
- hr: Fix HR not working on iOS (2c2f201)
- hr: Fix possible concurrency issue in HR driving to miss / fail some updates (47c4039)
- hr: Make sure concurrent HR workspace (multi connection) does not fall in update loop (e096766)
- hr: Make sure to not send HR message to debuuger when not attached! (e67dcb1)
- Improve aria-label and add error handling to scroll handler (8799ba8)
- Improve mouse button state tracking and reset logic on macOS (ca5c9a5)
- Incorrect
TabViewlistview event (7d0fc61) - Increase WebSocketException log level to Information (a5c7d27)
- inherited dc lifecycle (389abe5)
- Initialize extended titlebar height on startup (f4df70c)
- Layout, naming (e2cdee1)
- link alignments (4cc1c56)
- lottie: use SKCanvasElement's size parameter to determine drawing bounds on Skia (1be6f17)
- macOS: only display windows when Activate is called (abb4c65)
- macos: prevent window contents from being stretched when resizing the window (21309c5)
- Make sure to generate HRInfo only for head project + make sure to detect changes! (5e81e6a)
- Make sure to not show temp files in HRI when doing HR with agent (9af1e17)
- Make sure to not wait response from IDE when no IDEChannel (6e128ce)
- mcp: Adjust for no tools_update notification on claude/codex (6480e23)
- mcp: Adjust roots support for windows paths (716cf4f)
- mcp: Ensure devserver is started on calling uno_app_set_roots (1127fa6)
- mcp: Use solution dir parameter (bda8920)
- Measurement logic for native elements on macOS (6760042)
- mem-leak in FrameworkTemplate (31c8a31)
- moved badge to breadcrumb (9df12f4)
- Order _openPopups with most recently opened popup at head (f73c7e4)
- Override TypeScript outFile to avoid TSC race condition (795d3af)
- Pass location.search to parseQueryString for deep linking tabs (fea065a)
- Potential race conditions (7fbaed7)
- Prevent empty PR creation in docs-updater workflow (42a4e15)
- Prevent NaN widths in TabView during layout timing differences (960c70f)
- Prevent roslyn bug by always generating change content (19951ac)
- Prevent XSS vulnerabilities by using DOM manipulation instead of innerHTML (1266080)
- progressring: ring sizing should respect the ActualSize and Stretch (aa81580)
- Properly parse and render nested items in TOC (2bb5a75)
- Properly set
AppWindowsizes on other targets (d504487) - pt: Fix possible leak on iOS when removing a page from tree while finger down (dac40ce)
- refreshcontainer: resetting content margin (f22cdc2)
- Regenerate test files (30beb3b)
- removed HD folder (cf8db37)
- removed HD folder (298042d)
- rendering: avoid limiting clip bounds to 999999 (7b8dd47)
- Replace closeModal() call with direct remove() to avoid ReferenceError (7660f09)
- Replace GetRelativePath with PowerShell 5.1 compatible implementation (3e9173e)
- Replace magic numbers with named constants for WM_SYSCOMMAND and SC_CLOSE (ccf457b)
- Replace remaining template literals with string concatenation (fc002b8)
- Replace template literal in badge title with string concatenation (1c14033)
- Replace template literals with string concatenation for command strings (789f1c9)
- Replace throw with AddError for invalid values to allow valid C# generation (cdec53b)
- Resolve markdown linting errors in README.md (535a388)
- Resolve race condition in Lottie WASM TypeScript compilation (6f60071)
- Resolve xref UIDs to actual markdown file URLs (d56094c)
- Retrieve drag data directly from IDataObject in Win32 implementation (c4699b5)
- Revert Int32 validation, add validation to SplitAndJoin for Vector2, Vector3, Point, Size, Matrix types (3c8b545)
- Review from copilot (3e9b164)
- Separate Space key handling to keyup to prevent page scrolling (956fed4)
- Simplify sample (023f0f0)
- skia: closed flyout still linger on screen (d5396cc)
- Support custom markup extensions in XamlReader.Load (72910a2)
- Sync backing field (f7d167a)
- textblock: selection should only show when focused (d098f15)
- textbox: prevent keys from dropping when input is too quick (5008219)
- textbox: propagate TextAlignment to TextBlock correctly (752bc7c)
- text: check for empty text in UnicodeText.GetLineAt (3c13220)
- text: erroneous logic when a text run ending in CRLF is moved to the next line due to line wrapping (b675e2f)
- text: fix GroupByInline when tab is at the end of the run (406d8ab)
- text: search for versioned libICU shared libs on Linux instead of only the versionless symlink (efa273e)
- text: selection when the content is a single letter (8edf4d4)
- TimePicker: numbers disappear while fast scrolling (8ad002b)
- TimePicker: showing 0 hours (7e7c8b9)
- TimePicker: value when 12 hours (e7f24e1)
- tooltip: dismiss tooltip when pointer interaction is "done" (c977505)
- Transform
TextBoxtouch-based carets correctly (4e16783) - trimer: Fix IL2026 JSON warnings in src/Uno.UI (d7c4fa3)
- Update build script to use new parameter names (8c4501a)
- Update comment to reference issue by title instead of placeholder URL (13c5208)
- Update doc/templates/uno/component/affix.js (4971474)
- Update doc/templates/uno/component/affix.js (5c6b41f)
- Update doc/templates/uno/component/affix.js (fc62228)
- Update doc/templates/uno/component/affix.js (a0b56bc)
- Update doc/templates/uno/component/affix.js (aecabc8)
- Update doc/templates/uno/component/affix.js (61c41ac)
- Update doc/templates/uno/component/affix.js (324ac55)
- Update doc/templates/uno/layout/_master.tmpl (dd2aacc)
- Update doc/templates/uno/layout/_master.tmpl (3d2e6f7)
- Update doc/templates/uno/main.js (e77c0c2)
- Update doc/templates/uno/main.js (0c3c718)
- Update doc/templates/uno/main.js (900117c)
- Update doc/templates/uno/main.js (97e892e)
- Update doc/templates/uno/main.js (c4583de)
- Update doc/templates/uno/main.js (269a610)
- Update doc/templates/uno/main.js (104bd4b)
- Update doc/templates/uno/main.js (dff8b8c)
- Update doc/templates/uno/styles/main.js (eb8db7f)
- Update doc/templates/uno/styles/main.js (ba02108)
- Update targetSdkVersion to 36 in native Android manifest for consistency (052f5e3)
- Use bulleted lists in TOC and fix file path URLs (a7ee92a)
- Use DependsOnTargets and _UnoEmbeddedResourcesInjection to ensure TypeScript files exist before embedding (09dddae)
- Use information log level for devserver CLI commands (609669b)
- Use null instead of empty strings for unused parameters (c988cd3)
- Use ParentHwnd property to get parent window handle (96b1363)
- Use the right Arrange/Measure overload for native targets (6369615)
- Use xref anchor links in llms-full.txt TOC instead of raw GitHub URLs (6d3d6f0)
- using standard badge appearance (e0c28ee)
- wasm: Add ControlLeft and ControlRight mappings to BrowserVirtualKeyHelper (f276f86)
- wasm: avoid exception in the first render call (e736efb)
- wasm: avoid ICU-loading crash on NativeAOT (78b503d)
- wasm: fix crashing when loading images (36a7d36)
- wasm: out of memory access when calling ubrk_open (68a7652)
- webview: prevent webview from being reset when detached then reattached (dbeb4c2)
- win32: generate an initial frame with the correct size when starting up as maximized (081be31)
- xamlreader: Accept valid toplevel properties and positional binding parameters (03229ce)