Two panes, everything on the keyboard, and a window that feels native on every desktop. Copy and move between panes, browse remote servers over SFTP, search in an instant, and delete straight to the system trash.
macOS - via Homebrew:
brew install --cask utopleman/duetto/duettoWindows / Linux - grab the latest build from the Releases page.
Duetto is unsigned, so macOS blocks it on first launch: right-click the app and
choose Open, or run xattr -dr com.apple.quarantine "/Applications/Duetto.app".
See Install below for all download options.
- Dual-pane, keyboard-first - view (
F3), copy (F5), move (F6), delete (F8), rename (F2), new file/folder (F7);Tabswitches panes,Enteropens,Backspacegoes up. - Built-in file viewer -
F3on the cursor file (or a search result) opens a reusable viewer window: text with line numbers, a hex dump for binaries, images rendered inline, SVG drawn as vector art, and PDF pages rendered page by page (PgDn/PgUpor the arrow keys step pages). Works over every backend, local and remote.Ctrl/Cmd+Ffinds within the file,n/Nstep through matches,Wtoggles word wrap,Esccloses. Limits: the first 4 MB of a text or binary file is shown (with a footer notice and an Open in default app action), images up to 64 MB are decoded - anything larger falls back to a hex dump - and PDFs up to 128 MB are rendered. - Native on every OS - the window chrome adapts to Windows, macOS, and GNOME.
- Remote over SFTP - save connections and browse or transfer files over SSH, with trust-on-first-use host-key verification. (setup & security)
- Remote over SMB / Samba - connect to Windows shares and NAS boxes (SMB 2/3) with a pure-managed client; user/password/domain or guest, share browsing. (setup & security)
- Remote over S3 - connect to Amazon S3 and S3-compatible stores (MinIO, R2, Wasabi, B2); access keys, AWS profile, or anonymous; the root lists your buckets. (setup & security)
- Remote over Azure Blob - connect to Azure Blob Storage and Blob-compatible services (Azurite); account key, connection string, SAS, or anonymous; the root lists your containers. (setup & security)
- Instant search - recursive, scoped to the current folder or a remote share.
- Safe deletes - everything goes to the system trash: the Recycle Bin on Windows, the FreeDesktop trash on Linux, and the native macOS trash (with Put Back and correct handling of other volumes).
- Remembers your workspace - window position, size, and maximized state, plus each pane's last folder, restored on the next launch.
- Command line -
duetto [folder]opens a folder in the left pane; aduettolauncher installs itself on yourPATHthe first time you run the app.
Download the latest build for your platform from the Releases page:
| Platform | Download |
|---|---|
| Windows (x64) | duetto-<version>-win-x64.zip |
| macOS (Apple Silicon) | Duetto-<version>-arm64.dmg, duetto-<version>-osx-arm64.zip |
| macOS (Intel) | Duetto-<version>-x64.dmg, duetto-<version>-osx-x64.zip |
| Linux (x64) | duetto-<version>-linux-x64.zip |
Builds are self-contained - no runtime to install.
macOS builds are unsigned. On first launch, right-click the app and choose Open, or clear the quarantine flag:
xattr -dr com.apple.quarantine /Applications/Duetto.appCommand line: after launching once, duetto is on your PATH:
duetto . # open the current directory
duetto ~/Projects # open a specific folderRequires the .NET 10 SDK.
dotnet run --project src/Duetto # run the app
dotnet test tests/Duetto.Tests/Duetto.Tests.csproj # run the tests
scripts/publish-all.sh # self-contained zips for all platforms
scripts/make-dmg.sh osx-arm64 # macOS .dmg (osx-arm64 | osx-x64)See CONTRIBUTING.md for more, and docs/remote-sftp.md for SFTP details.
MIT © 2026 UtopleMan
The viewer embeds two rendering stacks whose licenses ship with every build:
| Component | Used for | License |
|---|---|---|
| PDFium (via Docnet.Core) | PDF page rendering | BSD-3-Clause (PDFium), MIT (Docnet.Core) |
Svg.Controls.Avalonia with Svg.Model, Svg.SceneGraph, ShimSkiaSharp |
SVG rendering | MIT |
Svg.Custom (transitive, from the same stack) |
SVG document model | MS-PL |
The PDFium native libraries are redistributed unmodified; their BSD-3-Clause
notice is the LICENSE file inside each Docnet.Core runtime package.


