RedSalamander is a modern Windows-native dual-pane file manager designed to provide advanced file management capabilities with support for virtual file systems and plugin architecture. Built on C++23, it leverages DirectX technologies for high-performance graphics rendering and offers a themeable user interface.
Key Features:
Dual-pane navigation with support for virtual file systems (archives, FTP/SFTP/SCP, IMAP, S3, cloud drives, etc.).
Plugin-based architecture enabling custom file system integration.
Advanced text viewer with Direct2D rendering for smooth and efficient text visualization.
Integrated comparison tools and robust search capabilities with native, indexed, and fallback search backends.
Support for various viewer plugins (text/hex, SQLite, images/RAW, WebView2-based viewers).
Audience & Benefit:
Ideal for power users, developers, and system administrators seeking a modern, customizable file manager. RedSalamander offers efficient workflow management, extensive customization options through themes and plugins, and seamless integration with virtual file systems and cloud storage.
Available via winget for easy installation, RedSalamander is a powerful tool designed to meet the needs of users requiring advanced file management capabilities on Windows.
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.
Run all tests with one command
Tools\Run-AllTests.ps1 is the canonical local test runner. It builds (unless -SkipBuild), runs the selected suite(s), prints a color pass/fail/skip summary, writes run-all-tests-results.json, and exits with code 0 when everything is green.
# Everything CI runs (and a bit more) — builds the whole solution with tests enabled:
.\Tools\Run-AllTests.ps1 -Suite Full
# Just the three in-process selftest suites (default), reusing an existing Debug build:
.\Tools\Run-AllTests.ps1 -SkipBuild
# One suite, one case, on a slow machine:
.\Tools\Run-AllTests.ps1 -Suite Commands -SkipBuild -CaseFilter cmd_pane_batchRename_ -TimeoutMultiplier 2.0
-Suite Full builds the full solution (test projects included) and additionally runs the standalone test executables (DxUiTests, FileSystemCurlTests, ViewerPETests, ViewerSqliteTests, MonitorTest, LocalizationTests, RedConfigureTests, RedSalamanderMonitorEtwLatency), PerformanceTests2 (CppUnitTest DLL via vstest), the Tools\Tests Pester suite, and the vcpkg-merge synthetic test. Results land under %LOCALAPPDATA%\RedSalamander\SelfTest\last_run\.
The runner defaults to Debug configuration; self-tests only run in Debug builds.
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.
Platform: Windows 11 build 22000.2600 or later (Unicode UTF-16)
ETW Tracing (RedSalamanderMonitor)
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: