Releases: risunCode/SurfManager
SurfManager 2.6.1 Final
[2.6.1] - 2026-02-08 Final build for v2
Summary
Reset and restore behavior update focused on account management flow and safer addon restore UX.
Added
- Reset tab now shows a mode selector modal with:
- Full Reset
- Remove Account Only
- Added backend API:
ResetAccountOnly(appKey)
Changed
RestoreAddonOnlyno longer closes/kills the target app.- Remove Account Only now removes known account files directly (no dependency on app
backup_itemsconfig):User/globalStorage/state.vscdbUser/globalStorage/state.vscdb.backupUser/globalStorage/storage.json
- Remove Account Only does not create auto-backup.
Fixed
- Fixed failure case:
no account-only backup items configured for <app>during Remove Account Only.
Full Changelog: v2.5.0...v2.6.1
SurfManager 2.5.0 - Performance and realibility
[2.5.0] - 2026-02-07
Summary
Major performance optimization release with loading animations. Backup/restore operations are now 3-5x faster, session listing is instant, and all action buttons now show loading feedback.
✨ New Features
Loading Animations
- All action buttons now display a spinning loader during operations
- Dynamic button text shows current state (e.g., "Resetting...", "Creating...", "Deleting...")
- Buttons are disabled during loading to prevent double-clicks
Reset Tab Loading States
- Reset button: spinner + "Resetting..." during reset operation
- Addons button: spinner + "Deleting..." during addon folder deletion
- New ID button: spinner + "Generating..." during machine ID generation
- Kill button: spinner + "Stopping..." during app termination
- Launch button: spinner + "Launching..." during app launch
Sessions Tab Loading States
- Create Backup button: spinner + "Creating..." during backup creation
- Kill and Continue button: spinner + "Processing..." during kill + backup
- Restore Session (context menu): spinner + "Restoring..." during restore
- Delete button (per row): spinner + "Deleting..." during session deletion
Config Tab Loading States
- Save button: spinner + "Saving..." during app configuration save
- Delete button: spinner during app deletion
- Active/Inactive toggle: spinner during status change
🚀 Performance Improvements
Parallel File Copying
- Backup and restore now use a worker pool with all available CPU cores
- Each worker uses optimized 4MB I/O buffers for maximum throughput
- File operations run concurrently instead of sequentially
Streaming Hash Computation
- Files are hashed while being copied using
io.TeeReader - Eliminates the previous double-read pattern (copy then hash)
- Reduces I/O by 50% during backup operations
Cached Metadata
- Session size and file count now stored in
.backup_meta.json - Session listing no longer walks directory trees to calculate size
- Session list loads instantly regardless of backup size
Lazy Hash Verification
- Hash verification removed from session listing (was blocking UI)
- New on-demand
VerifySessionIntegrityAPI for explicit integrity checks - Corrupted status no longer computed at list time
✨ New Features
Backend
- Added
VerifySessionIntegrity(appKey, sessionName)API for on-demand backup verification - Enhanced metadata schema with
hash_version,size, andfile_countfields - New v2 hash algorithm matching streaming computation
📝 Technical Changes
New Types
CopyJob- represents a file copy operation with source, destination, and relative pathFileCopyResult- holds copy result including size, hash, and error statusBackupMetadata- full metadata structure with cached values
New Functions
copyFileStreaming()- copies files while computing SHA256 in single passcopyWithWorkerPool()- parallel file copying with worker poolcollectCopyJobs*()- job collection helpers for items and addonscomputeHashFromResults()- aggregate hash from sorted file resultsreadBackupMetadataFull()- reads full metadata including cached sizecomputeBackupHashV2()- v2 hash algorithm for new backups
🔄 Backwards Compatibility
- Old backups without cached size fall back to directory walk
- Old hash format (v1) automatically detected and verified correctly
- No migration required - old backups work seamlessly
SurfManger 2.1
v2.1.0: UX Improvements & Offline Font Bundle
Features:
- Alphabetical sorting for apps in Reset Tab and Sessions Tab
- Remember last selected app across tab navigation
- Launch App option in session context menu
- Post-restore launch prompt modal
- Auto-generate new machine IDs after all restore operations
- Set active session after addon-only and account-only restore
- Bulk session management (Backup All / Clear All Sessions)
- Reset Tab redesign with session/auto-backup/addon count badges
UI Changes:
- Settings Management buttons now use 3-column grid layout
- JetBrains Mono font bundled locally (no internet required)
Removed:
- Remember Last Tab setting (unused)
- Debug Mode setting (unused)
- Skip Data Folder feature (redundant with Restore Account/Addon Only)
Backend:
- Added ClearAllSessions() and BackupAllSessions() functions
- Removed SkipDataFolder from AppConfig struct
- Auto-generate IDs integrated into all restore functions
SurfManger 2.0.2
[2.0.2] - 2026-01-04
✨ New Features
Settings Revamp
- Restructured settings into 4 clear categories: General, Behavior, Sessions, Experimental
- Added Import/Export Settings - backup and restore your SurfManager configuration as JSON
- Added Reset All Settings button to restore defaults
- Moved experimental features to dedicated Experimental section with warning banner
Restore Addon Only (Experimental)
- New context menu option in Sessions tab to restore ONLY addon folders (like .aws, .ssh)
- Restores addon folders without touching main app data
- Must be enabled in Settings > Experimental > "Show Restore Addon Only"
- Only appears when app has addon paths configured and session has _addons folder
- Perfect for restoring credentials without affecting app settings
Reset Tab Enhancements
- Added "Reset Addon Data" button - delete only addon folders without touching main data
- Added "Kill App" button - force close running apps
- Button layout now uses 2 rows with 3 columns for better organization
- Addon button only appears for apps with configured addon paths
- Kill button only enabled when app is running
Skip Data Folder Feature
- New toggle in Config tab for Custom apps: "Skip Data Folder"
- Allows apps to backup/restore ONLY addon folders, skipping main data folder entirely
- Useful for apps where you only want to manage external folders (credentials, configs)
🔧 Fixes & Improvements
UI/UX
- Fixed toggle switch inconsistency - all toggles now have uniform appearance
- Replaced emoji icons with Lucide icons in context menus for consistency
- Removed "Set as Active" from session context menu (redundant feature)
- Stats section in Reset tab now shows addon folder count when applicable
- Removed placeholder "Last Reset" stat (not implemented)
Bug Fixes
- Fixed backup logic: empty BackupItems now correctly skips data folder instead of backing up everything
- Fixed reset logic: respects SkipDataFolder flag and BackupItems configuration
- Fixed field name mismatch:
addon_paths→addon_backup_pathsin frontend - Fixed toggle component using inline styles for reliable positioning
📝 Technical Changes
Backend
- Added
RestoreAddonOnly()function in app.go - Added
CheckSessionHasAddons()function in app.go - Added
RestoreAddonsOnly()method in backup.go - Added
SessionHasAddons()method in backup.go - Added
SkipDataFolderfield to AppConfig struct
Frontend
- Complete SettingsTab.svelte revamp with new structure
- Enhanced SessionsTab.svelte with new context menu options
- Updated settings store with export/import/reset functions
- Fixed SettingToggle.svelte component for consistent behavior
GitHub Actions Workflow
- Fixed invalid workflow file error on
build.yml - Resolved
matrixcontext not accessible at job-levelifcondition - Added step-level platform filtering for manual workflow dispatch
- Now properly supports selective platform builds (windows/linux/macos)
Settings UX Improvement
- Renamed "Skip Close App" to "Keep App Running" for better clarity
- Updated description to be more intuitive
- Toggle ON = app stays running during backup/restore/reset
- Toggle OFF = app will be closed before operations
SurfManger 2.0 GOLANG!
📸 Screenshots
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
✨ Highlights
- Complete rewrite from Python + PyQt6 to Go + Wails + Svelte
- 3x smaller binary (~15MB vs 40+MB)
- 2x faster startup (<0.5s vs ~1s)
- Modern UI with JetBrains Mono font and realtime clock
🎯 Core Features
- Session Management - Backup, restore, switch between multiple accounts
- Reset Data - Fresh start with optional auto-backup
- Generate New ID - Reset machine/telemetry IDs
- Smart App Close - Auto-close apps before operations (optional skip)
🆕 New in v2.0
- Theme System - Dark, Solarized Dark, Solarized Light
- Custom App Type - Backup only addon folders (e.g., ~/.aws) without touching AppData
- Edit App Config - Edit existing app configurations via UI dialog
- Additional Folders - Backup extra directories outside AppData
- VSCode Preset - Pre-configured backup items for VSCode-based editors
- Notes - Built-in notes for tracking accounts/credentials
- Search & Filter - Quick search through sessions
- Progress Tracking - Real-time progress bars
🛠️ Technical
- Go 1.22+ required
- Cross-platform: Windows, macOS (.app), Linux
- Native WebView2 (Windows), WebKit (macOS/Linux)
📦 Downloads
- Windows: SurfManager-windows-amd64.exe
- macOS Intel: SurfManager-darwin-amd64.zip
- macOS Apple Silicon: SurfManager-darwin-arm64.zip
- Linux: SurfManager-linux-amd64
SurfManager-v1.0.1
Screenshoots
![]() |
![]() |
![]() |
![]() |
More fast and light
- rebase full tree :D
- hotfix release, fix incorrect folder for autobackup and manual backup.
- hotfix: app configuration sync
Full Changelog: v1.0.0...v1.0.1









