Carelo is fast, local-first file management with dual panes, previews, remotes, and custom tools.
- Dual-pane file browsing with tabs per pane.
- List, grid, and column (Miller) view modes.
- Real local file metadata in the preview panel, including permissions, owner, group, timestamps, hidden/read-only state, and size.
- Preview panel for images, video, audio, PDFs, and text/code, where the platform/webview can render the file.
- Quick Look: press
Spacefor a large preview overlay with image/video/audio/ PDF/text rendering, syntax highlighting for code, and arrow-key browsing; works for both local and remote files. - Copy, cut, paste, rename, delete, create file, create folder, open, reveal, and open in the other pane.
- Type-ahead find: start typing in a pane to jump to the first item whose name matches in the current folder; repeat the key to cycle matches.
- Unified recursive search for names, paths, and file contents, with location, depth, type, extension, modified-date, size, hidden/ignored-file, symlink, case-sensitive, regex, and content-size facets. Name and content shortcuts open the same search surface with the appropriate preset.
- Permissions editor: a dedicated dialog to change Unix permissions — owner,
group, and other read/write/execute plus the setuid, setgid, and sticky bits —
with octal entry, an
ls -lstyle preview, and optional recursive apply for folders. Works on local files (with sudo elevation when required) and on remote volumes (mount-backed and SFTP). - Undo/redo (
Cmd/Ctrl + Z/Cmd/Ctrl + Shift + Z) for move, copy, rename, and Trash deletes. - Color tags (Finder-style) assignable from the context menu and shown as dots in every view, as tinted pane tabs, and in the breadcrumbs.
- Folder compare and sync between the two panes, with per-item diff, additive copy in either direction, and optional mirror-delete (to Trash).
- Checksum tools: compute a file's SHA-256 or compare two files for an exact match.
- Editable address bar (
Cmd/Ctrl + L) plus clickable breadcrumbs. - Mouse and keyboard selection, including multi-select and range selection.
- Drag-and-drop moves between panes, column targets, and folders.
- Sidebar with folder favorites (stored in SQLite, reorderable by drag and drop), custom favorite groups, and a Recent list of the last visited locations.
- Parallel, storage-aware file operations: copy and move run several files at
once, with concurrency chosen by storage type — parallel for SSDs and remotes,
sequential for spinning disks. Fast local copies use copy-on-write reflinks and
copy_file_rangewhere available, preserve metadata, and continue past per-file errors. Toggle parallel transfers in Settings. - Conflict resolution on copy/move (skip, keep both, replace, replace-if-newer, checksum compare) with apply-to-all.
- Zip/7z/tar archive and unarchive actions with progress, cancellation, and automatic panel refresh.
- Image conversion and PDF tools (compress, merge, extract, split, rotate).
- Current work indicator with running tasks, progress, log view, and cancel actions.
- Embedded xterm terminal panel on Unix platforms; tabs are labeled by the
shell's working directory and follow
cdon Linux. - Remote volume dialog backed by OpenDAL for supported providers such as SFTP, FTP, WebDAV, S3-compatible storage.
- Sudo password retry flow for local file operations that require elevated permissions.
- Multiple color themes with light, dark, and system appearance modes.
- Window size persistence.
- Node.js 20 or newer
- npm
- Rust 1.85 or newer
- Tauri 2 system dependencies for your OS
For Linux, install the packages required by Tauri/WebKitGTK for your distribution before running the desktop app.
Install dependencies:
npm installRun the Tauri desktop app:
npm run tauri devRun only the Vite dev server:
npm run devThe Tauri dev configuration expects Vite on:
http://127.0.0.1:1422
If Node is installed through nvm and is not on the default shell path, prefix commands with your Node bin directory:
PATH=/home/artur/.nvm/versions/node/v22.19.0/bin:$PATH npm install
PATH=/home/artur/.nvm/versions/node/v22.19.0/bin:$PATH npm run tauri devBuild the frontend:
npm run buildCheck the Rust side:
cargo check --manifest-path src-tauri/Cargo.tomlCreate release bundles:
npm run releasePrepare a new release version and tag:
npm run release:prepare -- 0.4.1This updates the app version files, adds a Linux metadata release entry, creates
a chore: release v0.4.1 commit, and creates the annotated v0.4.1 tag.
Use --dry-run to preview the changes first. The release-prep script expects a
clean git worktree.
The release script runs:
tauri build --ciCurrent bundle targets are configured for Linux deb, rpm, and AppImage
packages. The updater uses the AppImage artifact for in-app updates.
Carelo checks for updater metadata at:
https://github.com/aheinze/Carelo/releases/latest/download/latest.json
The updater public key is committed in src-tauri/tauri.conf.json. The private
signing key was generated at:
/home/artur/.tauri/carelo.key
For local signed release builds:
TAURI_SIGNING_PRIVATE_KEY_PATH=/home/artur/.tauri/carelo.key npm run releaseFor GitHub Actions releases, add these repository secrets:
TAURI_SIGNING_PRIVATE_KEY
TAURI_SIGNING_PRIVATE_KEY_PASSWORD (optional)
TAURI_SIGNING_PRIVATE_KEY_PASSWORD can be omitted while the generated key has
no password. Pushing a tag like v0.4.1 runs .github/workflows/release.yml,
creates a draft GitHub Release, uploads the Linux bundles, and publishes
latest.json for the in-app updater.
Carelo stores durable app data in:
~/.local/share/carelo/carelo.store
The SQLite database file and required tables are created automatically when the app starts. Favorites, color tags, remote volume configurations, and app settings are stored there.
UI settings such as pane layout, theme-dependent dimensions, sidebar state, and window dimensions are stored in browser/Tauri local storage.
The frontend is a Vue application organized around panes, tabs, sidebar locations, keyboard shortcuts, dialogs, preview state, file-operation queues, terminal state, and app settings.
The frontend never reads the local filesystem directly. It calls Rust through
Tauri commands exposed from src/composables/useFileOperations.js and related
composables.
The Rust side is split into:
src-tauri/src/commands/for Tauri command handlers.src-tauri/src/fs/for local, sudo, archive, and remote filesystem logic.src-tauri/src/store/for the SQLite app store.src-tauri/src/queue/for long-running operation progress models.src-tauri/src/settings/for app path/settings helpers.
Local file operations use a provider trait so the UI is not coupled to one
backend. Remote volumes use OpenDAL where providers are available. Archive
operations use native Rust libraries, including the zip crate.
.
|-- package.json
|-- vite.config.js
|-- src/
| |-- App.vue
| |-- main.js
| |-- assets/
| |-- components/
| |-- composables/
| |-- directives/
| |-- stores/
| `-- utils/
`-- src-tauri/
|-- Cargo.toml
|-- tauri.conf.json
|-- capabilities/
|-- icons/
`-- src/
|-- commands/
|-- fs/
|-- queue/
|-- settings/
|-- store/
|-- lib.rs
`-- main.rs
Tab: switch active paneCmd/Ctrl + Shift + P: command paletteCmd/Ctrl + P: unified search with the name/path presetCmd/Ctrl + Shift + F: unified search with the content presetCmd/Ctrl + L: edit the address bar / go to a pathSpace: Quick Look (preview overlay);Insert: toggle item selectionBackspaceorCmd/Ctrl + Up: go to parent folderAlt + Left/Alt + Right: navigation historyF2: renameF3: previewF4: openF5: copy to other paneF6: move to other paneF7: create folderF8orDelete: deleteCmd/Ctrl + Z/Cmd/Ctrl + Shift + Z: undo / redoCmd/Ctrl + A: select allCmd/Ctrl + F1: grid viewCmd/Ctrl + F2: list viewCmd/Ctrl + .: toggle hidden files- Start typing in a pane to jump to a file by name (type-ahead find)
Use F1 in the app to open the shortcut reference.
Before shipping a change, run:
npm run build
cargo check --manifest-path src-tauri/Cargo.tomlExpected behavior:
npm run tauri devopens the Carelo desktop window.- Both panes list real local directory contents.
- List, grid, and column views switch correctly.
- Drag/drop moves update source and target panes, including column targets.
- Favorites persist after restart.
- Archive/unarchive work appears in the current work indicator.
- The red close button exits the app and preserves the last window dimensions.