Skip to content

kotru21/FileManagerTauri

Repository files navigation

File Manager на Tauri

Tauri React TypeScript CI contributions welcome

File manager UI

Десктопный файловый менеджер на Tauri 2.x + React 19.2 + TypeScript, построенный по архитектуре Feature-Sliced Design (FSD).

Возможности

  • 📁 Навигация по файловой системе с историей (назад/вперёд)
  • 🔍 Поиск по имени и содержимому файлов (grep-like)
  • 📋 Операции с файлами: копирование, вырезание, вставка, удаление, переименование
  • 🖱️ Контекстное меню с горячими клавишами
  • 💾 Отображение дисков Windows
  • ⚡ Виртуализация списка для 10,000+ файлов
  • 🎨 Тёмная тема (shadcn/ui стиль)

Frontend

  • 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 — линт и форматирование

Backend

  • Tauri 2.x — десктопный фреймворк
  • tauri-specta — автогенерация TypeScript типов из Rust
  • walkdir — рекурсивный обход директорий
  • chrono — работа с датами

IPC (Tauri): контракты и правила

  • src/shared/api/tauri/bindings.tsавтосгенерированные типы/команды (руками не править).
  • src/shared/api/tauri/client.tstauriClient: единая точка вызова команд (оборачивает Result → throw).
  • src/shared/api/tauri/events.tstauriEvents: типизированные обёртки над событиями.

Для стабильности и единообразия код приложения не должен напрямую импортировать сгенерированные bindings/commands — это дополнительно защищено правилами линтера и архитектурным тестом.

Безопасность и ограничения

  • Приложению требуется полный доступ к файловой системе (без allowlist «разрешённых корней»). Безопасность обеспечивается hardening-логикой команд в backend.
  • Удаление файлов/папок усилено проверками: запрещены опасные цели (например, root/корень диска), для symlink используется поведение «удалить ссылку как ссылку» (не следовать по ней).
  • Генерация миниатюр ограничивает декодирование (лимиты/клампы), использует allowlist расширений; SVG намеренно исключён из backend-генерации миниатюр.
  • CSP и настройки окна задаются в src-tauri/tauri.conf.json.

Undo (текущие ограничения)

Операция Undo Примечание
rename Полный откат
move Обратное перемещение
create Удаление созданного
copy Требует tracking скопированных путей
delete Требует recycle bin / staging

Phase 2 (отдельный план): Windows Recycle Bin через SHFileOperation / trash crate.

Архитектура FSD

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/             # Константы, горячие клавиши

Установка

Требования

Запуск

# Установка зависимостей
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

Verification

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)

Husky on Windows

If hooks do not run after npm ci:

git config core.hooksPath .husky
npm run prepare

E2E prerequisites

  • 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.

IDE Setup

Горячие клавиши

Клавиша Действие
Ctrl+C Копировать
Ctrl+X Вырезать
Ctrl+V Вставить
Delete Удалить
F2 Переименовать
Ctrl+F Поиск
Backspace Наверх
Alt+← Назад
Alt+→ Вперёд
F5 Обновить

Лицензия

MIT

About

A tauri-based file explorer (Tauri + Rust + Typescript + React + Tailwind)

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages