A visual, pipeline-driven file manager that turns file operations into composable, repeatable workflows.
Project description
cascade
cascade is a visual, pipeline-driven desktop file manager.
You select files, add operations in panes from left to right, and only the final pane writes to disk.
Think of it as Unix pipes with a face.
Current State
- UI: PySide6 (Qt) desktop application.
- Status: Alpha — approaching first release (Milestone 2).
- Full standard file-management workflow works end-to-end.
Project details and roadmap live in spec/design.md and spec/roadmap.md.
Quick Start
Linux — AppImage (recommended)
Download cascade-x86_64.AppImage from the releases page, then:
chmod +x cascade-x86_64.AppImage
./cascade-x86_64.AppImage
No Python or installation required. Works on any distro with glibc 2.17+.
Python / uv
pip install cascade-fm # or: uv tool install cascade-fm
cascade
From source
git clone <repository-url>
cd cascade
uv sync
uv run cascade
For troubleshooting and platform notes, see docs/installation.md.
How cascade works
Pipeline model:
[ Browse Files ] -> [ Filter ] -> [ Transform ] -> [ Save To ]
- Pane 1 is the filesystem browser.
- Each next pane applies one operation to the previous pane output.
- Executing a pane marks panes to the right as stale.
- Final output is written only by the final write operation.
Built-in Operations
| Operation | Description |
|---|---|
filter_extension / filter_name |
Browser-side filtering by extension or name glob |
rename |
Plain rename, search & replace, or regex replace with capture groups |
save_to |
Copy files to a target directory (with conflict policy) |
move_to |
Move files to a target directory (with conflict policy) |
image_transform |
Resize, convert format, rotate, compress, strip EXIF |
create_archive |
Create zip / tar / tar.gz / tar.bz2 / tar.xz archives |
unarchive |
Extract archives (with optional single-root flatten) |
delete_files |
Permanently delete files with in-UI confirmation |
Features
- Pipeline model — chain operations left to right; only the final pane writes to disk
- Session restore — reopen the last pipeline on launch (configurable: ask / auto / off)
- Workflow save/load — save named pipelines as JSON, reload them later
- Preferences — start directory, default sort order, hidden-file toggle, bookmarks, language
- Internationalisation — ships English and German; add custom languages via
~/.cascade/translations/ - Caching — intermediate results stored in a content-addressable cache for fast re-execution
Known Limitations
- Workflow/session JSON schema is version
1; use the same app version that wrote the file. - Very large directories (100k+ files) and heavy image transforms may slow the UI.
- Advanced graph editing, branch pipelines, plugins, and remote filesystems are not yet implemented.
- Language change requires an application restart to take effect.
Development
Setup
uv sync
Test / Lint / Typecheck
# tests
uv run pytest -q
# lint
uv run ruff check src tests
# typecheck
uv run pyright
Optional: task runner (just)
just test
just lint
just format
just typecheck
just build
Build / Publish
uv run python -m build
Upload (maintainers):
uv run twine upload dist/*
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cascade_fm-0.2.0.tar.gz.
File metadata
- Download URL: cascade_fm-0.2.0.tar.gz
- Upload date:
- Size: 81.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66a275f1cffc9f8039d95370c1933d7cd0ee2f539e9b75846d416d3a5e77d8ef
|
|
| MD5 |
3e0d9d1c5c600c3e9ad0e4d424cab7c4
|
|
| BLAKE2b-256 |
c9b89213832f41ae4b772a480c52681aee1d3a784a373790a17e8dfc5fdb2630
|
File details
Details for the file cascade_fm-0.2.0-py3-none-any.whl.
File metadata
- Download URL: cascade_fm-0.2.0-py3-none-any.whl
- Upload date:
- Size: 84.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
483d4356901effd590906a96b227cf81341c0e1e64091831857f14ccb6b829bf
|
|
| MD5 |
7627486a159dc8ed566bbe99e59c33c8
|
|
| BLAKE2b-256 |
70ee6f924042e1e606db798e2fc59e2221cada74a383a2e70d1e809a08a97d6e
|