* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Normalize conflict check errors in sync (#164)
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Return errors when sync is attempted while locked (#165)
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Set lastError when parallel uploads all fail (#167)
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Block uploads on conflict check errors (#168)
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Fix lastError on upload failures (#170)
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
* Normalize conflict check errors in parallel sync (#171)
* Optimize syncAllProviders to run concurrently and encrypt once
Refactored CloudSyncManager to support concurrent cloud provider synchronization.
Previously, synchronization was sequential: check -> encrypt -> upload for each provider.
Now, it performs:
1. Parallel checks for conflicts/remote versions.
2. Single encryption of the payload (saving CPU/time).
3. Parallel uploads to all valid providers.
Helper methods `checkProviderConflict` and `uploadToProvider` were introduced to share logic between `syncToProvider` and `syncAllProviders`.
This results in a ~3x performance improvement in benchmarks (from ~1650ms to ~550ms for 3 providers).
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
---------
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
- Added `setDeviceName` method to `CloudSyncManager` to update state, persist to local storage, and notify listeners.
- Updated `useCloudSync` hook to expose the `setDeviceName` function from the manager.
- Ensures device name updates are correctly handled and persisted across sessions.
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Replaced the hardcoded '1.0.0' version string in CloudSyncManager.ts with the version from package.json.
Enabled resolveJsonModule in tsconfig.json to support JSON imports.
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
- Add CompressedUploadDialog component to let users choose between compressed and regular transfer methods
- Implement compressUploadService for handling folder compression and extraction on the server
- Add compressUploadBridge to expose compression functionality to the renderer process
- Add sftpUseCompressedUpload setting with three modes: ask, enabled, disabled
- Add new upload progress states: compressing, extracting, scanning, completed
- Add i18n translations for upload dialog and settings in English and Chinese
- Update SFTP modal to support compressed upload workflow with progress tracking
- Add storage key for persisting compressed upload preference across sessions
- Significantly reduces transfer time for folders by using tar compression when available on server
- Fix managed host sync: add group field to change detection
- Auto-set managedSourceId when moving host to managed group
- Add 'managed' badge to managed hosts in VaultView
- Fix file path resolution for managed sources using webUtils
- Add managedSources prop to HostDetailsPanel for proper sync
- Restrict spaces in label for managed hosts
- Reorder HostDetailsPanel sections: General > Address > Port & Credentials
- Add debug logging for managed source sync troubleshooting
- Add tree view mode alongside existing grid and list views
- Implement hierarchical display of hosts organized by groups
- Add expand/collapse all controls with Chinese translations
- Support all sorting modes (A-Z, Z-A, newest, oldest) in tree view
- Persist expand/collapse state across view switches and app restarts
- Hide Groups section in tree view to avoid duplication
- Display ungrouped hosts at root level instead of "General" group
- Add missing delete group dialog with proper translations
- Maintain full functionality: search, filtering, drag-drop, context menus
Technical changes:
- Create HostTreeView component with TreeNode recursive structure
- Add useTreeExpandedState hook for persistent state management
- Extend ViewMode type to include "tree" option
- Add sortMode prop to enable dynamic sorting in tree structure
- Separate group tree logic for tree view vs other view modes
- Add comprehensive English and Chinese translations
Add Pure Black dark theme with true black background (#000000) for AMOLED screens, and Lavender light theme to balance theme count. Also increase sidebar nav item selection contrast from 5% to 10% for better visibility in dark themes.
Co-Authored-By: Claude <noreply@anthropic.com>
Change rendererType from boolean to 'auto' | 'webgl' | 'canvas':
- 'auto' (default): Uses Canvas on low-memory devices (<=4GB), WebGL otherwise
- 'webgl': Force WebGL renderer
- 'canvas': Force Canvas renderer
This preserves the automatic low-memory device detection that was
inadvertently disabled when always passing a boolean value.
Co-Authored-By: Claude <noreply@anthropic.com>
- Add renderer selection (WebGL/Canvas) in terminal settings
- Remove macOS restriction for Canvas renderer, allow all platforms
- Fix Combobox dropdown to show all options when opened instead of
filtering by current value
- Add i18n translations for new rendering settings
Closes#80
Co-Authored-By: Claude <noreply@anthropic.com>
- Add manual export button in LogView to save session logs to file
- Add auto-save settings in System tab to automatically save logs when sessions end
- Support three formats: plain text (.txt), raw ANSI (.log), and HTML (.html)
- Logs are organized by host in subdirectories with timestamp filenames
- Add i18n support for English and Chinese
Closes#104
Co-Authored-By: Claude <noreply@anthropic.com>
Refactors UI font handling to support dynamic font loading and improves selection in settings.
Implements "Load More" pagination for connection logs, enhancing performance and user experience with large datasets. Adds lazy loading for the Connection Logs Manager.
Addresses an issue in `usePortForwardingState` to prevent duplicate backend sync calls in React StrictMode. Improves IPC communication robustness by checking window destruction status. Refines the visual presentation of the snippets empty state.
- Add UI fonts configuration with 21 font options
- Add state management for UI font preference
- Add i18n translations (English/Chinese)
- Apply font via CSS variable --font-sans
- Support cross-window sync via IPC/localStorage
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
Replace ANSI escape sequence-based text processing with xterm.js's
Decoration API for keyword highlighting. This "lazy" approach only
processes visible viewport rows and uses debounced refresh, ensuring
zero impact on scrolling performance.
Key changes:
- New KeywordHighlighter class using IDecoration/IMarker APIs
- Decorations refresh on scroll, write, and resize events
- Skip highlighting in alternate buffer (vim, htop, etc.)
- Add configurable debounce delay (200ms default)
- Remove inline ANSI color injection from data stream
Co-Authored-By: Claude <noreply@anthropic.com>
Implements file watching to automatically sync changes back to remote:
- Add fileWatcherBridge in Electron for watching local temp files
- Add startFileWatch/stopFileWatch APIs in preload
- Add sftpAutoSync setting with UI toggle in settings
- Update downloadToTempAndOpen to support file watching
- Add i18n translations for auto-sync UI
- Show toast notifications when files are synced to remote
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
- Improve font filtering logic with word boundary matching to avoid false positives
- Rename snake_case variable to camelCase (mono_fonts -> monoFonts)
- Translate Chinese comments to English
- Add TypeScript type definitions for Font Access API
- Check API availability before calling queryLocalFonts
- Apply CJK fallback fonts to local fonts
- Add 'local-' prefix for local font IDs to avoid collisions
- Handle permission denied gracefully
- Use TERMINAL_FONTS as default for availableFonts
- Add safer fallbacks for empty availableFonts in all components
- Export withCjkFallback function for reuse
Address code review feedback:
- Extract parseRuleIdFromTunnelId helper function with clear UUID validation
- Use constants for tunnel ID prefix and UUID regex pattern
- Simplify syncWithBackend to return void since return value wasn't used
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
- Add stopAllPortForwards() to portForwardingBridge.cjs to cleanup tunnels on app quit
- Call port forwarding cleanup in main.cjs will-quit handler
- Add syncWithBackend() to portForwardingService.ts to query backend for active tunnels
- Update usePortForwardingState.ts to sync with backend on mount
Co-authored-by: binaricat <16399091+binaricat@users.noreply.github.com>
Drops all SMB provider types, UI, and logic to simplify codebase and focus on maintained sync backends. Reduces complexity and maintenance burden by eliminating unused integration.
Ensures state updates and auto-unlock logic respond correctly when the master key is created or removed in another window. Prevents stale unlock attempts and synchronizes security state, improving multi-window cloud sync reliability.
Implements automatic and manual update checking, displaying toast notifications when new versions are available or when the app is up to date. Enhances the toast utility to support clickable actions, custom labels, and improved accessibility. Updates UI to surface update status more prominently and localizes new update-related messages.
Improves user awareness of available updates and provides a smoother update experience.
Introduces UI and logic for users to reset local sync data, version, and history,
ensuring the next sync retrieves fresh data from the cloud. Enhances recovery from
sync issues and supports user control over local cloud data state. Updates
translations for both English and Chinese.
Improves configuration security and flexibility by reading OAuth
client IDs and secrets from environment variables instead of
hardcoding them. Enables easier key management across environments
and adds support for Google client secret in token exchange flows.
Enhances the OAuth authorization experience with modern, branded feedback pages and introduces loading overlays for popups. Refines popup window handling for consistency and security. Removes detailed OneDrive token logging and JWT inspection for cleaner logs and better privacy.
Updates OneDrive OAuth flow to use the correct consumer endpoints and consistent, explicit scopes. Adds robust JWT decoding, token claim logging, and better error diagnostics for 401 responses. Implements automatic token refresh and retry logic for unauthorized errors, improving reliability and user experience during sync operations.
Integrates OneDrive cloud sync operations with Electron main process to bypass CORS and improve security.
Updates OAuth endpoints, client ID, and bridges all relevant sync file methods.
Simplifies error logging for provider connect failures.
Improves error message display in the UI.
Enables network operations for cloud sync providers (WebDAV, S3)
to be proxied via the main process, improving reliability and
support for Electron environments.
Improves error reporting for cloud sync connections with
detailed, context-rich error messages in the UI to assist
debugging and user support.
Refines hotkey debug logging, only enabling verbose output
when explicitly requested.
Relates to user-reported sync reliability and error clarity.
Introduces a distinct "connecting" state for cloud sync providers, improving UI feedback during authentication flows. Enhances error messaging for network timeouts and unreachable services, helping users diagnose connection issues more easily. Updates translations and disables connect actions while connecting to prevent duplicate requests.
Introduces encrypted cloud sync via WebDAV and S3-compatible storage, including UI for configuration, validation, and connection management. Enables selection as active sync providers alongside existing options. Updates i18n, state, and domain types to accommodate new providers, unifying connection logic and improving extensibility for future sync backends.
Introduces user-selectable accent color with custom and preset options, including UI and persistence updates. Enhances appearance settings with a toggle for custom accent mode and color picker support. Also adds several new light and dark UI theme presets for greater personalization.
Improves theme initialization for accent color and updates localization strings for related settings.
Replaces the previous HSL-based accent color setting with selectable theme color presets for both light and dark modes. Updates settings state, storage, and UI to allow users to pick from predefined color palettes, improving consistency and customization. Syncs the new theme colors with Electron window backgrounds for native appearance integration. Updates language files and cleans up legacy color logic.
Introduces persistent view mode storage for hosts, keys, snippets,
known hosts, and port forwarding by using dedicated storage keys
and a reusable view mode hook. Improves user experience by
remembering individual section preferences instead of defaulting
to "grid" on each visit.
Improves shortcut editing experience by disabling global hotkey interception while a keybinding is being recorded.
Ensures that hotkey recording state persists and synchronizes across settings and UI.
Prevents conflicts between shortcut editor and app-level key handling.
Replaces the Ghostty Web terminal backend with xterm.js, updating references, dependencies, and styles accordingly. Removes Ghostty-specific initialization, CSS, and dependencies for improved compatibility and maintainability. Updates terminal and SFTP mounting to use React lazy loading for better performance. Improves Electron window startup to avoid initial white flash. Cleans up cloud adapter dynamic imports for more efficient loading.
Updates documentation to reflect the terminal engine change.
Eliminates storage and usage of the Google OAuth client secret
to enhance security and prevent accidental exposure of sensitive
credentials. Refactors authentication flows to operate without
the embedded secret.
Introduces reusable SSH identities for authentication, allowing hosts to reference centralized identity records containing usernames, passwords, and key/certificate associations. Updates connection, SFTP, terminal, and sync logic to resolve credentials via identities, improving credential management and reuse.
Enhances UI for identity selection, editing, and deletion. Updates localization for related identity and credential strings. Ensures identities are included in sync and vault persistence.
Streamlines SSH connection attempts by preferring key-based auth with fallback to password, both for host and identity-based authentication.
Facilitates safer, more flexible credential management across the application.
Implements comprehensive i18n support, replacing hardcoded UI strings with translation keys and introducing an i18n provider across the app. Adds persistent UI language selection, cross-window sync, and system menu localization. Updates settings and state to handle locale, propagates language changes to Electron, and adjusts components for runtime translation.
Enables a user-friendly, multi-language experience and prepares the app for further language expansion.
Drops all biometric (Termius-style), WebAuthn, and FIDO2 SSH key logic, UI, and dependencies.
Simplifies key storage and authentication to only support standard and certificate keys.
Eliminates related backend, OS Secure Storage, and Windows Hello/Touch ID code.
Archives any legacy key records for migration safety.
Reduces complexity and potential maintenance/security burden.
Implements Google Drive sync operations (find, create, update, download, delete) via the Electron main process to work around CORS and COEP restrictions in the renderer. Updates the preload bridge and type definitions to expose new API methods, and adapts the sync logic to prefer main process proxies when available. Improves error handling and ensures prompt UI updates on disconnect.
Enables more reliable Google Drive cloud sync across platforms.
Routes Google OAuth code exchange, token refresh, and user info requests through the main process to avoid CORS issues. Improves security and reliability of authentication and cloud sync by using IPC handlers instead of direct client-side HTTP requests.
Persists and auto-unlocks the cloud sync vault master key using the operating system's secure storage,
eliminating the need for repeated password entry after initial unlock. Enhances UX with dialog-based
unlock and key change flows, removes the dedicated locked screen, and synchronizes the key seamlessly
across app windows. Improves error handling for locked or conflicting states and ensures session password
is cleared on lock or failed unlock.