Fast, queue-aware file and folder copying built around the native right-click workflow.
mcopy is designed to make large copy operations feel lighter and more controlled. Instead of forcing the user into a terminal-first flow, it turns the familiar Explorer copy/paste gesture into an async pipeline with a live GPUI progress window, cooperative pause/resume/cancel controls, and a clean separation between shell integration, clipboard state, copy orchestration, and UI.
If you only want to get started, jump to Quick Start.
- What mcopy Is
- Why It Exists
- Highlights
- Quick Start
- How It Works
- Execution Flow
- Implementation Path
- Architecture
- Commands
- Usage Guide
- Configuration and Behavior
- Project Structure
- Development
- Troubleshooting
mcopy is a Rust-based copy tool that focuses on three things:
- A Windows Explorer-friendly copy/paste experience
- Async, concurrent file copying
- Better visibility and control during long-running operations
The main user experience is simple:
- Select files or folders.
- Choose
Copy with mcopy. - Navigate to the destination.
- Choose
Paste with mcopyorPaste here with mcopy. - Watch and control the operation in a dedicated progress window.
Under the hood, the app uses the clipboard as a lightweight transfer contract, collects the final file list before copying, pre-creates directories, and then processes the queue concurrently.
Traditional copy flows are easy to start but hard to observe and control once they become large. mcopy aims to keep the low-friction feel of a right-click workflow while adding the things power users usually want:
- More predictable queue handling
- Faster throughput through concurrency
- A visible, focused progress surface
- Pause, resume, and cancel controls that do not require redesigning the copy engine mid-operation
- Async and concurrent copy pipeline powered by Tokio and Futures
- Windows Explorer context menu integration for copy and paste
- Multi-selection support using clipboard append behavior
- GPUI progress window with live status and action controls
- Cooperative pause, resume, and cancel flow
- Legacy CLI mode for terminal usage
- Clear separation between shell integration, clipboard handling, core engine, and UI
cargo build --releaseGenerated executable:
target\release\mcopy.exe
Open PowerShell as Administrator in the project directory and run:
.\target\release\mcopy.exe installYou can also run the same flow through Cargo:
cargo run --release -- installInstalled right-click entries:
Copy with mcopyon filesCopy with mcopyon foldersPaste here with mcopyon foldersPaste with mcopyon folder backgroundsPaste with mcopyon drive roots
- Select a file or folder in Explorer.
- Right-click and choose
Copy with mcopy. - Open the target folder.
- Right-click and choose
Paste with mcopyorPaste here with mcopy. - Control the job from the progress window.
.\target\release\mcopy.exe uninstallor:
cargo run --release -- uninstallAt a high level, mcopy follows this sequence:
- The copy action stores selected paths in the clipboard.
- The paste action reads the clipboard payload and validates the sources.
- The app recursively expands folders into a flat copy plan.
- Destination directories are created before file transfer begins.
- A GPUI progress window is launched on a separate UI thread.
- The copy engine runs concurrently and emits progress updates.
- The UI reflects progress and exposes pause, resume, and cancel actions.
- Once the queue ends, the window briefly shows the terminal state and then auto-closes.
This design keeps the user flow simple while giving the implementation room to remain modular and observable.
When the user triggers Copy with mcopy, the application:
- Canonicalizes the selected paths
- Normalizes Windows UNC-prefixed paths when needed
- Stores the result in the clipboard as newline-separated absolute paths
- Supports multi-select by appending into the same clipboard session for a short time window
When the user triggers Paste with mcopy, the application:
- Reads and validates the clipboard payload
- Creates the destination folder if it does not already exist
- Recursively collects every file that should be copied
- Pre-creates destination directories
- Starts the progress window
- Runs the concurrent copy pipeline
During the copy:
Pausestops new work from startingResumerestarts queue intakeCancelstops the remaining queue from advancing
Important behavior:
- Pause and cancel are cooperative controls
- Any file copy already in progress is allowed to finish safely
- The queue state updates independently from the UI rendering loop
One of the strongest parts of this project is the path it takes architecturally. Instead of building a monolithic “copy app,” mcopy follows a layered approach:
The project starts from the user’s existing muscle memory: right-click, copy, paste. That keeps the tool approachable and removes the need for a separate launch-first workflow.
Rather than inventing a heavyweight session manager, the project uses the clipboard to carry canonicalized source paths between the copy and paste phases. This keeps the integration simple and shell-friendly.
Before any transfer begins, the application collects the full file plan and pre-creates required directories. This makes the execution stage cleaner and easier to observe.
Instead of trying to interrupt fs::copy mid-flight, the control layer pauses or cancels future work. That keeps the implementation simpler and safer while still giving the user meaningful control over the queue.
The copy engine emits progress updates, and the GPUI layer renders state derived from those updates. This separation keeps the UI replaceable and the core copy logic reusable.
The project is organized around four main concerns.
src/main.rs handles:
- CLI parsing
- Context menu install and uninstall commands
- Clipboard-driven paste orchestration
- Legacy terminal mode
src/lib.rs handles:
- File collection
- Destination directory preparation
- Concurrency selection
- Cooperative control state
- Concurrent file copy execution
- Progress event emission
src/clipboard.rs handles:
- Canonicalizing selected paths
- Storing clipboard payloads
- Multi-select append behavior
- Session timeout behavior
- Payload clearing
src/ui/ handles:
- Progress state snapshots
- Window lifecycle
- Status rendering
- Buttons and interaction controls
- Terminal-state auto-close behavior
src/context_menu.rs handles:
- Windows registry integration
- macOS Finder Services integration
- Linux file manager integration helpers
The primary polished workflow is Windows Explorer-first, but the codebase is structured to keep platform-specific integration logic isolated.
mcopy install
mcopy uninstallThese commands register or remove platform-specific shell integration. On Windows, they require Administrator privileges because they write to the registry.
mcopy copy C:\source\file.txt
mcopy copy --append C:\source\folder
mcopy paste C:\target\folder
mcopy clearThese commands are the foundation of the Explorer workflow and can also be used directly from the terminal.
mcopy C:\source C:\target
mcopy C:\source C:\target -j 16
mcopy C:\source C:\target --no-progressLegacy mode remains useful for terminal-driven workflows and local debugging.
- Select one or more files or folders.
- Trigger
Copy with mcopy. - Open the destination directory.
- Trigger
Paste with mcopyorPaste here with mcopy. - Monitor and control the operation in the progress window.
Use the CLI directly when you want:
- Scriptable execution
- Legacy progress bars
- Manual concurrency override
- Easier debugging during development
- Default concurrency is
CPU core count x 4 - The lower bound is
4 - The upper bound is
128 - Legacy CLI mode allows manual override with
-j
- Source paths are canonicalized before being stored
- Existing clipboard paths are filtered during paste
- Windows UNC prefixes are normalized before use
- Directory trees are flattened into a concrete file plan before execution
- Destination directories are created ahead of time
- Progress counts completed and failed files
- Failed files do not stop the whole queue by default
- The progress window opens as a popup
- Closing the window during an active job triggers cancellation instead of immediate exit
- After completion or cancellation, the window remains visible briefly and then auto-closes
src/
|- main.rs
|- lib.rs
|- clipboard.rs
|- context_menu.rs
`- ui/
|- mod.rs
|- constants.rs
|- progress.rs
|- widgets.rs
`- window.rs
Responsibility summary:
main.rs: command routing and application flowlib.rs: copy planning, concurrency, control, and executionclipboard.rs: clipboard persistence and session behaviorcontext_menu.rs: platform-specific shell integrationui/: GPUI window, state, and presentation logic
- Rust 2024 edition
- Tokio
- Futures
- Clap
- Indicatif
- GPUI
- arboard
cargo fmtcargo checkcargo clippy --all-targets -- -W unused -W dead_code -W unused_importsIf you are new to the codebase, the best reading order is:
src/main.rssrc/lib.rssrc/clipboard.rssrc/context_menu.rssrc/ui/
That order mirrors the actual execution path of the product.
- Make sure you ran
installfrom an elevated PowerShell session - Run the install command again
- Restart Explorer or sign out and back in if necessary
- The registry is likely still pointing to an older executable path
- Run
uninstall - Reinstall using the latest release binary
- Open PowerShell with
Run as Administrator - Retry the
installoruninstallcommand
- Run
Copy with mcopyfirst - Make sure the selected files or folders still exist
- Retry the paste command after refreshing the copy selection
mcopy is built around a simple idea: keep the user-facing workflow familiar, but make the actual copy pipeline smarter, more observable, and easier to control. If you want a copy tool that feels native at the surface and structured under the hood, this codebase is built exactly for that.