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
Metadata
Release files for cascade-fm 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cascade_fm-0.2.0.tar.gz | 81.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cascade_fm-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 166.6 kB
Release files / cascade_fm-0.2.0.tar.gz
| Download URL | cascade_fm-0.2.0.tar.gz |
|---|---|
| Size | 81.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
66a275f1cffc9f8039d95370c1933d7cd0ee2f539e9b75846d416d3a5e77d8ef
|
|
BLAKE2b-256 checksum How to use checksums |
c9b89213832f41ae4b772a480c52681aee1d3a784a373790a17e8dfc5fdb2630
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / cascade_fm-0.2.0-py3-none-any.whl
| Download URL | cascade_fm-0.2.0-py3-none-any.whl |
|---|---|
| Size | 84.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
483d4356901effd590906a96b227cf81341c0e1e64091831857f14ccb6b829bf
|
|
BLAKE2b-256 checksum How to use checksums |
70ee6f924042e1e606db798e2fc59e2221cada74a383a2e70d1e809a08a97d6e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|