Releases: Epistates/gravityfile
Releases · Epistates/gravityfile
v0.2.4
[0.2.4] - 2026-03-11
Added
- WASM Plugin Runtime - Full WebAssembly plugin support via Extism:
- Load
.wasmplugins alongside Lua and Rhai scripts - Hook dispatch, method invocation, and isolated execution contexts
- Automatic hook discovery by inspecting WASM exports
- Load
- Plugin System Integration - TUI now initializes and dispatches lifecycle hooks:
OnStartup,OnShutdown,OnNavigate,OnScanCompletehooks- Plugin manager with Lua, Rhai, and WASM runtimes registered at startup
- Non-blocking hook dispatch via
tokio::spawnfor scan-complete events
- Git Status Integration - Real-time git status indicators in file listings:
- Modified (
M), Staged (A), Untracked (?), Ignored (!), Conflict (C) indicators - Color-coded status using theme colors (modified=yellow, staged=green, etc.)
- Automatic detection of git repositories
- Works in both Tree and Miller column views
- Modified (
- Treemap Visualization - Squarified treemap view for disk usage analysis:
- Space-filling rectangular layout showing relative file/directory sizes
- Color intensity based on size ratio
- Keyboard navigation (arrow keys, Enter to drill down, Backspace to go up)
- Directory/file indicators with different border styles
- Size labels displayed within rectangles
- Visual Mode - Vim-style range selection:
- Press
Vto enter visual mode - Use
j/kto extend selection up/down - Selected range highlighted
Escexits and marks the selected range- Works seamlessly with existing mark system
- Press
- Archive Support - Create and extract archives with full format support:
- Supported formats: ZIP, TAR, TAR.GZ, TAR.BZ2, TAR.XZ
- Commands:
:extract [destination],:compress <name.zip|tar|tar.gz|...> - Archive preview: Shows file listing with sizes, compression ratios, and symlink indicators
- Symlink support: Preserves symlinks in archives (ZIP via Unix mode, TAR via link headers)
- Loop detection: Prevents infinite recursion when archiving circular symlinks
Security
- CRIT: Rhai code injection - Replaced string interpolation in
call_functionwithEngine::call_fnusing typed args and stored AST, eliminating arbitrary code execution via plugin args - CRIT: TAR decompression bomb bypass - Size limits now check actual bytes written to disk via
symlink_metadatainstead of trusting attacker-controlled header sizes - CRIT: Cross-filesystem move data loss - Added cleanup on partial copy failure and warning on source removal failure to prevent duplicate/orphaned content
- HIGH: Plugin sandbox bypass (Rhai) - All
fs_*functions now gate onSandboxConfig.can_read()viaArc-shared config - HIGH: Plugin sandbox bypass (Lua) -
LuaRuntimenow stores and passesSandboxConfigtocreate_fs_apiinstead ofNone - HIGH: Plugin sandbox bypass (WASM) - Manifest now maps sandbox config to
allowed_paths, memory limits, timeout; WASI disabled by default - MED: ZIP symlink escape - Deferred symlink extraction to second pass preventing symlink-redirected
create_dir_all - MED: Chained symlink attack - Always validate symlink targets against canonical destination, not only when
..present - MED: Empty sandbox = full access - Empty
allowed_read_paths/allowed_write_pathsnow deny by default instead of granting unrestricted access - MED: Lua
fs.read_bytesunbounded read - UsesFile::open().take(limit).read_to_end()instead of full allocation - MED: Lua instruction timeout bypass - Wrapped isolate execution in
tokio::time::timeoutfor wall-clock enforcement alongside instruction counter - Archive extraction hardened with path traversal prevention, ZIP bomb detection, and symlink escape prevention
Fixed
- Windows build - Replaced unstable
windows_by_handleAPIs (file_index(),number_of_links()) with stable fallbacks; hardlink dedup skipped on Windows - Move undo pipeline - Added
MoveCompletestruct carryingmoved_pairsfrom move operations, enabling proper undo recording - Cross-filesystem undo - Undo now falls back to copy+delete when
fs::renamefails across filesystems - Windows symlink - Choose
symlink_dirvssymlink_filebased on target type; log failures instead of silent discard - Fuzzy search highlights - Fixed misalignment on non-ASCII filenames by using character positions instead of byte offsets to match nucleo's UTF-32 indices
- Viewport height - Correctly subtracts 5 rows when directory tabs are visible instead of always 4
- Git pathspec - Empty relative path at repo root now produces
**instead of/** - Filename validation - Uses byte length (
name.len() > 255) matching OS enforcement instead of char count - Archive symlink icon - Symlinks in archive preview now show distinct
@icon instead of directory icon - Doc link warnings - Escaped
[PATH]in doc comments to prevent rustdoc treating them as links - Broken doc comment continuation in plugin crate module docs
- Test assertions updated to match actual
ScanConfigdefaults ContentHashtest helpers updated forBox<ContentHash>optimization- Duplicate finder tests fixed for correct file count assertions
Changed
- API Modernization - ~25 function signatures changed from
&PathBufto&Pathacross all crates, following Rust idioms for borrowed path parameters - Clippy Clean - Eliminated all clippy warnings across the workspace (let-chains, derive Default, redundant closures, clamp, strip_prefix, etc.)
- InodeTracker - Replaced
DashMapwithHashMapsince access is single-threaded; ~15% faster inode tracking - GlobSet reuse - Scanner reuses
ScanConfig's pre-compiledGlobSetwith fallback compilation for builder-created configs - Progress counter - Replaced
Arc<AtomicU64>with plainu64in sequential scan loop truncate_to_width- Extracted shared function toui/mod.rs, eliminating 3-way duplicationTuiConfig- Added#[non_exhaustive]to prevent future breakage from field additions- Cross-device filter - Extended to non-directory entries (files and symlinks), not just directory pruning
- Undo System Simplification -
FilesDeletedvariant now storespaths: Vec<PathBuf>;can_undo()always returnsfalsefor deletions - HookResult Serialization - Added
Serialize/Deserializederives for WASM interop - Dependencies Updated - All workspace dependencies brought to latest versions
Full Changelog: v0.2.3...v0.2.4
v0.2.3
Full Changelog: v0.2.2...v0.2.3
gravityfile v0.2.2
[0.2.2] - 2026-01-16
Fixed
- Critical: Safe Deletion with Trash - All deletions now move files to system trash instead of permanent deletion, allowing recovery of accidentally deleted files
- Critical: Symlink Safety - Fixed symlink handling across all file operations to prevent accidental deletion of symlink targets:
- Uses
symlink_metadata()instead ofis_dir()to avoid following symlinks - Symlinks are always removed as files, never following their targets
- Applies to delete, copy, move, and undo operations
- Uses
- Critical: Errors View Delete Behavior - Pressing
din Errors view now correctly deletes the selected broken symlink, not items from the Explorer view - Delete Confirmation Modal - Now shows full paths (truncated from left if needed) instead of just filenames, with type indicators (🔗 for symlinks, 📁 for directories)
- Errors View Toggle Mark - Space key now properly marks/unmarks broken symlinks in Errors view
Added
- Errors View Footer Hints - Shows available actions (
Spcto select,dto delete,Escto clear) - Errors View Delete Hint - Selected broken symlinks show
[d to delete]hint - Errors View Mark Indicator - Marked items show
[x]prefix - Comprehensive Symlink Tests - Added tests for deleting symlinks to files, directories, broken symlinks, symlink chains, and directories containing symlinks
Changed
- Delete confirmation now says "Move to trash?" instead of "cannot be undone"
- Success messages now say "Moved to trash" instead of "Deleted"
Full Changelog: v0.2.1...v0.2.2
v0.2.1
Full Changelog: v0.2.0...v0.2.1
v0.2.0
[0.2.0] - 2025-12-13
Added
- Miller Columns Layout - Ranger-style three-pane view (Parent | Current | Preview), toggle with
vor:layout miller - File Operations - Full clipboard support with vim-style keybindings:
y- Yank (copy) to clipboardx- Cut to clipboardp- Paste from clipboardr- Rename file/directorya- Create new fileA- Create new directoryT- Take (mkdir + cd into new directory)
- Conflict Resolution - Interactive handling for file conflicts during copy/move operations
- Cross-Platform Releases - GitHub Actions workflow for automated releases:
- Linux x86_64 and ARM64
- macOS Intel and Apple Silicon (with optional code signing/notarization)
- Windows x86_64
- CI Pipeline - Automated build and test on push/PR to main
Changed
- Improved navigation with history preservation across drill-down operations
- Enhanced details panel with more file metadata
Full Changelog: v0.1.3...v0.2.0
GravityFile v0.1.3
Fix UX during delete operations
Full Changelog: v0.1.2...v0.1.3
GravityFile v0.1.2
Initial public release