No description
  • Rust 61.4%
  • Shell 20.5%
  • TypeScript 9.7%
  • CSS 4.2%
  • JavaScript 3%
  • Other 1.2%
Find a file
mik-tf 3e2f4dd42b
Some checks failed
Build and Test / test (push) Failing after 3s
Build and Test / test (pull_request) Failing after 3s
chore: remove outdated design document
2026-02-21 23:34:30 -05:00
.forgejo/workflows feat: complete all feature gaps — recursive search, conflict handling, trash tracking, folder tree, context menu, Rhai bindings 2026-02-21 13:17:23 -05:00
crates fix: clippy needless_borrow, fmt consistency, and CI race condition 2026-02-21 23:26:11 -05:00
docs/schemas chore: remove outdated design document 2026-02-21 23:34:30 -05:00
schemas/filemanager chore: final cleanup — fmt, clippy fixes, remove TODO stubs 2026-02-21 10:49:18 -05:00
scripts fix: clippy needless_borrow, fmt consistency, and CI race condition 2026-02-21 23:26:11 -05:00
tests/e2e fix: update smoke and e2e tests for created_at u64 type 2026-02-21 21:48:37 -05:00
.gitignore feat: complete all features, 102 tests, security hardening 2026-02-21 21:10:27 -05:00
buildenv.sh chore: final cleanup — fmt, clippy fixes, remove TODO stubs 2026-02-21 10:49:18 -05:00
Cargo.lock feat: complete all features, 102 tests, security hardening 2026-02-21 21:10:27 -05:00
Cargo.toml chore: final cleanup — fmt, clippy fixes, remove TODO stubs 2026-02-21 10:49:18 -05:00
Makefile feat: complete all features, 102 tests, security hardening 2026-02-21 21:10:27 -05:00
README.md feat: complete all features, 102 tests, security hardening 2026-02-21 21:10:27 -05:00

Hero File Manager

Web-based file manager built on the Hero ecosystem. Embeds a WebDAV server (hero_fossil) and serves a Dioxus WASM frontend.

Quick Start

git clone https://forge.ourworld.tf/lhumina_code/hero_filemanager.git
cd hero_filemanager
make run        # Builds and starts backend (3394) + UI (8887)

Open http://localhost:8887 in your browser.

Architecture

Dioxus WASM UI (8887) ─── JSON-RPC ──> OServer Backend (3394) ─── WebDAV ──> hero_fossil (3387, embedded)
Crate Purpose
hero_filemanager Main binary — starts OServer + embedded WebDAV server
hero_filemanager_server RPC handlers, WebDAV client, OSIS types
hero_filemanager_ui Dioxus 0.7 web frontend (WASM)
hero_filemanager_sdk JSON-RPC client library (native + WASM)
hero_filemanager_rhai Rhai scripting bindings (10 functions)

Features

  • Browse, search, upload, download, rename, copy, move, delete files
  • Trash and restore with path-encoded .trash/ directory
  • Grid and list views with sortable columns and pagination
  • Markdown editor with edit/split/preview modes, autosave, image embed
  • Image viewer with zoom, rotate, gallery navigation
  • PDF viewer, text viewer with syntax highlighting
  • Drag-drop upload and drag-drop move (onto folders)
  • Keyboard shortcuts (Ctrl+C/X/V/A, Delete, F2, Backspace)
  • File info panel with metadata and copy-path
  • Activity/audit log panel
  • Context menus, inline rename, multi-select (shift+click)
  • MCP endpoint for AI tool integration

Development

make help          # Show all targets
make run           # Build and run backend + UI
make dev           # Same with RUST_LOG=debug
make check         # Fast cargo check
make fmt           # Format code
make lint          # Clippy

Testing

make test          # Rust unit tests (13)
make smoke-test    # Curl-based HTTP/RPC tests (29)
make e2e-test      # Playwright API tests (24)
make e2e-browser   # Playwright browser tests (36, needs WEBDAV_AVAILABLE=1)
make test-all      # Full CI suite (fmt, lint, check, test, build, smoke, e2e)

102 tests total covering all 10 RPC methods, serde compatibility, MCP endpoint, and all UI features.

Ports

Service Port
OServer backend 3394
Dioxus UI 8887
WebDAV (hero_fossil, embedded) 3387

RPC API

All via POST /api/root/filemanager/rpc (JSON-RPC 2.0):

Method Params Returns
fileservice.list_directory path, sort_by, sort_order Vec<FileEntry>
fileservice.get_file_info path FileEntry
fileservice.create_folder path, name FileEntry
fileservice.rename_item old_path, new_name FileEntry
fileservice.move_items paths, destination, on_conflict Vec<FileEntry>
fileservice.copy_items paths, destination, on_conflict Vec<FileEntry>
fileservice.delete_items paths bool
fileservice.trash_items paths bool
fileservice.restore_items paths bool
fileservice.search query, path Vec<FileEntry>

File upload/download via WebDAV: GET/PUT http://localhost:3387/webdav/default/{path}

License

See repository for license information.