All notable changes to PassKey will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Cluster 5 UX: toast notifications, idle auto-lock with countdown warnings (including a 10s warning for the 30s tier), inline form validation, Activity Log with CSV export, illustrated empty states, forgot-password and clear-vault flows.
- TOTP / 2FA (RFC 6238) with import via QR code,
otpauth://URI or manual seed. - Compromised-password check via Have I Been Pwned (k-anonymity, opt-in).
- Identity fields: Middle name, Company, Username.
- Full localization in 6 languages (IT/EN/FR/DE/ES/PT).
- App and installer version bumped to 2.0.0; browser extensions to 1.0.1.
- Dark theme: unreadable secondary text and markers in the Verifier "Vault" tab.
- Browser extension: invisible popup action icons (copy username/password).
- Import: robust handling of Bitwarden / CSV / 1PUX, including encrypted, ZIP and unsupported files.
1.0.12 - 2026-05-05
- Installer follows system theme: The setup wizard now automatically switches between
light and dark appearance based on the Windows system theme (
WizardStyle=modern dynamicin Inno Setup 6.6+).
- ".NET must be installed" startup failure: PassKey v1.0.11 showed "You must install
or update .NET to run this application" because the bundled
.NET 10.0.7installer was failing silently during setup (likely due to a pre-existing .NET 8/9 installation triggering an incorrect skip condition). The fix switchesPassKey.Desktopback to self-contained publishing: the .NET runtime is now bundled directly in the application folder, so no separate .NET installer is required. The.NET 10.0.7redistributable has been removed from the installer entirely. Windows App Runtime 1.8.260416003 (introduced in v1.0.11) is still bundled and continues to address the Windows 11 25H2 STATUS_INVALID_IMAGE_HASH crash.
1.0.11 - 2026-05-04
- Windows 11 25H2 crash (STATUS_INVALID_IMAGE_HASH — Windows App Runtime 1.8.260101001):
PassKey v1.0.10 crashed on Windows 11 25H2 (Build 26200+) with exception code
0xc000027binMicrosoft.UI.Xaml.dlleven with the system-installed Windows App Runtime 1.8. The root cause is a compatibility bug in Windows App Runtime 1.8.260101001 with Windows 11 25H2. The fix upgrades the bundled Windows App Runtime installer and the NuGet SDK from1.8.260101001to 1.8.260416003 (released 21 April 2026).
1.0.10 - 2026-05-04
-
Windows 11 25H2 crash (STATUS_INVALID_IMAGE_HASH — self-contained .NET): PassKey v1.0.9 crashed on Windows 11 25H2 (Build 26200+) because the self-contained .NET 10 apphost triggers a WinRT activation incompatibility with the Windows App Runtime framework package:
Microsoft.UI.Xaml.dllthrowsSTATUS_INVALID_IMAGE_HASHinternally. The same crash was reproducible on clean VirtualBox VMs with no third-party security software, confirming the root cause is a Windows 11 25H2-specific behaviour.The fix switches
PassKey.Desktopto framework-dependent publishing (--self-contained false). The installer now bundles and silently installs the .NET 10.0.7 Runtime (29 MB, frombuilds.dotnet.microsoft.com) before launching PassKey, so end users still do not need to install .NET manually.The
BrowserHostcomponent remains self-contained (single-file executable, unaffected by the WinRT issue).
1.0.9 - 2026-05-04
-
HVCI crash (STATUS_INVALID_IMAGE_HASH): PassKey v1.0.7 and v1.0.8 crashed silently on every PC with Hypervisor-Protected Code Integrity (HVCI) enabled — the majority of modern Windows 11 systems with TPM. Windows Code Integrity rejected the NuGet-bundled
Microsoft.UI.Xaml.dllwith exception code0xc000027bbecause NuGet copies are not registered in the Windows system catalog. No window ever appeared and no crash log was written (the exception is a native SEH fault that bypasses .NETcatch).The fix removes
WindowsAppSDKSelfContainedfrom the build (the publish folder no longer containsMicrosoft.UI.Xaml.dll), adds an explicitBootstrap.Initialize(1.8)call inProgram.cs, and bundles the official Windows App Runtime 1.8 installer (WindowsAppRuntimeInstall-x64.exe) inside the PassKey installer. The runtime is installed silently during setup; its DLLs are fully trusted by Windows Code Integrity.A user-visible error dialog (Win32
MessageBoxW) is shown on the rare occasion thatBootstrap.Initializefails (e.g. corrupt runtime installation), replacing the previous silent disappearance.
1.0.8 - 2026-05-04
- Single-instance protection: launching PassKey when it is already running in the system tray now brings the existing window to the foreground instead of silently starting (and immediately hiding) a second invisible process. This was the primary cause of the "app installs but doesn't start" symptom reported on v1.0.7.
- Startup crash log: if the application fails to initialise before the main window is created,
a diagnostic file is written to
%LOCALAPPDATA%\PassKey\startup-crash.log. This makes silent startup failures diagnosable without attaching a debugger.
1.0.7 - 2026-05-02
- PassKey.Desktop is now published as a truly self-contained executable: the .NET 10 runtime is bundled inside the installer and the portable ZIP. Users no longer need to install .NET separately. The README claim "No .NET runtime required" is now accurate.
1.0.6 - 2026-05-01
- Empty state screens (Passwords, Credit Cards, Identities, Secure Notes) no longer show a duplicate add button at the centre of the page — the action is already available in the top-right toolbar
- Empty state subtitle text no longer wraps to a second line
- Passwords view: column headers (Title / Username / URL / Modified) are now hidden when the list is empty, keeping the empty state vertically centred
- All four empty state icons are now vertically aligned at the same height across sections
1.0.5 - 2026-05-01
- Silent update check at startup: compares the running version against the latest GitHub Release every 24 hours (throttled, no check on every launch)
- Non-invasive InfoBar notification in the main shell when a newer version is detected — shown above the content area, does not interrupt workflow
- Download & install button inside the InfoBar: downloads the installer in the background with a live progress bar, then launches it and exits the app cleanly
- What's new button: opens the GitHub Release page in the default browser
- Skip version: dismissing the InfoBar records the skipped version in
settings.json— the notification will not reappear for that version - Manual update check in Settings → Updates: a "Check now" button with spinner and a localised last-check timestamp (e.g. "Checked 3 min ago")
- Toggle in Settings to disable automatic update checks at startup
- All update-related strings fully localised in 6 languages (it-IT, en-GB, fr-FR, de-DE, es-ES, pt-PT)
IUpdateService/UpdateServicesingleton: GitHub Releases API viaHttpClient(10 s timeout,User-Agent: PassKey-Desktop-Updater/1.0), AOT-safeUpdateJsonContext(System.Text.Json source generation)- Streaming installer download with
HttpCompletionOption.ResponseHeadersReadand 80 KB buffer; temporary file cleaned up on failure ISettingsServiceextended withAutoUpdateCheckEnabled,LastUpdateCheckUtc(DateTime?, ISO 8601),SkippedUpdateVersion
1.0.0 - 2026-03-15
- Password vault with AES-256-GCM encryption (256-bit key, 96-bit nonce, 128-bit authentication tag)
- Dual KDF support: Argon2id (64 MB, 3 iterations, 4 threads — OWASP 2023) for new vault creation and master password changes; PBKDF2-SHA256 (600,000 iterations) for backward-compatible vault unlock
- Two-tier key architecture: KEK derived from master password wraps the DEK; changing the master password re-wraps the DEK without re-encrypting the vault blob
PinnedSecureBuffer— DEK held in GC-pinned managed memory, zeroed withCryptographicOperations.ZeroMemoryon dispose- Master password handled as
char[]/ReadOnlySpan<char>, cleared immediately after KDF computation - Encrypted backup and restore (
.pkbakformat: 4-byte magicPKBK+ version + Argon2id salt + AES-GCM nonce + encrypted payload) - Auto-clear clipboard after 30 seconds with Windows clipboard history suppression (
ClipboardContentOptions.IsAllowedInHistory = false)
- Password entries: title, URL, username, password, notes, and custom icon (letter avatar / Segoe MDL2 Assets glyph / uploaded PNG/JPG/ICO image ≤ 64 KB)
- Credit card management: BIN-based network detection (Visa, Mastercard, Amex, Discover, JCB, Maestro, Diners Club), real-time Luhn validation, 10 colour swatches
- Identity profiles: personal data (name, birth date, email, phone), postal address, and four document types (national ID, health card, driver's licence, passport)
- Secure notes: 10 categories with Fluent icons, pastel colour palette
- Password strength analyser: 0–4 score, estimated crack-time, actionable suggestions
- Password verifier: checks against known breach patterns
- Password generator: configurable length (8–128 chars), charset options (uppercase/lowercase/digits/symbols), real-time entropy display
- Dashboard: vault statistics (entry counts by type, recent activity log)
- Chrome extension (Manifest V3): service worker, content script, popup
- Firefox extension (Manifest V3): background scripts, content script, popup
PassKey.BrowserHost: self-contained single-file Native Messaging bridge- Ephemeral ECDH P-256 + HKDF-SHA256 + AES-256-GCM session encryption for all IPC messages
- Named Pipe with ACL: only the PassKey Desktop process owner can accept connections
- In-extension vault unlock: master password entered directly in the browser popup (no tab switch required)
- One-click autofill for username and password fields
- Framework-aware field detection: standard HTML forms, React (synthetic events), Angular, Vue virtual DOM
- Multi-step login form support (email-only step 1 → fills username; password fill happens on step 2)
- Dual-view popup: "This site" tab shows matching credentials; "All passwords" tab shows full vault with search
- Badge on the extension icon: number of credentials matching the current domain
passkey://URL scheme handler (registered in HKCU at first launch, no admin required)passkey://unlockdeep link: brings the app to the foreground and prompts for unlock- Native Messaging Host auto-registration in HKCU for both Chrome and Firefox at first launch
- Import from generic CSV (column auto-detection for title/URL/username/password/notes)
- Import from Bitwarden JSON export (v2 format)
- Import from 1Password
.1puxarchive
- Full 6-language support: Italian (it-IT), English (en-GB), French (fr-FR), German (de-DE), Spanish (es-ES), Portuguese (pt-PT)
- Language switching via process restart (required for Windows MRT Core resource loading in unpackaged apps)
- Language preference persisted in
settings.jsonand applied inApp()constructor beforeInitializeComponent() - All 6 languages applied to both the desktop app and browser extension popup
- WCAG AA compliant throughout the application
- All interactive elements have descriptive
AutomationProperties.Namevalues - Custom
AutomationPeerimplementations forSecureInputBoxandCreditCardControl - Live regions (
AutomationProperties.LiveSetting) for dynamic feedback messages - Full keyboard navigation:
Ctrl+N(new),Ctrl+F(search),Ctrl+L(lock vault),F2(edit selected),Del(delete selected with confirmation),Esc(close detail panel),Ctrl+1–7(navigate to vault sections) - Focus rings on all interactive elements;
FocusVisualKind.Revealset on the root element
- Fluent Design (WinUI 3, Windows App SDK 1.8), light theme
- Unpackaged app (
WindowsPackageType=None), self-contained x64 — no MSIX required SecureInputBoxcustom control (replaces the AOT-incompatible nativePasswordBox)- Press-and-hold eye icon to reveal password (pointer-based, not toggle)
CreditCardControlskeuomorphic card rendering with colour-coded network iconEmptyStateControlplaceholder shown in all empty list views with a primary action buttonNavigationViewshell with vault section icons, "Lock Vault" top-of-list entry, separator, "Help" and "Settings" items at the bottom
- Giuseppe Imperato — concept, design, product decisions
- Claude by Anthropic — architecture, implementation, documentation