NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1207 most downloaded on crates.io
A dashboard for visualizing progress of asynchronous and possibly blocking tasks
Last release 8 months ago
08 Jan 2026
Release timing varies
gaps range from 2 weeks to 7 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
102 releases · first in 2020
One column per quarter.
Improved looks thanks to bold fonts
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Add new methods inc_by(step) and inc() for convenience
inc_by(step) and inc() for convenience<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
45a8a00)f694bb9)3a36ce6)c17235c)c8e52c2)85c1f6d)6fc5846)
</details>cleanup and code simplification in the line renderer.
cleanup and code simplification in the line renderer.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
now send a signal to perform a render before shutting down to capture the final state
JoinHandle will
disconnect() or forget().<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Prevent cursor movement if no progress bar is drawn.
Prevent cursor movement if no progress bar is drawn.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Add new render-line, change feature flag names.
<csr-id-a684188b3eee0cc67fe48b9ae14aa9cd63603caf/> <csr-id-1bc5c764c9b1190f168d076b2183a27569750421/>
Add new render-line, change feature flag names.
render-line + one of render-line-crossterm or render-line-termion feature flags.render-line + one of render-line-crossterm or render-line-termion feature flags.tui module
render_with_input now takes the Write stream as argument, instead of defaulting to std::io::stdout()<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
48879f3)021dc5a)5cb7fea)03a859c)bfd1a98)7ec5530)4d68060)9f4fa49)f980a83)f1280a9)298afe6)ab93db2)a4aa7e8)380330d)89fb23c)8ebde51)54e1ea7)91ea381)03a8a9e)a7bff83)3a1b6c5)fb91dde)ff98952)dcb24ea)8b7dbaa)7a4aecf)3484fed)a37cb2a)e38e559)5be4885)af710d4)04c686b)0134e0d)4da38f2)2744e64)dd02770)fa51fad)93397c7)c31d1c5)8e2bf7c)6d04514)78f56c0)272a852)60f1bb8)20f3144)eda7fb3)1e1a02a)79efb09)982dfee)3bb08f7)d78472c)4bf4431)917dd05)2bb088d)90750c7)c6e1ece)ccc4297)ed338e0)1bd4476)c15af5e)f20f002)d050243)4566e46)ea861a2)9ebbc16)a684188)b4db64e)1712221)5aa3034)511389e)0b8a763)a942e85)c96abdb)c879dfa)8781c9f)521dd23)1bc5c76)5a03628)11d6665)7fdbb72)748ab4b)
</details>Due to this work, the default features changed, which is a breaking change for those who relied on it. Now when using the render-tui, one will also ha…
<csr-id-bbf2651e379b5758d53a889d9fb220c616d2a096/>
Factor terminal input into the new crosstermion crate.
Due to this work, the default features changed, which is a breaking change for those who relied on it.
Now when using the render-tui, one will also have to specify either the with-crossbeam or render-tui-termion feature.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4841a8e)403d5a0)71e1eca)93a069a)93a30e0)3d11e90)1a61453)78e810d)e93fe6e)d7deeb7)050a821)3848635)3429327)0cce091)crosstermion (97ad454)b66c413)f1c734f)dcc92ab)e7c07be)2d60cc0)21f4147)42b8374)bbf2651)25c8a98)
</details>Support for windows by using Crossbeam by default. A first low-effort move to the latest version should be to set the dependency to default-features =
Support for windows by using Crossbeam by default.
A first low-effort move to the latest version should be to set the dependency to
default-features = false, features = ["render-tui", "render-tui-termion", "localtime", "log-renderer"]
to get the same configuration as before.
To try crossbeam, use with-crossbeam instead of render-tui-termion.
If you have been using the event stream to send your own keys, swap termion::event::Key with prodash::tui::input::Key.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
656cb6a)9b8be9e)aa5827d)7fc5961)52f2592)72fe1bb)ababea5)8547c8b)9e74ada)eaf904b)659065d)bafb189)6650a36)27ccdc1)1f36d96)3a1dc75)
</details>Allow the TUI to automatically stop if there is no progress to display.
Allow the TUI to automatically stop if there is no progress to display.
This way, it's easier to use prodash::tui for visualizing finite tasks, which originally it wasn't intended for.
Previously, in order to achieve the same, one would have to initialize the TUI with an event stream and send the Event for shutting down once the task at hand is complete.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Fix delayed reset of the terminal.
Fix delayed reset of the terminal.
Previously even after the future was dropped, it seemed like the terminal wasn't reset and the user was required
to explicitly flush stdout to make the changes appear. This is due to the flushing previously happening too early,
that is, before the terminal was dropped which emits the respective terminal escape codes at this time.
Now the terminal instance is dropped explicitly right before emitting a flush. One might argue that the flush should happen in the terminal instance itself, but fixing that is out of scope.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
f8b06a6)
</details>Simplify message() trait bounds
message() trait bounds<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Remove piper in favor of futures-channel (which was included anyway)
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Upgrade to latest TUI and TUI-react crates
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7b796d1)
</details>Reduce theoretical direct dependencies by not using 'futures' crate directly
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Switch from futures executor to smol.
Switch from futures executor to smol.
This actually simplifies some parts of the implementation, while fixing issues along futures not being dropped while they were on a thread pool. Now, for the example, no threadpool is used anymore.
Note that this also means that in order for each frame to be drawn, one would have to invoke smol::run in one thread to
activate the reactor which processes the timeout/ticker. Alternatively, one would send Tick events through a channel to trigger
a redraw manually.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ecb7dc8)
</details>Fix out-of-bounds access (and panic) due to new and more precise progress bars
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
More horizontally precise progress bars; progress bars are now have lines between them vertically
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Properly respond to state changes even when 'redraw_only_on_state_change' is enabled
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
93fce71)
</details>A TUI option to only redraw if the progress actually changed. Useful if the change rate is lower than the frames per second.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Don't copy messages if the message pane is hidden, saving time
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
353763b)
</details>Cleaner visuals for hierarchical progress items, these won't show lines if there are no direct children with progress
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Enable localtime support by default
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Even nicer tree rendering, along with screen space savings
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
bbdc625)4d69c34)3430a8d)a3e5fe5)31bb906)7f16472)497fbce)edf2024)42b31da)83a89ee)3c77eab)8236d55)14876ee)8f6061f)4083c4e)e9d268f)15a2b02)4e033b4)40690b6)4652654)46d015c)0838165)678fbaa)adc49c6)
</details>Much nicer task tree visualization
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
cf9ddb8)706d658)536b4c8)840bb3a)833bb98)f5b1ee1)
</details>Application can control if the GUI will respond to interrupt requests
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Bugfix (really): Finally delayed column resizing works correctly.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
5029823)
</details>Tree::halted(…) indicates interruptable tasks without progress. Tree::blocked(…) means non-interruptable without progress.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b5ef271)
</details>Bugfix: Allow column-width computation to recover from becoming 0
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
856b7ee)
</details>Bugfix: Don't allow values of 0 for when to recompute task column widths
<csr-id-82baf266045d44ba31aad4e570c687d7c51d0df7/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
82baf26)
</details>New TUI option to delay computation of column width for stability with rapidly changing tasks
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Optional cargo feature "localtime" shows all times in the local timezone
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
fix integer underflow with graphemes that report width of 0
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
BREAKING: progress.blocked(eta) now takes a statically known reason for the blocked state progress.blocked(reason, eta). This is useful to provide mor
progress.blocked(eta) now takes a statically known reason for the blocked state progress.blocked(reason, eta). This is
useful to provide more context.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
74abaeb)
</details>Support for eta messages in blocked unbounded tasks
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d42c0d5)
</details>improve API symmetry by providing a Tree::name() to accompany Tree::set_name(…)
Tree::name() to accompany Tree::set_name(…)<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Flush stdout when the TUI stopped running. That way, the alternate/original screen will be shown right away.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8734668)
</details>Don't pretend to use &str if in fact an owned string is required. This caused unnecessary clones for those who pass owned strings.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
hide cursor or a nicer visual experience
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
5 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
fix toggles - previously prodash, withoug tui, would always build humantime and unicode width
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →