Fumi is an elegant and soft UI wrapper for MacSploit and Opiumware.
- Workspace editor for local folders with tab creation, rename, duplicate, reorder, archive, restore, delete, and session restore flows
- Luau-focused editing with Ace, completion support, outline analysis, editor search, split panes, and persisted workspace state
- Script Library screen backed by Rscripts.net with search, filters, sorting, favorites, copy-link, copy-script, and add-to-workspace actions
- Accounts screen for saving roblox cookies, resolving Roblox profiles, launching saved accounts, and deleting stored accounts
- Roblox process controls from the desktop shell, including launch, process listing, and kill actions
- Executor integration for attach, detach, reattach, execute, and executor setting updates
- Settings for theme, zoom, updater behavior, editor preferences, hotkeys, and archived workspace tabs
- Native Tauri menus, dialogs, clipboard writes, updater flow, opener integration, and desktop window lifecycle handling
The current app shell exposes four primary screens:
WorkspaceScript LibraryAccountsSettings
Navigation also exists through the command palette and app hotkeys.
| Layer | Technology | Version / Source |
|---|---|---|
| Runtime / package manager | Bun | bun@1.3.10 |
| Desktop shell | Tauri | v2 |
| Native backend | Rust | 1.88.0 |
| Frontend | React | ^19.2.4 |
| Frontend toolchain | Vite+ | latest |
| Vite-compatible core | @voidzero-dev/vite-plus-core via vite alias |
latest |
| Language | TypeScript | ^6.0.2 |
| Styling | Tailwind CSS | ^3.4.16 |
| Formatting / linting | Biome | ^2.0.6 |
| State management | Zustand | ^5.0.12 |
| Editor | Ace / React Ace | ^1.43.4 / ^14.0.1 |
| DnD | @dnd-kit/react |
^0.3.2 |
| Hotkeys | @tanstack/react-hotkeys |
^0.4.2 |
| Native plugins | Clipboard Manager, Dialog, Opener, Process, Updater | Tauri v2 plugins |
Fumi is split into a React frontend and a Rust/Tauri backend with typed platform wrappers between them.
flowchart LR
UI["React UI<br/>src/view + src/components"] --> Hooks["Hooks + Zustand<br/>src/hooks"]
Hooks --> Platform["Typed platform wrappers<br/>src/lib/platform"]
UI --> Library["Remote Script Library<br/>Rscripts.net"]
Platform --> IPC["Tauri commands & events"]
IPC --> Backend["Rust backend<br/>src-tauri/src"]
Backend --> Workspace["Workspace storage"]
Backend --> Accounts["Account storage + Roblox process control"]
Backend --> Executor["Executor attach / execute"]
Backend --> Shell["Menus, dialogs, updater, lifecycle"]
src/view/contains the app entrypoint, shell composition, and screen switchingsrc/components/contains reusable UI for the app shell, workspace, script library, accounts, and settingssrc/hooks/contains the main app, workspace, script library, tooltip, and accounts flowssrc/lib/platform/is the boundary for Tauri APIs and plugin-backed desktop operationssrc/lib/luau/,src/lib/workspace/,src/lib/scriptLibrary/, andsrc/lib/accounts/contain domain logic and parsing
src-tauri/src/workspace/handles workspace bootstrap, file operations, persistence, and archived-tab flowssrc-tauri/src/accounts/handles saved account operations, Roblox cookie/profile handling, and Roblox process controlsrc-tauri/src/executor/handles executor status, attach/detach, execute, and related settingssrc-tauri/src/luau/handles Luau analysis commandssrc-tauri/src/menu.rs,src-tauri/src/lifecycle.rs,src-tauri/src/dialog.rs, andsrc-tauri/src/state.rshandle native shell behavior
- macOS
- Xcode Command Line Tools
- Node.js
>=20.19.0 - Bun
>=1.3.10 - Rust
1.88.0
Install dependencies:
bun installRun the full desktop app:
bun run devRun only the frontend:
bun run dev:webBuild frontend assets:
bun run build:webBuild the desktop app:
bun run buildRun tests:
bun run testRun type checks:
bun run typecheckRun Biome checks:
bun run lintApply formatting:
bun run format.
|-- .github/workflows/ # CI and publish workflows
|-- resources/ # Branding assets and repo-specific docs
|-- src/
| |-- assets/ # Bundled frontend assets
| |-- components/ # Reusable React UI
| |-- constants/ # Domain constants
| |-- contexts/ # React providers
| |-- hooks/ # App and feature hooks
| |-- lib/ # Domain logic and platform wrappers
| `-- view/ # Frontend entrypoint and app shell
|-- src-tauri/
| |-- capabilities/ # Tauri capability definitions
| |-- icons/ # App icons
| |-- src/ # Rust backend
| |-- Cargo.toml
| `-- tauri.conf.json
|-- biome.json
|-- package.json
`-- vite.config.mts
Current validation is driven by package.json scripts and GitHub Actions.
bun run testrunsvp test runandcargo test --manifest-path src-tauri/Cargo.tomlbun run lintrunsbiome checkbun run typecheckrunstsc --noEmit- CI runs on pushes to
mainand on pull requests using.github/workflows/ci.yml - CI currently runs install, lint, typecheck, test, and
bun run build:web
- Publishing is handled by
.github/workflows/publish.yml - Pushing a tag that matches
app-v*triggers signed release builds - The publish workflow builds both
aarch64-apple-darwinandx86_64-apple-darwintargets - The updater is configured to read from
https://github.com/FrozenProductions/Fumi/releases/latest/download/latest.json - Publishing requires
TAURI_SIGNING_PRIVATE_KEYandTAURI_SIGNING_PRIVATE_KEY_PASSWORDGitHub secrets
- Use the scripts in
package.jsonas the source of truth - Keep Tauri API usage behind
src/lib/platform/wrappers - Keep shared contracts explicit and domain-local instead of introducing generic dump files
- Follow the existing split between
src/view/,src/components/,src/hooks/,src/lib/, andsrc-tauri/ - For runtime wiring or cross-process changes, run
bun run lint,bun run typecheck, andbun run build
This project is licensed under the MIT License.
