The outline shows the tree as an indented list: a row per node with its fold marker, tree lines in the parent's color, tags, a ¶ for a body and +N for what a fold hides. zb shows every body under its title, to read a document like a page. j/k go row by row, h/l to the parent and the first child, a click on a marker folds, and titles are edited in their row, rapid entry included. In move mode, j/k swap the node with its siblings, h takes it out a level and l puts it under the one above. The Note view shows one node at full size, as parts: the title, the tags, the body, each link and each child. j/k step through them, Enter or i edits the part (or goes to that link or child), and h/l turn the page to the sibling before or after. Bodies and tags are edited with the same editor as titles: Enter starts a line in a body, Tab types spaces, and tags that don't parse come back as they were. cc, C and s now start typing on an empty line too, as in vim. Panes split the screen the way vim's windows do (Ctrl-w v s h j k l w c o =, :split, :vsplit, :only), each in a box with its view and document, and any pane can show any open document (gt, gT, :b, the documents picker, a click on the document bar). The status bar has two lines: the mode, the view, the breadcrumb or a message, the keys typed; then key hints for what you're doing, which <Space>w hides with which-key. Popups are a mode of their own, built on one list: ? lists every key and command, / searches it and Enter runs what you pick; the right-click menu lists what you can do with a node (with the keys that do the same) or adds a new idea on the empty canvas; the pickers set a node's color, border, style or tags. K opens the body in a card beside the node, where i edits it in place. The example now opens two documents (the garden, and the kitchen its portal leads to) and its tests drive all of the above end to end. Co-Authored-By: Claude Opus 5.5 <[email protected]>
3.0 KiB
cumulus
Brainstorm in the terminal: ideas as nodes on a 2D canvas, connected, folded and color-coded, across as many documents as you like. Vim keys first; the mouse works too. Runs on Windows and Linux.
Status: being built, one stage at a time. See DESIGN.md for the plan; this README grows with the app.
Build and run
You need Rust (rustup.rs). The exact version is pinned in
rust-toolchain.toml, and rustup installs it by itself the first time.
cargo build --release
The program is target/release/cumulus (cumulus.exe on Windows): copy it to
a folder on your PATH.
- Windows: nothing else to install. The
.execarries its own C runtime and runs on any Windows 10 or 11. - Linux (Void, Fedora…): build the same way. You can also build a static
Linux binary from Windows with
cargo linux: it lands intarget/x86_64-unknown-linux-musl/release/cumulusand runs on any distribution.
Keys
The plan for the everyday keys (all of them are in DESIGN.md):
| Keys | What they do |
|---|---|
hjkl |
move to the nearest node that way |
gh gj gk gl |
parent, next sibling, previous sibling, first child |
o O a |
new sibling below / above, new child: type its title, Enter for the next one |
i or Enter |
edit the title (Esc: vim keys inside it, Esc again: done) |
dd x |
delete the branch / just the node |
>> << |
under the node above / out a level |
u Ctrl-r |
undo / redo |
za zf zi |
fold, auto-fold, focus |
+ - |
zoom in / out |
K |
the body in a card beside the node (i edits it there) |
C M v |
connect, move, select |
<Space> |
the action menu: c color, t tags, vo outline, vn note… |
Ctrl-w v Ctrl-w s |
split the pane side by side / stacked (Ctrl-w hjkl to move between them) |
gt gT |
the next / previous document |
: ? |
command line, help (search it with /, Enter runs the key or command) |
After the first key of a sequence (g, z, d, <Space>…), a popup lists
what can follow. The right mouse button opens a menu of what you can do with
a node.
Development
cargo test # run the tests
cargo lint # clippy, treating warnings as errors
cargo fmt # format the code
While the app is being built, the examples try out each part:
cargo run --example canvas # everything so far: the views, splits, popups, editing
cargo test show_canvas -- --ignored --nocapture # print it at each zoom, as text
cargo test --example canvas # type key sequences into it, and check what they do