A lightweight code editor — fast, focused, and out of your way.
A file browser + editor, an integrated terminal, Git, and a manifest-based plugin system in a single fast native desktop app for macOS (Windows & Linux planned) — no AI, no clutter.
brew tap bemindlabs/liteduck https://github.com/bemindlabs/liteduck
brew install bemindlabs/liteduck/liteduckThe formula lives in this repo's HomebrewFormula/ directory — there is no
separate tap repo, so brew tap points straight at the LiteDuck repository.
Homebrew then builds LiteDuck from source — it compiles the Tauri app locally
with Node + Rust. There is no prebuilt binary to download.
Update with Homebrew (there is no in-app auto-updater):
brew upgrade liteduckUnsigned build. Because LiteDuck is built from source, the resulting app is not code-signed or notarized. The first time you open it, macOS Gatekeeper may block it — right-click LiteDuck.app and choose Open, or run
xattr -dr com.apple.quarantine "$(brew --prefix)/opt/liteduck/LiteDuck.app".
Planned: Windows & Linux. LiteDuck is macOS-only for now. Support for other platforms will follow once those targets ship.
| Feature | Description |
|---|---|
| Workspace Shell | VS Code-style layout: activity rail, file-tree side panel, editor area, collapsible terminal dock, and status bar — all visible at once |
| File Manager | Tree view with a full right-click menu (cut/copy/paste, duplicate, new file/folder, rename, delete, copy path / relative path, reveal in Finder, open in VS Code, open terminal here), drag-to-move onto folders, image/markdown preview; drag a file/folder onto the terminal to insert its path |
| Code Editor | CodeMirror 6: language-aware syntax highlighting, find & replace (Cmd+F), undo/redo, bracket matching, auto-indent, code folding, multi-cursor; markdown edit/split with a formatting toolbar |
| Terminal | Tabs, split panes, full-view mode (Cmd+Shift+`), raw PTY |
| Git | Branch management, status, commits, diffs, worktrees |
| Plugins | Manifest-based plugin system — install from a local folder or the GitHub registry; scope-limited (no chat/agent/LLM kinds) |
| Setup Wizard | First-run wizard: welcome, workspace, initial project |
| Settings | Modular sections, config (global), auto-save, biometric lock |
| Layer | Technology |
|---|---|
| Frontend | React 19, TypeScript, Tailwind CSS, Vite 8, CodeMirror 6, xterm.js |
| Backend | Rust, Tauri v2 |
| Database | SQLite (bundled via rusqlite) |
| Auth | System keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service) |
| Terminal | portable-pty, xterm.js |
| Git | git2 (libgit2) |
npm install
bash .githooks/install.sh # Set up pre-commit and pre-push hooksnpm run tauri:dev # Development mode with hot reload (alias for `npm run tauri dev`)
npm run build:prod # Production build
npm run build:debug # Debug build
npm run test # Run frontend tests (Vitest)
npm run test:coverage # Tests with coverage report
npm run test:ci # CI/local coverage gate (thresholds: 3-5%)
npm run lint # ESLint
npm run lint:fix # ESLint with auto-fix
npm run format # Prettier format
npm run format:check # Prettier check
npm run quality-gate # Full quality check (tsc + format + lint + test + cargo)Rust tests:
cd src-tauri && cargo test
cd src-tauri && cargo clippy -- -D warnings
cd src-tauri && cargo fmt --check| Script | Purpose |
|---|---|
scripts/build.sh |
Production build wrapper |
scripts/bump-version.sh |
Bump version across package.json, Cargo.toml, tauri.conf.json |
| Gate | What runs |
|---|---|
| Pre-commit | cargo check --all-targets |
| Pre-push | Frontend build (tsc + vite) + cargo test |
| CI | npm run quality-gate — TypeScript, ESLint, Prettier, Vitest, cargo check, cargo clippy, cargo fmt, cargo test |
src/ # Frontend (React + TypeScript)
pages/ # Route pages
FilesPage.tsx # File browser + editor
TerminalPage.tsx # Terminal with tabs and splits (always mounted)
GitPage.tsx # Git operations and diff viewer (Changes/History/Worktrees)
NotificationsPage.tsx # In-app notification center
WizardPage.tsx # First-run setup wizard (welcome, workspace, project)
LandingPage.tsx # Landing / workspace picker
settings/SettingsPage.tsx # App settings (modular sections)
components/ # Reusable UI components (incl. ui/ shadcn primitives)
workspace/ # VS Code-style shell (ActivityRail, SidePanel, EditorArea, TerminalDock, StatusBar)
plugins/ # PluginsPanel — install/list/run plugins
hooks/ # Custom React hooks (useConfig, useKeyboardShortcuts, …)
lib/ # Tauri IPC wrappers and utilities (one file per domain)
plugins.ts # Plugin install/list/run + registry fetch (→ plugins.rs)
version.ts # App version via get_app_version (no network)
utils/ # Helpers (shellQuote — drag-to-terminal path quoting)
contexts/ # React contexts (Workspace, Biometric)
src-tauri/ # Backend (Rust, Tauri v2)
src/
lib.rs # Tauri builder + command registration
main.rs # Entry point
db.rs # SQLite (runtime state / index)
settings.rs # Settings with keychain storage
keychain.rs / keyring_store.rs # System keychain abstraction
workspace.rs # Workspace init and templates
home.rs # ~/.liteduck home: config, profile, memory notes
agent_memory.rs # Markdown note store backing home memory
app_menu.rs # Native application menu
terminal.rs / pty.rs # Terminal and raw PTY handling
files.rs # File listing, read/write, rename/delete
git.rs # Git operations + worktrees (libgit2)
plugins.rs # Plugin manifest loader, install/run, registry fetch
device_identity.rs # Device identity generation
biometric.rs # Biometric authentication
event_sink.rs / file_logger.rs / bash_validator.rs # Event bus, logging, shell validation
icons/ # App icons (macOS, Windows, Linux)
crates/
liteduck-core/ # Shared business logic (DB, settings, identity; UniFFI-ready)
Contributions are welcome! Please read CONTRIBUTING.md for the development workflow, coding conventions, and the quality gates your change must pass.
Licensed under the MIT License — © 2026 Bemind Technology Co., Ltd. (bemindlabs).