Десктопный файловый менеджер на 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 — иконки
- 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 на дополнительные операции (например,
deleteиcopy) и определить UX/ограничения (что именно и в каких случаях можно откатывать).
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 18+
- Rust
- Visual Studio Build Tools с компонентом "Desktop development with C++"
# Установка зависимостей
npm install
# Запуск в режиме разработки
npm run tauri dev
# Сборка production
npm run tauri build| Клавиша | Действие |
|---|---|
Ctrl+C |
Копировать |
Ctrl+X |
Вырезать |
Ctrl+V |
Вставить |
Delete |
Удалить |
F2 |
Переименовать |
Ctrl+F |
Поиск |
Backspace |
Наверх |
Alt+← |
Назад |
Alt+→ |
Вперёд |
F5 |
Обновить |
MIT