- == release 1.0 ==
- Fix bugs in the 1.0 release: https://github.com/blaix/gren-tui/issues?q=is%3Aissue+is%3Aopen+label%3Abug
- Use new task-based Stream, etc. to add guarantees (start with Cmd.batch usage where order is important)
- Decouple view from update (just render like a game loop) to reduce complicated sequencing logic and fix rendering bugs
- Pull ansi into separate package
- Move examples under next/ (not bothering with busted v1)
- Publish gren-array2d
- Add arrow-key-movement example (game)
- Remove Ansi from README example (it's a separate package now)
- Replace vendored node/core packages after 6/24 release
- == Release 2.0 ==
- Add
Escape
variant toInput
- Add Tui.exit that returns a task that undoes formatting and shows the cursor
- Add UI module with elm-ui inspired row/col elements
- Fix unit tests
- Fix?: Compile failures return 0 status, making things hard to test
- unit tests with gren-test
- TODO comments
- Docs
- Remove charGrid and paint example (realized when writing docs this isn't ready)
- Update CHANGELOG
- Overhaul the README for v3
- == Release 3.0 ==
- Animated Demos
- Video series building https://github.com/blaix/tooter
- Use this to drive gren 0.5 upgrade and gren-tui 4.0 release
- add Backspace input
- Create a starter repo using github templates
- Add gren issue for js errors when run in pipeline. See convo: https://discord.com/channels/1250584603085766677/1301468632735551549/1301665363561549886
- try VHS from charm
- post snippets of view model and update in README
- experiment: web renderer for UI
- Easy way for people to try gren-tui / run the examples. devbox? devbox run [example name]? template repo or init script?
- Listen to ratatui episode of developer voices and check out the links. eg https://github.com/junkdog/tachyonfx
- Starter repo or project initializer (add
gren run
instead of publishing separate npm package?) - Publish post or video making a dungeon crawler. Look at the UI of Robin's elm-warrior :)
- Look into performance on the old paint example. Think it's input handling. See [[#performance-notes]]
- defineProgram withOptions or similar for things like exitOnEscape, etc.?
- some kind of Tick option for updating components (select, etc)?
- see
Pages.Script.Spinner
withStep
andrunSteps
functions and similar from elm-pages
- see
- Take another pass at reviewing lipgloss and bubbles
- Table element? https://github.com/charmbracelet/lipgloss?tab=readme-ov-file#rendering-tables
- List or similar element for tracking selected item?
- Consider wiring effects/messages into elements (recreate classic counter example in terminal)
- More Attributes:
- padding
- margin
- centered, centerX, centerY
- alignRight, alignLeft, alignTop, alignBottom
- More borders (see lipgloss and https://en.wikipedia.org/wiki/Box-drawing_characters#Box_Drawing)
- dotted
- dashed
- ascii (
+--+
) - custom borders
- grid/table with cell borders
- borderLeft, Top, etc? (for dungeon walls?)
- More colors. 256 support?
- Built-in UI components (will require update calls, see Bubbles source code for reference):
- Tabs (see lipgloss)
- Prompt
- Choice
- LoadingSpinner
- Animation
- Consider width, minWidth, maxWidth (what about wrapping, overflow?)
- Try gren-tui for prettynice cli again (with load spinner widgets...?)
- Test an app that has a conditional subscription
- How to make log messages visible (Debug.log won't work with gren-tui views)? add file logging?
- How to have a nice way to read a whole line of input, even in raw mode?
- readline support?
- Is this anything? https://nodejs.org/en/learn/asynchronous-work/the-nodejs-event-emitter
- Ongoing: See https://github.com/blaix/gren-tui/issues
- Consider: conditoinally running gren-tui. For example, a script that could run as part of a build pipeline, but with an interactive frontend if running in an interactive terminal. Currently gren-tui just exits with an error if there is no tty (simulate this by triggering a gren-tui app via
child_process
in a node shell).
Profile with: node --inspect
then open chrome://inspect
Compare benchmarks by creating two small programs (or one program with command line flags) to exercise different implementations and compare with:
hyperfine 'node app snippetA' 'node app snippetB'
Things to try:
- buffer inputs, on each tick, compress sequentially-repeating inputs, then process
- don't check cursorReport every input?
- look for other places I'm doing heavy string/array interactions
- https://www.textualize.io/blog/7-things-ive-learned-building-a-modern-tui-framework/
- https://github.com/janjelinek/elm-performance-debugging/tree/master