You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@nativescript/core 9.1.3 (pkg.pr.new runtime abae298/cbec98bb), packaged WinUI 3 MSIX (org.octanexplat.windows61), Windows 11 x64, {N} Windows runtime alpha.
Defects verified on the packaged runtime
1. WinRT HSTRING marshalling is lossy past BMP ASCII
Windows.ApplicationModel.DataTransfer.DataPackage.SetText accepts any JS string, but the JS↔HSTRING marshalling mangles non-BMP content:
Non-BMP code points return '?' per UTF-16 unit — writing '😀' reads back '??'; '🇯🇵' reads back '????'; 'clip--😀-🇯🇵-e\u0301-\u0000-end' reads back 'clip--??-????-e'-'.
U+0301 combining acute maps to a codepage quote/acute char.
Text truncates at the first U+0000 ('before\0after' reads back 'before').
The exact mojibake is nondeterministic across identical launches — a lone '😀' returned '??' on some launches and the real '😀' on others.
Clipboard.SetContent+Flush commits are racy: an immediate GetTextAsync can read null or stale content; a ~350 ms settle is required for deterministic read-after-write.
BMP ASCII round-trips exactly. The same JS string round-trips correctly through PathIO.WriteTextAsync/ReadTextAsync (file IO), so the loss is specific to the clipboard/string marshalling path, not general string handling.
2. ApplicationDataContainer.ValuesIMap surface is unprojected
Windows.Storage.ApplicationData.Current.LocalSettings.Values projects as an opaque handle — none of the IMap surface (HasKey, Lookup, Insert, Remove, First, Size) is callable; ApplicationSettings.getString throws TypeError: ... Values.HasKey is not a function and direct member calls are silent no-ops. Preferences can only be persisted through a JSON document + the working file APIs.
Happy to share the qualification fixture that produced the evidence (packaged MSIX launches mw1bskqo, mw1iafcb, mw1jqr1q).
"Copy to clipboard" corrupts international text and emoji. Any app with a copy button — chat messages, contact names in non-Latin scripts (Chinese, Japanese, Arabic, Cyrillic names), addresses, emoji reactions, invite links with unicode slugs — delivers mojibake to the user's clipboard. A Chinese user copying an address gets ?? instead of the address; an emoji-only copy comes back as ??.
Copy-then-paste races.SetContent+Flush doesn't settle before the next read — a user (or automation) that copies and immediately pastes in-app can get null/stale content. "Copy invite link" buttons that verify by re-reading are nondeterministically flaky.
ApplicationSettings — the canonical {N} preferences API — throws on first use.getString/setString are how real apps persist auth tokens, "remember me", theme/onboarding flags, and feature flags. Values.HasKey is not a function means the standard preference path is unusable; apps must hand-roll a JSON file through the working PathIO APIs instead — which is what we now do, but every stock {N} app hits this wall.
U+0000 truncation silently drops serialized payloads. Escaped/binary-ish text or serialized content containing NULs truncates without error — data loss that looks like success.
The settings gap alone touches essentially every real {N} app on Windows; the clipboard loss hits any app with a copy feature serving non-ASCII users.
Activity
aleclarson commentedon Nov 4, 2026
Real-world impact:
??instead of the address; an emoji-only copy comes back as??.SetContent+Flushdoesn't settle before the next read — a user (or automation) that copies and immediately pastes in-app can getnull/stale content. "Copy invite link" buttons that verify by re-reading are nondeterministically flaky.ApplicationSettings— the canonical {N} preferences API — throws on first use.getString/setStringare how real apps persist auth tokens, "remember me", theme/onboarding flags, and feature flags.Values.HasKey is not a functionmeans the standard preference path is unusable; apps must hand-roll a JSON file through the workingPathIOAPIs instead — which is what we now do, but every stock {N} app hits this wall.U+0000truncation silently drops serialized payloads. Escaped/binary-ish text or serialized content containing NULs truncates without error — data loss that looks like success.The settings gap alone touches essentially every real {N} app on Windows; the clipboard loss hits any app with a copy feature serving non-ASCII users.
fix(windows): use the IMap members of LocalSettings.Values
triniwiz commentedon Nov 6, 2026
Update core to the
pkg.pr.new298c76dand the runtime to@nativescript/windows@1.0.0-beta.19