Releases: heyuforia/volt
Releases · heyuforia/volt
v0.4.4
What's New
Split Terminal Panes
- Split terminals horizontally (
Ctrl+Shift+D) or vertically (Ctrl+Shift+E) - Draggable dividers to resize panes
- Click to focus individual panes (purple outline indicator)
- Close individual split panes via floating × button (top-right, appears on hover)
- Drag pane handle to extract it back to its own tab
- Shift+drag a terminal tab onto another to merge into a split
- Pane count badge
[N]shown in tab bar when split
Terminal Search
Ctrl+Fopens search bar in the active terminal- Incremental search with highlighted matches (yellow = all matches, purple = active)
- Previous/next match navigation (Shift+Enter / Enter)
- Case sensitivity and regex toggles
- Result count display ("3 of 12")
File Tree Drag-and-Drop
- Drag files and folders within the tree to move them
- Ghost element follows cursor during drag
- Drop target folders highlighted with purple outline
- Auto-expand collapsed folders after 600ms hover
- Circular move prevention (can't drop folder into its own child)
- Name conflict detection with confirmation dialog
- Undo toast after move ("Moved X → Folder" with Undo button)
Multi-Instance Support
- Run multiple Volt windows for different folders simultaneously
- Opening the same folder in a second instance still focuses the existing one
Other Improvements
- Individual remove button on recent folders in welcome screen
- Welcome screen shortcuts updated to show Ctrl+F and Ctrl+Shift+D
- Fix macOS terminal keyboard input (arrow keys, backspace, delete)
- Fix PTY UTF-8 splitting for multi-byte characters
- Fix drag-drop folder detection
- Sidebar width persists across sessions
- Launch emulator binary directly instead of Flutter CLI wrapper
- Reset emulator status bar button when emulator process exits
- Fix open_url command injection vulnerability
- Fix LSP race condition and watcher noise
- Enable word wrap for all files
- Clickable diagnostics, regex search toggle
- Fix markdown preview checkboxes, code language classes, list start numbers
- Clickable file paths in terminal output (open in editor at line number)
- Clickable web URLs in terminal (open in browser)
- Dim gitignored files in file tree
v0.4.1
Fix: macOS terminal keyboard input
Fixed an issue where arrow keys, backspace, and delete keys were not working in the terminal on macOS. The WKWebView was intercepting keyboard events before they reached xterm.js. Added native macOS setup to make the WKWebView the first responder on launch.
Note: The editor (CodeMirror) was unaffected — this fix is specific to the terminal (xterm.js).
v0.4.0
What's Changed
- Enable word wrap for all files and remove wrap toggle button
- Fix open_url command injection, LSP race condition, and watcher noise
- Reset emulator status bar button when emulator process exits
- Launch emulator binary directly instead of flutter CLI wrapper
- Fix PTY UTF-8 splitting, drag-drop folder detection, and sidebar persist
v0.3.6
v0.3.5
What's New
Clickable Terminal Links
- Web URLs (http/https) open in your default browser
- File paths (e.g.
src/main.rs:42) open in Volt's editor at the correct line
Clickable Diagnostics
- Click any error or warning in the Problems panel to jump directly to the file and line
Word Wrap Toggle
Alt+Zor the Wrap button in the breadcrumb bar to toggle soft line wrapping per file
Regex Search
- New
.*toggle in Find in Files (Ctrl+Shift+F) enables case-insensitive regex patterns - Invalid regex shows a clear error message
Clickable Breadcrumbs
- Click any folder segment in the breadcrumb bar to open it in your OS file manager
Loading Indicator
- Spinner shown in the file tree while a folder is loading (visible on large projects)
Settings Validation
- Font size (8-32), scrollback (500-50,000), and auto-save delay (500-10,000ms) are validated before saving
Performance
- Git status results are cached with a 2-second TTL, reducing redundant
git statuscalls during rapid tree refreshes
Accessibility
- Respects
prefers-reduced-motionOS setting — all animations and transitions are suppressed
Fixes
- Markdown preview no longer strips checkboxes, code language classes, or ordered list start numbers
Volt 0.3.0
What's Changed since v0.2.2
Real-Time File Tree
- Directory watcher emits live Create/Remove/Rename events — no manual refresh needed
- Expanded folder state and scroll position preserved across tree refreshes
- Debounced directory change events (300ms) to batch rapid filesystem operations
- Context menu actions (new/delete/rename) now preserve tree state
- Noisy paths (
.git,node_modules, etc.) filtered from watcher events - Fixed tree flashing on refresh by deferring
innerHTMLclear until new data is ready
Git Integration
- Gitignored files now render at 50% opacity in the file tree (like VSCode)
- Parses
git status --ignoredoutput to detect gitignored paths
Editor
- Scroll position preserved across markdown preview toggle
Bug Fixes
- Fixed tab bar losing scroll position when tabs are re-rendered
- Fixed stale search results appearing after starting a new search (generation guard for races)
- Fixed settings panel crash when save error fires after panel is closed
- Fixed save cooldown timers leaking when folder is closed
Error Handling & Resilience
- Watcher creation failures logged instead of silently ignored
- WebView2
.unwrap()chains replaced with?operator + error logging - Config corruption detected at startup with user notification via toast
- Search returns a truncation flag instead of relying on frontend magic-number check
- File watches use LRU eviction instead of hard error at limit
- Terminal resize clamping, LSP config load failures, and file manager errors now logged
- JSON parse calls in Vite config wrapped in try-catch to prevent build failures
Security
- Removed space from emulator ID validation allowlist (cmd /C injection vector)
Accessibility
- Added
role="tree"to file explorer for screen reader navigation - ARIA attributes on tab bar, sidebar, dialogs, status bar, and tree items
CSS & UI
- Replaced ~30 hardcoded hex colors with CSS custom properties for maintainability
- Improved placeholder contrast
Build & Versioning
package.jsonis now the single source of truth for the app version- Version auto-syncs to
Cargo.tomlandtauri.conf.jsonon every build via Vite plugin
Documentation
- Added macOS Gatekeeper workaround (
xattr -cr) to README installation section - Updated screenshot
Full Changelog: v0.2.2...v0.3.0
v0.2.2
What's Changed since v0.2.0
Atomic File Saves & Error Visibility
- Atomic writes via temp file + rename in
fs.rs— prevents data loss on crash/bluescreen mid-save - Used for both
save_file()andsave_config() - Added
console.warnto ~57 silent catch blocks across all JS files so failures show in DevTools
Performance Improvements
- Parallelized
search_in_fileswithstd::thread::scope(no new deps) - Cached canonicalized project root and
~/.voltdir invalidate_path - O(1) git folder status lookups via dirty-directory prefix Set
- Cached lowercased file paths in Quick Open, reduced object allocations
- Single-pass diagnostic counts in analyzer status bar and panel
Security: Path Validation Hardening
- Added
validate_path()toread_directory,read_file,save_file,read_image_file, swap file commands,list_all_files, andsearch_in_files - Reordered
openFolderto setPROJECT_ROOTbeforeloadDirectory
LSP Document Sync
- Full
didOpen/didChange/didClose/didSavenotification pipeline - Message queuing until LSP initialization completes, 300ms debounce on changes
- Re-sends open documents on analyzer restart, plus rename handling
- Fixed LSP URI encoding for paths with spaces,
#, and special characters - Deduplicated
rootUriconstruction via existingpath_to_urihelper
Config & Git Improvements
- In-memory config cache to avoid redundant disk reads
- Debounced fire-and-forget config saves to prevent race conditions
- Wrapped
git_statusinspawn_blockingto avoid blocking the async runtime
Search & File Tree Fixes
- Exposed dot-files (
.gitignore,.env, etc.) in Quick Open and Search while still skipping hidden directories - Filtered
.volt-swap/.volt-tmpfrom Quick Open/Search - Highlighted all query occurrences per line in Find in Files, not just the first
CSS & UI Polish
- Extracted 16 CSS colors into
:rootcustom properties for maintainability - Injected version from
package.jsonvia Vite define instead of hardcoding - Added
Ctrl+Shift+Oshortcut to close the current folder - Fixed shell quoting to use PowerShell escaping on Windows
Testing
- Added 27 unit tests covering
parse_porcelain,detect_language,is_binary,find_ascii_case_insensitive,uri_to_relative,path_to_uri,lsp_language_id
Documentation
- Updated README with image preview, git status indicators, drag-and-drop, context menu extras,
lspServersconfig, and missing keyboard shortcuts
Full Changelog: v0.2.0...v0.2.2
v0.2.0
What's New
Security Hardening
- Add Content-Security-Policy (
script-src 'self') to block inline script injection - Add path containment for destructive file operations (create/delete/rename) via project root tracking
- Validate emulator IDs against safe character allowlist to prevent command injection
- Tighten DOMPurify markdown preview with explicit tag/attribute allowlists
- Shell-quote file paths pasted into terminals to prevent accidental execution
Resource Limits
- Cap concurrent terminals (20), file watches (10K), recursive file listing (100K files), terminal resize (500×200)
Terminal
- Handle Shift+Enter for Claude Code newline support (sends ESC+LF sequence)
- Add zero-dimension guard to
resize_terminalto prevent invalid PTY resize calls
Search & File Tree
- Move
search_in_filesandlist_all_filesto async withspawn_blockingfor non-blocking file I/O - Add recursion depth limit (64) to prevent stack overflow from symlink loops
- Add undo toast after file/folder renames with 5-second auto-dismiss
v0.1.3
Changes
- Handle Shift+Enter in terminal for Claude Code newline support
- Fix bold text not rendering in markdown preview
- Darken inactive tab background for stealthier look
- Use neutral gray for inactive tabs (no purple hue)
- Fix duplicate file tree rendering and slow git status
v0.1.2
What's New in v0.1.2
Image Preview
- Image file support — clicking an image file (PNG, JPG, GIF, WebP, BMP, ICO, AVIF, TIFF) in the file tree opens a preview tab with the image, its dimensions, and file size
- Checkerboard background — transparent images display against a checkerboard pattern so transparency is visible
- 20MB limit — large images are gracefully rejected with an error message
Git Status Indicators
- File status badges — modified (M), untracked (U), added (A), and deleted (D) files show colored labels in the file tree
- Colored file names — modified files are yellow, untracked/added files are green, deleted files are red with strikethrough
- Folder indicators — folders containing dirty files show a yellow dot
- Auto-refresh — git status updates on folder open, tree refresh, and file save
Terminal
- Ctrl+Backspace fix — word-delete now works correctly in both PowerShell prompts and VT apps (Claude Code, vim, etc.) on Windows
- Instant tab switching — removed 200ms click delay on tab activation; tabs now respond immediately to clicks while still supporting double-click to rename
Full Changelog: v0.1.1...v0.1.2