Tired for 2010s FTP clients? BestFTP is a modern, fast, and user-friendly FTP client with all features you need.
BestFTP is a high-performance, next-generation FTP client designed with a focus on speed, reliability, and a premium user experience. Built using the Tauri stack, it combines the native performance of Rust with the flexibility of React.
- Native Performance: Leverages Rust's speed for file operations and network communication.
- Dual-Pane Interface: Traditional yet modernized side-by-side view for local and remote file systems.
- Auto-Reconnect: Smart connection management that handles drops and retries automatically.
- Premium UI: A stunning interface built with Tailwind CSS V4, featuring glassmorphism, smooth animations, and the custom "Paghalopi" theme.
- Media Integration: Built-in high-quality video and audio viewers for previewing remote content.
- Code Editor: Integrated Monaco Editor (the engine behind VS Code) for seamless file editing.
- Rich Operations: Supports recursive deletion, batch uploads/downloads, and advanced file manipulation.
- Deep Windows Integration: Automatically tracks recent folders via PowerShell integration.
-
Framework: React 19 (TypeScript)
-
Styling: Tailwind CSS V4 & Custom CSS Modules
-
State Management: React Hooks (State/Ref/Callback) & Zustand
-
Icons: Lucide React
-
Build Tool: Vite
-
Key Pages:
Dashboard: The main application interface with dual-pane layoutLogin: Authentication and connection setup interface
-
Core Components:
TitleBar: Custom window frame with system controlsFileList: High-performance file explorer with sorting, filtering, and context menusPane: Container component for local/remote file system viewsBreadcrumbs: Navigation path display and interactionContextMenu: Right-click context menus for file operationsDialogs: Modal dialogs for various operations (rename, delete, etc.)EditorDialog: Integrated Monaco Editor for file editingVideoViewer: Built-in media player for video contentSidebar: Quick access and navigation panelStatusBar: Connection status and transfer progressToastList: Notification systemDragGhost: Visual feedback during drag-and-drop operationsDropOverlay: Drop zone indicators
-
Custom Hooks:
useFileSystem: Core hook orchestrating local/remote state synchronizationuseFileOperations: File manipulation operations (copy, move, delete)useDashboardDragDrop: Drag-and-drop functionalityuseDashboardContextMenu: Context menu managementuseDashboardColumnResize: Resizable column layoutuseKeybindings: Keyboard shortcuts and hotkeysuseToasts: Toast notification managementuseTransferQueue: Background transfer queue management
-
Utilities & Libraries:
tauri-api.ts: Tauri command wrappers and type definitionsapi.ts: HTTP API utilitiesfileIcons.tsx: File type icon mappingthemes/: Custom theme system including Monaco editor themessymbol-icon-theme.json: VS Code symbol icon theme
-
Runtime: Tauri V2 (Rust)
-
FTP Engine:
suppaftp(Async) providing robust protocol implementation -
Concurrency:
tokiofor non-blocking I/O operations -
Process Management:
spawn_blockingfor heavy filesystem tasks -
Core Modules:
main.rs: Application entry point and window setuplib.rs: Core library initializationmodels.rs: Type-safe data structures synchronized with TypeScriptreconnect.rs: Connection persistence and auto-reconnect logicutils.rs: Shared utility functions
-
Command System (RPC Bridge):
commands/mod.rs: Command registry and routingcommands/connection.rs: FTP connection managementcommands/system.rs: System information and PowerShell integrationcommands/common.rs: Shared command utilities
-
File System Operations:
commands/fs/mod.rs: File system command coordinatorcommands/fs/listing.rs: Directory listing and metadatacommands/fs/manipulation.rs: File operations (create, delete, rename)commands/fs/config.rs: Configuration management
-
Transfer Engine:
commands/transfer/mod.rs: Transfer operation coordinatorcommands/transfer/upload.rs: File upload with progress trackingcommands/transfer/download.rs: File download with resume supportcommands/transfer/move_op.rs: Remote file move operationscommands/transfer/progress.rs: Real-time progress reportingcommands/transfer/io.rs: Low-level I/O operations
BestFTP uses Tauri's secure inter-process communication (IPC) to bridge the frontend and backend:
- Invoke Pattern: React calls Rust commands using
@tauri-apps/api/core - CommandResult: Unified response pattern with consistent error handling
- Async Operations: Non-blocking commands with progress callbacks
- Type Safety: Shared TypeScript definitions generated from Rust models
- CSP Policy: Content Security Policy for secure resource loading
- Asset Protocol: Controlled access to local and remote assets
- Capabilities: Fine-grained permission system via
default.json - Sandboxing: Isolated runtime environment for safe operations
BestFTP/
├── Frontend (React + TypeScript)
│ ├── Pages/
│ │ ├── Dashboard.tsx # Main application interface
│ │ └── Login.tsx # Authentication screen
│ ├── Components/
│ │ ├── TitleBar.tsx # Custom window frame
│ │ └── Dashboard/
│ │ ├── FileList.tsx # File explorer component
│ │ ├── Pane.tsx # Local/remote container
│ │ ├── Breadcrumbs.tsx # Navigation path
│ │ ├── ContextMenu.tsx # Right-click menus
│ │ ├── Dialogs.tsx # Modal dialogs
│ │ ├── EditorDialog.tsx # Monaco editor integration
│ │ ├── VideoViewer.tsx # Media player
│ │ ├── Sidebar.tsx # Quick navigation
│ │ ├── StatusBar.tsx # Status & progress
│ │ ├── ToastList.tsx # Notifications
│ │ ├── DragGhost.tsx # Drag visual feedback
│ │ └── DropOverlay.tsx # Drop zone indicators
│ ├── Hooks/
│ │ ├── useFileSystem.ts # Core state management
│ │ ├── useFileOperations.ts # File operations
│ │ ├── useDashboardDragDrop.ts # Drag & drop
│ │ ├── useDashboardContextMenu.ts # Context menus
│ │ ├── useDashboardColumnResize.ts # Resizable columns
│ │ ├── useKeybindings.ts # Keyboard shortcuts
│ │ ├── useToasts.ts # Toast notifications
│ │ └── useTransferQueue.ts # Transfer management
│ ├── Utils/
│ │ ├── api.ts # HTTP utilities
│ │ ├── fileIcons.tsx # File type icons
│ │ └── symbol-icon-theme.json # VS Code icons
│ ├── Themes/
│ │ ├── index.ts # Theme system
│ │ └── monaco-themes.ts # Editor themes
│ └── Lib/
│ └── tauri-api.ts # Tauri command wrappers
│
├── Backend (Rust + Tauri)
│ ├── main.rs # Application entry point
│ ├── lib.rs # Core initialization
│ ├── models.rs # Shared data structures
│ ├── reconnect.rs # Connection management
│ ├── utils.rs # Utility functions
│ └── Commands/
│ ├── mod.rs # Command registry
│ ├── connection.rs # FTP connections
│ ├── system.rs # System integration
│ ├── common.rs # Shared utilities
│ ├── fs/
│ │ ├── mod.rs # File system coordinator
│ │ ├── listing.rs # Directory listings
│ │ ├── manipulation.rs # File operations
│ │ └── config.rs # Configuration
│ └── transfer/
│ ├── mod.rs # Transfer coordinator
│ ├── upload.rs # File uploads
│ ├── download.rs # File downloads
│ ├── move_op.rs # Remote moves
│ ├── progress.rs # Progress tracking
│ └── io.ts # Low-level I/O
│
└── Configuration & Build
├── src-tauri/
│ ├── tauri.conf.json # Tauri configuration
│ ├── Cargo.toml # Rust dependencies
│ └── capabilities/
│ └── default.json # Security permissions
├── package.json # Node.js dependencies
├── vite.config.ts # Vite build config
└── tsconfig.json # TypeScript config
| Layer | Technology | Purpose |
|---|---|---|
| Core Framework | Tauri | Cross-platform desktop app framework |
| Frontend | React 19 | UI framework with TypeScript |
| Backend Logic | Rust | High-performance systems programming |
| FTP Engine | suppaftp | Async FTP client implementation |
| Async Runtime | Tokio | Asynchronous I/O and concurrency |
| Styling | Tailwind CSS V4 | Utility-first CSS framework |
| Code Editor | Monaco Editor | VS Code editor engine |
| Icons | Lucide | Modern icon library |
| Build Tool | Vite | Fast development build tool |
| Package Manager | Bun | Fast package manager and runtime |
| State Management | Zustand | Lightweight state management |
| Type Safety | TypeScript | Static type checking across frontend/backend |
-
Clone the repository:
git clone https://github.com/your-repo/BestFTP.git
-
Install Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
Install NodeJS:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt-get install -y nodejsor (Arch Linux)
sudo pacman -Syu sudo pacman -S nodejs
or (Fedora)
sudo dnf install nodejs
or (Windows)
winget install -e --id OpenJS.Nodejs
-
Install dependencies:
bun install
-
Run in development mode:
bun run tauri dev
or (Any platform)
cd src-tauri cargo tauri dev