A modern, cross-platform desktop archive manager built with Tauri (Rust backend) and React (frontend). Rusty Compress provides a unified, efficient interface for browsing, extracting, and managing various archive formats including ZIP, TAR, and RAR archives.
- Multi-Format Support: Handle ZIP, JAR, APK, XAPK, IPA, TAR, TAR.GZ, TGZ, TAR.BZ2, TBZ2, and RAR archives
- Unified Interface: Browse both filesystem directories and archive contents seamlessly
- File Extraction: Extract individual files or entire archives with progress tracking
- Preview Capabilities: View images directly from archives without full extraction
- Checksum Verification: Compute MD5, SHA1, SHA256, and SHA512 checksums with real-time progress
- Cross-Platform: Works on Windows, macOS, and Linux
- System Integration: Automatic file associations for supported archive types
- Efficient Performance: Rust backend for fast archive operations
Main Interface Archive Browsing Extraction Progress
Before you begin, ensure you have the following installed:
- Node.js (v16 or higher) - Download
- npm or yarn - Comes with Node.js
- Rust (latest stable) - Install via rustup
- System Dependencies:
- macOS: Xcode Command Line Tools (
xcode-select --install) - Linux: Build essentials and libwebkit2gtk (see Tauri prerequisites)
- Windows: Microsoft C++ Build Tools and WebView2
- macOS: Xcode Command Line Tools (
git clone https://github.com/vanhonit/rusty-compress.git
cd rusty-compressnpm installRun the full Tauri development environment (recommended):
npm run tauri devThis will:
- Build the Rust backend
- Start the Vite development server (port 1420)
- Launch the application window with hot-reload enabled
For frontend-only changes:
npm run devThis starts the Vite dev server on port 1420 with HMR on port 1421.
Build and test the Rust backend:
cd src-tauri
cargo build
cargo test
cargo clippynpm run buildnpm run tauri buildThis creates platform-specific installers in src-tauri/target/release/bundle/:
- macOS:
.dmginstaller - Windows:
.exeinstaller and.msi - Linux:
.AppImage,.deb, and.rpmpackages
rusty-compress/
├── src/ # React frontend
│ ├── components/ # Reusable UI components
│ │ ├── Tab.jsx # Tab component for file/archive views
│ │ └── TabBar.jsx # Tab bar management
│ ├── modules/ # Feature modules
│ │ ├── FileManager/ # Main file browsing interface
│ │ ├── Extract/ # Extraction progress window
│ │ └── Checksum/ # Checksum computation modal
│ ├── index.css # Global styles
│ └── main.jsx # React entry point
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── lib.rs # Main Tauri entry point
│ │ ├── data_type.rs # Shared data structures
│ │ ├── utils.rs # Archive type detection
│ │ ├── file_manager.rs # Filesystem operations
│ │ ├── zip.rs # ZIP archive handler
│ │ ├── tar.rs # TAR archive handler
│ │ └── rar.rs # RAR archive handler
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri configuration
├── package.json # Node.js dependencies
└── CLAUDE.md # Project documentation
- File Association: Double-click any supported archive file in your file manager
- In-App: Use the file browser to navigate to archives and open them
- Browse to an archive and select files you want to extract
- Click the "Extract" button in the toolbar
- Choose destination directory
- Monitor progress in the extraction window
- Select a file or multiple files
- Click the "Checksum" button
- Choose your preferred algorithm (MD5, SHA1, SHA256, SHA512)
- View real-time progress and results
- Double-click image files within archives to preview them
- Images are extracted temporarily and displayed in your system viewer
The backend exposes these commands to the frontend:
| Command | Description |
|---|---|
read_directory(path) |
List files in a filesystem directory |
open_file(path) |
Open a file with the system default application |
archive_file_details(archive_path, file_path, state) |
Get contents of an archive, optionally filtered by subdirectory |
extract_files(app_handle, archive_path, output_path, selected_files) |
Extract files from archive to destination |
view_file_in_archive(archive_path, file_name, state) |
View a specific file from archive in system viewer |
get_image_preview(archive_path, file_path) |
Get image preview from archive (returns data URL) |
compute_checksum(app_handle, file_path, algorithm) |
Compute checksum with progress reporting |
- Frontend: React 18 with Vite, Tailwind CSS for styling
- Backend: Rust with Tauri 2.x for native desktop capabilities
- Communication: Tauri commands expose Rust functions to React
- State Management: React hooks for frontend, Tauri State for backend
- Async Operations: Long-running tasks use
tauri::async_runtime::spawn_blocking - Progress Reporting: Events emitted via
app_handle.emit() - Temporary Files: Managed with
tempfile::TempDir, auto-cleanup on window close - File Associations: Configured in
tauri.conf.json
# Frontend tests (if configured)
npm test
# Backend tests
cd src-tauri
cargo test# Rust linter
cd src-tauri
cargo clippy
# Frontend linter (if configured)
npm run lintContributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests and linting
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow existing code style and patterns
- Write tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
.zip- Standard ZIP archives.jar- Java archives.apk- Android application packages.xapk- Android expanded app packages.ipa- iOS application packages
.tar- Tar archives.tar.gz,.tgz- Gzipped tar archives.tar.bz2,.tbz2- Bzip2 compressed tar archives
.rar- RAR archives
Rust compilation fails:
rustup update
cargo clean
cargo buildFrontend dependencies fail:
rm -rf node_modules package-lock.json
npm installArchive not opening:
- Ensure file format is supported
- Check file permissions
- Verify file is not corrupted
Extraction fails:
- Check disk space
- Verify write permissions to destination
- Ensure archive is password-free (encrypted archives not yet supported)
- Support for encrypted archives (password-protected ZIP, RAR)
- Archive creation and compression
- Split archive handling
- Batch extraction from multiple archives
- Archive search functionality
- Custom themes and UI customization
This project is licensed under the MIT License - see the LICENSE file for details.
- Tauri - Framework for building desktop apps
- React - UI library
- Vite - Build tool
- Rust - Backend language
- GitHub Issues: Report bugs or request features
- Discussions: Ask questions and share ideas
Built with ❤️ using Tauri and React