RedSalamander is a Windows-native dual-pane file manager with plugin-based virtual file systems,
advanced text visualization, and real-time debugging capabilities. Features include:
- Dual-pane file management with virtual file system support
- Plugin architecture for custom file systems (7z, S3, cloud drives)
- Advanced text viewer with Direct2D rendering
- Comparison tools and search capabilities
README
RedSalamander
RedSalamander is a Windows dual-pane file manager with:
A fast DirectX-based folder view
A modeless Find Files and Directories workflow with native, indexed, and fallback search backends
Virtual file systems (archives, FTP/SFTP/SCP/IMAP, S3, …)
The build now copies the required clang_rt.asan_dynamic-*.dll next to each ASan executable automatically. If you still see a missing ASan runtime DLL, rebuild after updating Visual Studio C++ tools and verify the ASan runtime exists under $(VCToolsInstallDir)\bin\Host*\.
Visual Studio Build
Open RedSalamander.sln in Visual Studio 2026
Select configuration (Debug/Release) and platform (x64/ARM64)
All build outputs and intermediate files are written under .build\ to keep the source tree clean.
Self-tests (Debug only)
RedSalamander includes three debug-only self-test suites:
CompareDirectories self-test (--compare-selftest)
Commands self-test (--commands-selftest)
FileOperations self-test (--fileops-selftest)
Run self-tests
Build a Debug binary and run the suites (recommended: run all suites in one process so the aggregated results.json includes everything):
# Build Debug (x64)
.\build.ps1 -Configuration Debug -ProjectName RedSalamander
# Run all suites in one process (recommended)
.\.build\x64\Debug\RedSalamander.exe --selftest --selftest-timeout-multiplier=2.0
# Run suites individually
.\.build\x64\Debug\RedSalamander.exe --compare-selftest
.\.build\x64\Debug\RedSalamander.exe --commands-selftest
.\.build\x64\Debug\RedSalamander.exe --fileops-selftest
# Optional: fail-fast for CompareDirectories
.\.build\x64\Debug\RedSalamander.exe --compare-selftest --selftest-fail-fast
The process exit code is 0 on success and non-zero on failure.
Every declared self-test case must report passed, failed, or skipped. Conditional coverage stays part of the suite and uses skipped with a reason when prerequisites are absent. See Specs/Testing/Testing_SelfTests.md.
Note: the Commands self-test is UI-driven and may take longer to run.
Note: RedSalamander.exe is a GUI app, so PowerShell may return to the prompt immediately after launching it. Use Start-Process -Wait if you need to wait for completion and capture the exit code.
Self-test artifacts and results
All self-test output is written under:
%LOCALAPPDATA%\RedSalamander\SelfTest\
At the start of any self-test run, the current last_run is rotated to previous_run and a fresh last_run is created:
Debug: RedSalamanderSearchService.Debug on \\.\pipe\RedSalamander.SearchService.Debug.v3
Release: RedSalamanderSearchService on \\.\pipe\RedSalamander.SearchService.v3
Useful commands:
# Show all supported options
.\.build\x64\Debug\RedSalamanderSearchService.exe --help
# Run in the current terminal
.\.build\x64\Debug\RedSalamanderSearchService.exe --run-foreground
# Run offline SQLite maintenance
.\.build\x64\Debug\RedSalamanderSearchService.exe --compact
# Ask a running SQLite-backed service to compact in place
.\.build\x64\Debug\RedSalamanderSearchService.exe --request-compact
# Register / unregister the Windows service for the current build
.\.build\x64\Debug\RedSalamanderSearchService.exe --register
.\.build\x64\Debug\RedSalamanderSearchService.exe --unregister
Notes:
--register and --unregister typically require an elevated terminal.
--compact targets the SQLite store, acquires the single-instance guard, truncates WAL, runs VACUUM, and exits with a before/after space summary. Stop any running service instance first.
--request-compact asks the running service to run live SQLite maintenance in-process and prints the refreshed DB/WAL/free-page state after the request completes.
--run-foreground now auto-attaches to the parent terminal when needed, prints a startup banner with PID/build/mode details, shows a live status dashboard in a console, and falls back to readable lifecycle log lines when output is redirected.
Press Ctrl+C to stop foreground mode cleanly.
--pipe-name=... can target a non-default running service for --request-compact, and --protocol-version=..., --max-requests=..., and --disconnect-after-batches=... are intended for foreground-mode development and self-tests.
--storage-root=..., --store-backend=..., and --sqlite-path=... can be used with --run-foreground or --compact.
--storage-root=... overrides the snapshot/storage root, which is useful for isolated self-tests and local service debugging.
RedSalamanderMonitor is a real-time ETW (Event Tracing for Windows) viewer for RedSalamander events.
On some machines it may need extra privileges to start its ETW listener.
One-time permission setup (avoid UAC prompts)
Run the helper script once to add your account to the local Performance Log Users group (the script will self-elevate):
.\init-etw-trace.ps1
Then sign out/in (or reboot) so your access token picks up the new group membership, and launch:
.build\x64\Debug\RedSalamanderMonitor.exe (Debug), or
If you need an external ETW session (e.g. Windows Performance Analyzer), use:
.\start-etw-trace.ps1
.\stop-etw-trace.ps1
.\clean-etw-trace.ps1
Note: RedSalamanderMonitor.exe has its own built-in ETW listener and does not require an external session for normal use.
Normal Release builds keep Info/Perf/debug-style ETW diagnostics quiet, and RedSalamanderMonitor filters out its own ETW messages. To build a dedicated Release set that emits and displays those diagnostics in RedSalamanderMonitor, use: