Десктопный файловый менеджер на Tauri 2.x + React 19.2 + TypeScript, построенный по архитектуре Feature-Sliced Design (FSD).
- 📁 Навигация по файловой системе с историей (назад/вперёд)
- 🔍 Поиск по имени и содержимому файлов (grep-like)
- 📋 Операции с файлами: копирование, вырезание, вставка, удаление, переименование
- 🖱️ Контекстное меню с горячими клавишами
- 💾 Отображение дисков Windows
- ⚡ Виртуализация списка для 10,000+ файлов
- 🎨 Тёмная тема (shadcn/ui стиль)
- React 19.2 + TypeScript 5.9
- Zustand 5 — UI состояние (выделение, навигация, буфер обмена)
- TanStack Query 5 — серверное состояние (запросы к файловой системе)
- TanStack Virtual 3 — виртуализация списков
- Radix UI — примитивы UI (context-menu, dialog, tooltip)
- Tailwind CSS 4 — стилизация
- Lucide React — иконки
- Vitest — unit/integration тесты
- Playwright — E2E тесты
- Biome — линт и форматирование
- Tauri 2.x — десктопный фреймворк
- tauri-specta — автогенерация TypeScript типов из Rust
- walkdir — рекурсивный обход директорий
- chrono — работа с датами
src/shared/api/tauri/bindings.ts— автосгенерированные типы/команды (руками не править).src/shared/api/tauri/client.ts—tauriClient: единая точка вызова команд (оборачивает Result → throw).src/shared/api/tauri/events.ts—tauriEvents: типизированные обёртки над событиями.
Для стабильности и единообразия код приложения не должен напрямую импортировать сгенерированные bindings/commands — это дополнительно защищено правилами линтера и архитектурным тестом.
- Приложению требуется полный доступ к файловой системе (без allowlist «разрешённых корней»). Безопасность обеспечивается hardening-логикой команд в backend.
- Удаление файлов/папок усилено проверками: запрещены опасные цели (например, root/корень диска), для symlink используется поведение «удалить ссылку как ссылку» (не следовать по ней).
- Генерация миниатюр ограничивает декодирование (лимиты/клампы), использует allowlist расширений; SVG намеренно исключён из backend-генерации миниатюр.
- CSP и настройки окна задаются в
src-tauri/tauri.conf.json.
| Операция | Undo | Примечание |
|---|---|---|
| rename | ✅ | Полный откат |
| move | ✅ | Обратное перемещение |
| create | ✅ | Удаление созданного |
| copy | ❌ | Требует tracking скопированных путей |
| delete | ❌ | Требует recycle bin / staging |
Phase 2 (отдельный план): Windows Recycle Bin через SHFileOperation / trash crate.
src/
├── app/ # Точка входа, провайдеры, глобальные стили
├── pages/ # Страницы приложения
│ └── file-browser/ # Главная страница файлового менеджера
├── widgets/ # Композитные UI блоки
│ ├── file-explorer/ # Виртуализированный список файлов
│ ├── breadcrumbs/ # Хлебные крошки
│ ├── toolbar/ # Панель инструментов
│ ├── sidebar/ # Боковая панель с дисками
│ └── status-bar/ # Статус бар
├── features/ # Бизнес-фичи
│ ├── file-selection/ # Выделение файлов
│ ├── navigation/ # Навигация с историей
│ ├── clipboard/ # Copy/Cut буфер
│ ├── search-content/ # Поиск по имени и содержимому
│ └── context-menu/ # Контекстное меню
├── entities/ # Бизнес-сущности
│ ├── file-entry/ # FileEntry: типы, queries, UI компоненты
│ └── drive/ # DriveInfo UI
└── shared/ # Переиспользуемый код
├── api/tauri/ # tauri-specta bindings
├── ui/ # UI компоненты (Button, Dialog, etc.)
├── lib/ # Утилиты (cn, formatBytes, formatDate)
└── config/ # Константы, горячие клавиши
- Node.js 20–24 LTS (см.
enginesвpackage.json) - Rust
- Visual Studio Build Tools с компонентом "Desktop development with C++"
# Установка зависимостей
npm install
# Запуск в режиме разработки
npm run tauri dev
# Сборка production
npm run tauri build| Команда | Описание |
|---|---|
npm run tauri dev |
Dev (Vite :1420 + Rust backend) |
npm run lint:all |
Biome + Clippy |
npm run test |
Vitest unit tests |
npm run test:e2e |
Playwright E2E |
npm run sync:versions |
Синхронизировать версию в Cargo/tauri.conf |
| Command | Description |
|---|---|
npm run verify |
Local equivalent of CI quality job (lint + typecheck + coverage) |
cargo test --manifest-path src-tauri/Cargo.toml |
Rust integration tests (run separately) |
cargo fmt --all --manifest-path src-tauri/Cargo.toml -- --check |
Rust format check |
npm run test:e2e |
Playwright E2E (requires Windows; starts tauri dev) |
If hooks do not run after npm ci:
git config core.hooksPath .husky
npm run prepare- Windows (real Tauri backend)
- Node 20–24 LTS
- Rust stable toolchain
npx playwright install chromium
- Vitest — unit/integration тесты (
npm run test) - Playwright — E2E (
npm run test:e2e) - Biome — линт и форматирование фронтенда
- Clippy — линт Rust backend (
npm run lint:rust)
Текущая версия приложения: 0.8.5.
| Клавиша | Действие |
|---|---|
Ctrl+C |
Копировать |
Ctrl+X |
Вырезать |
Ctrl+V |
Вставить |
Delete |
Удалить |
F2 |
Переименовать |
Ctrl+F |
Поиск |
Backspace |
Наверх |
Alt+← |
Назад |
Alt+→ |
Вперёд |
F5 |
Обновить |
MIT