A modern terminal file manager built in Rust with Turbo Vision, inspired by DOS Navigator.
Familiar two-panel browsing, classic colors, keyboard shortcuts and mouse controls, rebuilt for modern computers. It runs directly in your terminal—no DOS emulator or graphical frontend.
Supports macOS, Windows and Linux. Install the latest published release from
crates.io:
cargo install directory-navigator. See Get started for build prerequisites.
|
Turbo Vision for Rust powers the file panes, menus, dialogs, editors, viewers, utilities and Tetris. Its desktop and control system handles movable windows, selection, focus and input routing, while Directory Navigator keeps the classic DN appearance and adds Unicode text and modern filesystem handling.
- Edit Unix permissions or Windows file attributes through File Attributes / Info (Alt+E).
- Browse two folders side by side, mark files, and copy, move or rename them.
- Create directories and send files to Trash with confirmation.
- Find files, compare directories, calculate folder sizes and use bookmarks.
- Preview text or hex, edit Unicode and legacy-encoded text files, and search or replace text.
- Read formatted Markdown with F3, edit highlighted source with F4, and preview unsaved text with F5.
- Keep multiple editors and viewers open, and switch between them with Alt+0.
- Browse ZIP/ZIP64, TAR, TAR.GZ/TGZ, 7z and RAR directly in either file pane; extract selected files and folders with F5.
- Create ZIP archives from selected files and folders, optionally with an AES-256 password; preview and extract encrypted ZIPs in DN.
- Type shell commands directly into the bottom command prompt.
- Customize the layout, clock and screensaver; edit component colors in a DN-style foreground/background selector with Color, B/W and Mono presets. Settings save on exit.
- Configure file extensions to use DN's viewer/editor or your preferred commands.
- Classic panel footers show selection totals and available/total volume space.
- Choose English or Russian, with independent date order and 12/24-hour time.
- Recall commands through a searchable session history; copy filenames or paths to the system clipboard, with an internal fallback in consoles.
- Use the calculator, character table and configurable user menus—or play Tetris or Pentix with separate, persistent high scores.
- Inspect and modify standalone Android APKs with the opt-in APK Workshop: manifest/DEX inspection, persistent working projects, asset and manifest edits, unsigned export, optional SDK signing and ADB/logcat. Works without apktool; see APK Workshop for supported edits and SDK requirements.
- Play local MP3, FLAC, WAV and Ogg Vorbis files on macOS, Linux and Windows in a DN-style player with a session queue, recursive folder import, track tags and durations, shuffle/repeat, pause, seek and volume. Disabled by default; enable it in Options → Configuration → Plugins, then use Utilities → Add music to player. Audio support is included in default builds. Based on Dos Navigator by RIT Research Labs.
A classic DN desktop
Movable windows, directory browsing and customizable colors.
Directory Navigator on crates.io
is the primary installation source for macOS, Windows and Linux. With stable
Rust, Cargo and your platform's build tools installed, run the command below.
On Linux, install the audio build dependencies listed below first: audio is
included by default, and Cargo needs pkg-config plus ALSA development files.
cargo install directory-navigator
dnThis installs the latest published release and the dn command. Run the same
installation command to update. Check your installed version with dn --version.
DN starts in your current directory; use a terminal at least 80 columns × 25 rows.
Cargo builds the program locally. Required build tools:
- macOS: Xcode Command Line Tools (
xcode-select --install). - Windows: the MSVC Rust toolchain and Visual Studio Build Tools with the Desktop development with C++ workload and Windows SDK.
Linux audio build dependencies — choose your distribution and run this before
cargo install directory-navigator:
| Distribution | Install build tools and audio development files |
|---|---|
| Debian / Ubuntu / Linux Mint | sudo apt install build-essential pkg-config libasound2-dev |
| Fedora | sudo dnf install gcc pkgconf-pkg-config alsa-lib-devel |
| Arch Linux / Manjaro | sudo pacman -S --needed base-devel pkgconf alsa-lib |
If installation reports “The pkg-config command could not be found” or
“The system library alsa was not found”, install the packages above, then retry
cargo install directory-navigator. Check that both are available with
pkg-config --modversion alsa. On other distributions, install the packages that
provide the pkg-config command, ALSA headers and alsa.pc metadata.
Default builds include audio support; enable the Music Player plugin separately in Options → Configuration → Plugins. To install without audio libraries:
cargo install directory-navigator --no-default-featuresThat build keeps normal file associations/external opening and shows an
unavailable notice in the player. Prebuilt Linux binaries with audio need the
ALSA runtime (libasound2t64/libasound2 or alsa-lib) and a configured default
output accessible to your user. Windows uses WASAPI; macOS uses CoreAudio.
No external player, FFmpeg, ASIO SDK or codec installation is required.
DN supports macOS, Windows and Linux. File-manager operation has been tested natively on macOS and confirmed by users on Windows and Linux ARM64. Automated tests and cross-compilation checks also cover changes targeting Linux and Windows.
| Platform | Architectures | Verification |
|---|---|---|
| macOS | Apple Silicon / Intel | Native Apple Silicon tests, terminal scenarios and audio playback |
| Windows 10/11 | x86_64 | User-confirmed file-manager operation; cross-compilation and Clippy checks |
| Linux | x86_64 / ARM64 | User-confirmed ARM64 file-manager operation; cross-compilation and Clippy checks for both targets |
The new Linux/Windows audio backend has passed cross-compilation checks; real output-device playback has so far been exercised on macOS.
Download the archive matching your operating system and architecture from the
project's releases or manual build artifacts. Extract it, then run dn.exe on
Windows. On macOS/Linux:
chmod +x dn
./dnRust and build tools are not needed for a supplied binary. Downloaded macOS builds are unsigned and unnotarized, so macOS may block them. Cargo installation above builds locally and is the recommended route.
With the same platform prerequisites installed:
cargo build --release --locked
./target/release/dnOn Windows, run target\release\dn.exe. Add --no-default-features to the build
command for a build without audio libraries. Windows MSVC builds statically link
the C runtime through .cargo/config.toml.
In a real Linux virtual console (/dev/ttyN), DN automatically uses an existing
GPM daemon for mouse input. Install/configure your distribution's gpm service;
DN itself needs no root privileges or libgpm shared library. DN uses
console-compatible colors there without changing the system palette. Graphical
terminals, SSH and tmux retain their usual mouse input and extended colors.
Utilities → System Information reports the terminal mode, color output, mouse source, GPM errors and Unicode font-mapping coverage. Missing Cyrillic glyphs need a suitable console font; changing the locale alone cannot add them. DN does not change fonts or keyboard modes. See the guide for GPM and console colors and Cyrillic troubleshooting.
New installations open a short welcome with keyboard guidance, Help and keyboard settings. Reopen it any time through ≡ → Welcome…. Existing settings skip it.
Classic DN shortcuts are the default on every platform, including macOS. Choose Classic DN, Mac-friendly or Automatic under Options → Configuration → Keyboard shortcuts. Saved profile choices are preserved.
For Mac-friendly controls, press Ctrl+O, release, then a digit or letter. A guide
appears; 5 copies, 4 edits and 0 quits the file manager. Ctrl+O, K opens
keyboard settings. Classic keys remain available; ^O5 means Ctrl+O, then 5.
Automatic remains optional: it selects Mac-friendly on macOS and Classic DN elsewhere.
| Key | Action |
|---|---|
| Tab | Switch panels |
| Arrows / Page Up / Page Down | Navigate files |
| Enter / Backspace | Open the highlighted entry / go to its parent directory |
| Insert / Space | Mark or unmark an entry |
| F1 | Help |
| F2 | User menu |
| F3 / F4 | View / edit |
| F5 / F6 | Copy / move or rename |
| Ctrl+O | Reveal terminal output; Ctrl+O/Esc/Enter returns (Mac: Ctrl+O twice) |
| F7 / F8 | Create directory / Trash or delete with confirmation |
| F9 / F10 | Menu / exit |
| Ctrl+F7 / Alt+F7 | Recursive Find / quick filename search |
| Ctrl+Q / Ctrl+T | Quick view / directory tree |
| Alt+0 | Switch between file panels and open documents |
Click to select, double-click to open, and Ctrl+click to mark. Inside the viewer or editor, use F1 for that screen's controls. macOS may require Fn with function keys.
Manager → Windows… (Alt+0) switches between the file panels and open editors and viewers. The Mac-friendly profile also offers Ctrl+O, then U. Each document keeps its own edits, undo history, search and scroll position. F4 opens the highlighted file; reopening a file activates its existing document. Close and quit check unsaved changes across the relevant editors. Editors and viewers open maximized, can be moved or resized, and support Tile and Cascade through the Manager menu or window list. File-document geometry can be restored with the optional session settings.
Copy and Move use a switchable Transfer Center: continue browsing or editing while one transfer runs and others wait in its queue. Manager → Transfers… reopens progress and results. Closing the window keeps work running; errors or cancellation pause the queue until you resume it. File conflicts prompt before replacement; existing folders can be merged. See file handling.
The bottom row is a command prompt. Type a command and press Enter to run it
in the active panel's directory; Esc clears it. Ctrl+E / Ctrl+X recall command
history. cd "folder name" changes the active panel's directory. With no command
entered, Enter opens the highlighted entry as usual. Shell commands run with your
normal permissions, independently of the file manager's confirmation safeguards.
Preferences load automatically and save on normal exit. Options → Save desktop saves immediately; Options → Configuration → System Setup controls saving on exit.
- macOS/Linux:
~/.config/dn/config.conf, or$XDG_CONFIG_HOME/dn/config.conf. - Windows:
%APPDATA%\Directory Navigator\config.conf.
Options → Configuration → Language / date & time changes the interface language, date order (year/month/day, day/month/year or month/day/year), date separator and 12/24-hour time with a configurable time separator. Apply accepts changes; Cancel keeps the previous settings. The clock, panel dates and file information follow these preferences. Defaults remain English, year-month-day and 24-hour time. English and Russian catalogs are embedded, so the binary needs no companion files. Untranslated diagnostics fall back to English; system errors retain their original text.
config.conf uses TOML with config_version = 2 and grouped sections.
Only this format is supported; older flat files are not migrated. Invalid settings
are renamed to _old_config.conf (numbered if occupied), then defaults load.
Normal saving creates a fresh configuration; inaccessible/read-only files and
failed recovery still report errors.
Unknown TOML settings are retained. Only config.conf is loaded automatically;
config.txt is ignored.
Options → Import DOS settings… reads an original DN.CFG and previews supported
clock, hidden-file, sorting, highlighting, selection, editor and screensaver
preferences. Apply affects this session; normal saving persists it. Cancel changes
nothing, and the DOS file is never modified. DOS paths, desktop windows, commands,
hardware settings and custom palettes are excluded; Trash and confirmation safeguards
are retained. Compatibility is based on source-derived fixtures; a real user-supplied
DN.CFG has not yet been tested.
Trash is the default deletion mode; a Trash failure never falls back to permanent deletion. Permanent deletion can be selected in File Manager Setup and still requires confirmation. Detected changes to queued entries or their parent directories stop the operation. Cancellation or failure retains completed work; multi-file operations have no automatic rollback.
ZIP panes support confirmed updates; other archive formats are read-only. Text viewing/editing uses the limits below. Test important workflows on copies and report problems with your OS, terminal and reproduction steps. For detailed shortcuts, limits and user-menu configuration, see the user guide.
Core file errors explain the failed action, affected path, known outcome and next step. Cause retains original system/library details. Transfer failures can leave completed work; review Transfer Center before retrying. A save warning after publication means the file was written: keep the editor open and follow the advice. DN does not automatically retry, weaken confirmations or launch another application.
Options → Configuration → System Setup → Restore previous session offers Off / Panels only / Panels and documents. Panels only is the default: DN remembers both directories, cursor, filter, scroll and the active pane; marks are cleared. Archive panes return to their containing disk folders.
Document mode also reopens disk-file viewers/editors at their saved positions and window layout, reading current disk contents. Unsaved text stays under the normal save/discard and crash-recovery safeguards. Passwords, utility windows, archive members, previews, transfers and music state are not saved.
Save desktop captures a snapshot; normal exit does so only with Save settings
on exit enabled. Load desktop reloads preferences without replacing open
work. Run dn --no-session to start from the launch directory for one run. Missing
items are skipped with a summary. Snapshots share the existing guarded configuration
file and are limited to 128 documents and its 1 MiB total size.
F3 streams large regular disk files through bounded windows, with scrolling, Go to, End and whole-file search. Archive previews, PDF and formatted Markdown retain their documented bounds; large disk Markdown files use source text. F4 supports up to 64 MiB for both the Unicode buffer and encoded output, and 1,000,000 lines; oversized documents or saves are refused without truncating content.
Copy, Move and archive extraction ask before replacing files by default: Replace / Skip / Replace all / Skip all / Cancel, with Skip initially selected. “All” choices apply only to the current transfer. Esc cancels it; completed work remains. Existing folders merge recursively, preserving unrelated contents. Explicit Refuse and Skip policies remain available. File/directory mismatches, links and special destinations are refused. Save As asks Replace / Cancel, with Cancel selected initially; ordinary F2 retains external-change checks.
Ctrl+T → Analyze (F5) calculates folder sizes in the background; opening the tree alone never starts a recursive scan. F6 switches Name/Size sibling ordering after analysis stops. Sizes and bars include hidden files and use apparent lengths: hard links count separately and directory links are not followed. Other filesystems are excluded. Volume available/total space is shown separately. Stop or Esc cancels analysis, retaining labelled partial results; Esc again closes. Refresh marks affected snapshots stale. Results last only for this tree session. See the tree guide.
Archives can be up to 64 GiB, with 100,000 members and bounded metadata. ZIP64 is supported; ZIP creation accepts up to 64 GiB of input. RAR and 7z browsing, preview and selected extraction run internally, including password prompts. No external archive application is required. Multi-volume and nested browsing remain unsupported.
To add files, open a ZIP in one pane and press F5 on disk files in the other. The Update ZIP dialog requires explicit confirmation before replacing matching members. F8 inside a ZIP confirms deletion of selected files/folder trees. Both dialogs default to Cancel. F4 opens a ZIP text member in an owned private workspace; F2 saves back through a staged ZIP rebuild, while Save As exports a disk file. Unrelated members remain intact, and failures retain the original ZIP and dirty editor text. ZIP updates need space for a replacement archive. Other formats remain read-only. See archive workflows.
The viewer and editor support UTF-8, UTF-16 LE/BE, CP866, Windows-1251, KOI8-R and Windows-1252. BOM and valid UTF-8 are detected automatically; other plausible text opens an encoding chooser with a preview. F8 changes the encoding; in the editor it rereads the file after handling unsaved changes. F2 preserves encoding, BOM and mixed line endings. File → Save with encoding… converts explicitly; unrepresentable characters block saving instead of being replaced. New documents use UTF-8 without BOM. See text encodings.
Press F3 on a PDF to read extracted text internally, with page indicators, search and Go to page. Enter retains external opening. Archive members are supported. Encrypted PDFs use a masked password prompt with retry and cancellation. PDF and ZIP passwords are separate and are never saved. Graphics and OCR are not supported.
Enable Options → File Manager → Setup → Open TXT files in internal viewer
to use Enter or double-click for .txt / .TXT files on all three platforms.
It is off by default and overrides TXT associations when enabled. Ctrl+Enter
always opens externally; F3 and F4 retain their usual viewer/editor actions.
To import an old DOS Navigator leaderboard, copy dn.tet (or DN.TET) beside
config.conf, then open/reopen the game. Both original tables merge into their
respective Top Ten in tetris.conf, avoiding repeated imports. The original file
stays untouched. Choose Classic Tetris or Pentix in Setup; Pentix uses all 27
original figures, from one to five cells.
DOS files do not identify their text encoding: the first import uses CP437 for English or CP866 for Russian, according to the selected interface language. That choice is remembered in the Tetris file. Unicode names remain supported for new scores; unavailable original line counts display “—”.
See document foundations for implementation details.
cargo fmt --check
cargo clippy -- -D warnings
cargo test
cargo build --releaseOn GitHub, open Actions → Build all platforms → Run workflow to test and build macOS (Apple Silicon and Intel), Linux (x86_64 and ARM64), and Windows (x86_64). Each successful job uploads an archive containing the executable, README and MIT license, plus a SHA-256 checksum. Downloads are under that run's Artifacts and are retained for 30 days. These are unsigned builds; this workflow does not publish a GitHub Release. Rust checks is also manual-only: open it in Actions and choose Run workflow. Neither workflow runs on pushes, pull requests or a schedule.
The registry package is directory-navigator; its executable and Rust library
are dn. Dependencies use published crates.io versions, including unmodified
Turbo Vision 4.1.0. DN contains its terminal-cell and translated-caption adapters;
no framework fork is required.
Before manually publishing, review cargo package --list, run
cargo publish --dry-run, and verify the executable version. Keep source files,
locales, test fixtures, README files, documentation images, LICENSE and
THIRD_PARTY_NOTICES.md in the package. A dry run does not upload the crate.
For downloadable .deb files or your own APT repository, use
scripts/package_deb.py in a native Debian/Ubuntu amd64 or arm64 environment.
It builds with audio, resolves runtime dependencies, checks the package and
writes a SHA-256 checksum under target/debian/. An optional Docker smoke test
checks installation, upgrades and removal without installing on the host.
Nothing is uploaded automatically. See the Debian packaging guide
for tools, maintainer contact, commands and distribution compatibility.
The manual Actions → Build Debian packages workflow builds/tests both native
architectures and provides dn-deb-x86_64 and dn-deb-arm64 artifacts containing
.deb packages and checksums. It does not create a GitHub release or draft.
After pushing the workflow to the default branch, open Actions → Build unified
release → Run workflow, choose the source branch and enter a version without
v, for example 1.0.0 or 1.1.0-beta.1.
The manual workflow builds all five targets: macOS Apple Silicon and Intel,
Windows x86_64, and Linux x86_64 and ARM64. Apple Silicon, Windows and Linux run
full Clippy and test suites, including no-audio tests. Intel macOS uses formatting,
a release build, CLI version/help smoke checks and package verification, avoiding
extra development/test builds within the release timeout. The separate Build all
platforms workflow retains full Intel tests when needed. The release workflow
embeds your version in the app, About and CLI, then creates an unpublished draft release tagged
v<version>. Prerelease versions are marked automatically.
Downloads are five versioned binary archives (four TAR.GZ files and a Windows ZIP),
each including the executable, README, user guide and MIT license. Checksum files
are used internally to verify the builds and are not attached to the release.
Linux archives use dn-<version>-linux-x86_64.tar.gz and
dn-<version>-linux-aarch64.tar.gz names.
The tag points to the exact versioned source tree used for all builds. If needed, a release-only commit updates Cargo.toml/Cargo.lock; your development branch is not rewritten or bumped. Set the next branch version separately when appropriate. Only the final job has repository write access, and no tag or draft is created unless all five builds pass. Existing tags/releases are refused, never overwritten. If publication fails after creating the tag or draft, inspect that version in GitHub; finish the draft manually or deliberately remove the partial draft/tag before a new run. The workflow does not delete or replace existing releases during recovery.
Review the draft, test the downloads, edit the release notes and publish it yourself. macOS builds remain unsigned and unnotarized; Windows builds are unsigned. The repository must permit Actions to write contents/create tags; restrictive tag rules can block the final job. All workflows remain manual-only; nothing runs on pushes or tags.
These workflows remain independent of the unified release and run only when you
choose Run workflow. Select a source branch and enter the version without v.
| Actions workflow | Targets | Download under the run's Artifacts |
|---|---|---|
| Build Windows | Windows x86_64 | windows-downloads: ZIP with dn.exe |
| Build Linux | Linux x86_64 and ARM64 | linux-downloads: two TAR.GZ archives with dn |
Both workflows check, test and build the app, verify the requested executable
version, and include the README, user guide, MIT license, individual SHA-256
checksums and SHA256SUMS.txt. Downloads are retained for 30 days. They create no
tags or GitHub releases and do not publish a draft. The selected version is
embedded in the binaries; the source branch is unchanged. Windows builds are
unsigned. A successful build does not replace testing in Windows Terminal or a
Linux terminal.
Release helper tests (Python 3.12+, standard library only):
python3 -m unittest discover -s scripts -p 'test_*.py'The Rust application lives in src/, with tests in tests/.
Utilities → Network Information shows local interfaces, MAC addresses, IPv4/IPv6, default gateways and DNS servers for one selected adapter. Use the interface dropdown to switch adapters; Refresh retains the selection when available. Download and upload rates update about once per second in B/s, KiB/s or larger units, using all traffic on the selected adapter. These are local interface rates, not an Internet speed test. Switching adapters restarts measurement; unavailable counters are reported. This snapshot does not probe Internet connectivity. Important DN/system paths remain in System Information.
Utilities → Remote connections… opens the built-in SFTP, explicit FTPS and FTP connection dialog. Browse remote directories in either pane, use F3 to preview, F4 to edit and save back, F5 to download/upload, F7 to create directories, and F8 to permanently delete after confirmation. Rename operates on one remote item. Ctrl+PgUp disconnects and restores the original local directory.
Profiles store connection details and approved SSH fingerprints beside DN's configuration, never passwords or key passphrases. The Profiles list supports selection, editing/renaming and confirmed deletion. Verify a new SSH fingerprint before trusting it; changed saved keys are rejected. Prefer SFTP or FTPS: plain FTP sends credentials and files without encryption. FTPS validates certificates and never falls back to FTP.
Downloads use local staging and DN's normal conflict prompts. Uploads stage on
the server before rename; FTP publication guarantees depend on that server.
SFTP replacement requires its atomic rename extension. Remote links are not
traversed; transfers copy without removing sources. Direct remote-to-remote
transfers and automatic connection restoration are not supported. SSH terminal
hands the terminal to the installed OpenSSH ssh client and restores DN afterward;
it uses OpenSSH's own host-key checks and credentials. The shell always keeps a
real local working directory. See the guide.
Send text… sends links or multiline Unicode text to the selected receiver or manual address. Its owned composer provides Paste / Clear / Send / Cancel; Enter inserts a newline and Tab moves between controls. The limit is 64 KiB of UTF-8; oversized input is refused without truncation. The recipient is captured when the composer opens. Cancel/failure retains the draft until Nearby closes.
Receive and bilateral pairing are required. The receiver first approves an offer showing sender and byte count, then previews the received text and chooses Copy / Dismiss. Copy updates the system and internal clipboard where available, or only DN's internal clipboard in a console. Nothing changes the clipboard or opens a URL automatically. A preview remains until dismissed and blocks another offer. Sender confirmation means the other DN retained the text, not that it was copied; a missing receipt leaves delivery unconfirmed. Text uses no temporary file, transfer job, persistent history or clipboard synchronization. Both peers must support text sharing; existing file transfers remain compatible.
Test connection verifies reachability and bilateral pairing without selecting or sending files. Enable Receive on the other DN; both versions must support connection tests. Select a receiver or enter its manual details first. Edit This DN and press Enter for a session-only nickname (blank restores the anonymous default). Device info… shows the full public identity and local interfaces/IP:ports. Nicknames are discovery hints, never proof of identity.
Utilities → Nearby transfers… opens a session-only LAN sender/receiver. The enabled-by-default plugin starts no networking until Receive, Refresh, Test connection or Use panel selection is chosen. File → Send to nearby DN… captures visible marked files/folders, or the current item. Archive and remote members must first be extracted or downloaded.
Choose a receiver, compare the eight verification digits on both screens, and confirm on both computers. The receiver then reviews the offer and chooses an existing local destination. Transfers use direct encrypted QUIC through Iroh, without relays, public discovery, port mapping or internet probes. Manual connection details can be copied when multicast discovery is blocked; UDP must still be allowed between the computers. Default names contain only a random session identity, not usernames or hostnames.
Transfer Center owns progress, cancellation, conflict prompts and results. Closing the receiving window stops discovery and new offers; accepted jobs continue. Verification is remembered only for this DN run, and every offer still requires approval. Refresh rescans interfaces and restarts discovery without clearing your file selection. New VM interfaces are bound automatically when idle; during a peer session the refresh is deferred. Status separates missing announcements from receivers whose addresses fall outside connected LANs. Manual details retain usable addresses and translate IPv6 scopes locally; they do not enable routed/NAT-only paths. One peer session is supported at a time. Links and special files, remote browsing and restart/resume are not supported. See the guide for bounds and delivery guarantees.
Directory Navigator is available under the MIT license.
Copyright (c) 2026 Dmitry Yarygin.
