[1.0.0] - 2026-02-16

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.
Added
Automatic Update Notification - App checks for new versions on startup and every 6 hours
Fetches
release.jsonfrom 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)
Fixed
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
toggleItemCheckedwhich only toggled the checkbox without running the stepNow calls
executeAndCheckto 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 = ONat connection initializationAdded 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 propagationReplaced checklist config serialization
unwrap()with explicit error handlingHardened
get_data_pathsparent-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, andperflight-group-by-modePrevents stale library filters/view mode from surviving a full reset
Changed
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 payloadsValidation 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 entirelyPersistent client_id stored in database settings for consistent user tracking across sessions
Added explicit Content Security Policy (CSP) to
tauri.conf.jsonreplacing the implicit default