February 17th, 2026

PERFLIGHT's first public release. After multiple beta iterations refining addon management, flight services, and the pre-flight checklist, v1.0.0 marks the official launch on Flightsim.to. This release adds automatic update notifications and addresses several checklist reliability fixes discovered during beta testing.
Automatic Update Notification - App checks for new versions on startup and every 6 hours
Fetches release.json from perflight.com via Rust backend (bypasses WebView CSP)
Compares remote version against installed version using semver comparison
Shows info notification with "Update Now" button linking to Flightsim.to download page
24-hour snooze on dismiss prevents repeated prompts for the same version
6-hour TTL between checks to minimize network requests
Silently no-ops on any error (update checks never break the app)
"Clear All Data" resets all update check state (TTL, snooze, last seen version)
Database Reset Missing Checklist Tables - "Clear All Data" now properly clears checklist_state and checklist_items tables
Previously, resetting data left orphaned checklist records in the database
Tables are now cleared in correct FK order (checklist_state before checklist_items)
Checklist Delete Item State Leak - Deleting a checklist step now removes its check state and execution state
Previously, only the item was removed from the list; stale checkState and executionState entries persisted
Optimistic delete now cleans up all three maps (items, checkState, executionState) with full revert on error
Staleness Sync Used Wrong Handler - Flight plan staleness "Sync now" prompt now executes the sync action
Previously called toggleItemChecked which only toggled the checkbox without running the step
Now calls executeAndCheck to actually perform the SimBrief sync
SQLite Foreign Key Integrity Hardening - database connections now explicitly enable FK enforcement and run startup orphan cleanup
Added PRAGMA foreign_keys = ON at connection initialization
Added startup repair for legacy orphan records in checklist, sets, operation logs, user services, and addons-with-missing-library references
Added FK diagnostic logging via PRAGMA foreign_key_check
Command Panic Reduction (Checklist + Storage + Enable/Disable) - command handlers now return structured lock/serialization errors instead of panicking on common failure paths
Replaced multiple db.lock().unwrap() command-path usages with lock error propagation
Replaced checklist config serialization unwrap() with explicit error handling
Hardened get_data_paths parent-dir handling to avoid null-parent panic
Data Reset UX Consistency - "Clear All Data" now also clears persisted library UI preference keys
Clears perflight-visible-libraries, perflight-enabled-libraries (legacy), perflight-view-mode, and perflight-group-by-mode
Prevents stale library filters/view mode from surviving a full reset
Addon Toggle Locking Model (User Commands) - moved user-facing enable/disable/toggle junction filesystem operations outside long-held DB mutex scope
Reads addon/sim status under short lock windows
Performs junction create/remove without holding global DB lock
Re-acquires lock only for reconciliation/state persistence
Added per-addon in-memory pending guard for duplicate toggle suppression
Service-Layer Runtime Validation (Warn Mode) - added Zod validation at the Tauri invoke() boundary for checklist and library payloads
Validation currently runs in tolerant/warn mode to preserve compatibility with existing installs
Invalid payload shapes now emit structured warnings for follow-up hardening
Analytics Backend Migration - migrated analytics from frontend gtag.js to backend Rust via GA4 Measurement Protocol
Client-side gtag.js was silently blocked by Tauri WebView2 sandbox restrictions
Events now sent as HTTP POST from Rust backend using reqwest, bypassing WebView entirely
Persistent client_id stored in database settings for consistent user tracking across sessions
Added explicit Content Security Policy (CSP) to tauri.conf.json replacing the implicit default