Termdash is a cross-platform customizable terminal based dashboard.
The feature set is inspired by the gizak/termui project, which in turn was inspired by yaronn/blessed-contrib.
This rewrite focuses on code readability, maintainability and testability, see the design goals. It aims to achieve the following requirements. See the high-level design for more details.
The public API surface is documented in the wiki.
Private packages can be identified by the presence of the /private/ directory in their import path. Stability of the private packages isn't guaranteed and changes won't be backward compatible.
There might still be breaking changes to the public API, at least until the project reaches version 1.0.0. Any breaking changes will be published in the changelog.
- Full support for terminal window resizing throughout the infrastructure.
- Customizable layout, widget placement, borders, margins, padding, colors, etc.
- Dynamic layout changes at runtime.
- Binary tree and Grid forms of setting up the layout.
- Focusable containers and widgets.
- Processing of keyboard and mouse events.
- Periodic and event driven screen redraw.
- A library of widgets, see below.
- UTF-8 for all text elements.
- Drawing primitives (Go functions) for widget development with character and sub-character resolution.
To install this library, run the following:
go get -u github.com/mum4k/termdash
cd github.com/mum4k/termdashThe usage of most of these elements is demonstrated in termdashdemo.go. To execute the demo:
go run termdashdemo/termdashdemo.goPlease refer to the Termdash wiki for all documentation and resources.
Allows users to interact with the application, each button press runs a callback function. Run the buttondemo.
go run widgets/button/buttondemo/buttondemo.goAllows users to interact with the application by entering, editing and submitting text data. Run the textinputdemo.
go run widgets/textinput/textinputdemo/textinputdemo.goCan be used to create text input forms that support keyboard navigation:
go run widgets/textinput/formdemo/formdemo.goDisplays the progress of an operation. Run the gaugedemo.
go run widgets/gauge/gaugedemo/gaugedemo.goVisualizes series of values as pie slices in the pie chart. Run the pie demo.
go run widgets/pie/piedemo/piedemo.goVisualizes progress of an operation as a partial or a complete donut. Run the donutdemo.
go run widgets/donut/donutdemo/donutdemo.goDisplays text content, supports trimming and scrolling of content. Run the textdemo.
go run widgets/text/textdemo/textdemo.goDraws a graph showing a series of values as vertical bars. The bars can have sub-cell height. Run the sparklinedemo.
go run widgets/sparkline/sparklinedemo/sparklinedemo.goDisplays multiple bars showing relative ratios of values. Run the barchartdemo.
go run widgets/barchart/barchartdemo/barchartdemo.goDisplays series of values on a line chart, supports zoom triggered by mouse events. Run the linechartdemo.
go run widgets/linechart/linechartdemo/linechartdemo.goDisplays text by simulating a 16-segment display. Run the segmentdisplaydemo.
go run widgets/segmentdisplay/segmentdisplaydemo/segmentdisplaydemo.goDisplays a tree view which provides a hierarchical and collapsible view for displaying and interacting with nested data structures. treeviewdemo.
go run widgets/treeview/treeviewdemo/treeviewdemo.goAllows users to toggle a single boolean value. Run the checkboxdemo.
go run widgets/checkbox/checkboxdemo/checkboxdemo.goAllows users to select one value from a fixed list of items. Run the dropdowndemo.
go run widgets/dropdown/dropdowndemo/dropdowndemo.goAllows users to select one item from a group of radio options. Run the radiodemo.
go run widgets/radio/radiodemo/radiodemo.goAllows users to choose a numeric value from a bounded range. Run the sliderdemo.
go run widgets/slider/sliderdemo/sliderdemo.goDisplays tabbed interfaces with keyboard and mouse navigation, notifications and dynamically updated content. Run the tabdemo.
go run widgets/tab/tabdemo/tabdemo.goDisplays modal overlays that can host and move draggable child widgets. Run the modaldemo.
go run widgets/modal/modaldemo/modaldemo.goDisplays a scrollable event log with severity markers and time range filtering. Run the timelinedemo.
go run widgets/timeline/timelinedemo/timelinedemo.goDisplays heat maps with labeled axes and configurable cell colors. Run the heatmapdemo.
go run widgets/heatmap/heatmapdemo/heatmapdemo.goDisplays audio-style spectrum analyzer data with configurable bars, colors and threshold controls. Run the spectrumdemo.
go run widgets/spectrum/spectrumdemo/spectrumdemo.goDisplays an animated radar sweep with contacts and range rings. Run the radardemo.
go run widgets/radar/radardemo/radardemo.goDisplays rotating 3D models, symbols and image-derived glyphs in the terminal. Run the threeddemo.
go run widgets/threed/threeddemo/threeddemo.goWraps widgets with animated effects such as fade, sweep, scramble and framed canvas rendering. Run the fxdemo.
go run widgets/fx/fxdemo/fxdemo.goProvides animated border and title effects for containers. Run the borderfxdemo.
go run widgets/borderfx/borderfxdemo/borderfxdemo.goDisplays configurable toast notifications in normal containers and modal windows, with placement, animation, progress and action callbacks. Run the toastdemo.
go run widgets/toast/toastdemo/toastdemo.goDisplays a drop-down modal HUD overlay with live OS values, compact in/out sparklines, a disk pie, a 3D spectrum analyzer, a telemetry treeview, double-Escape toggling, animated borderfx framing, embedded toast notifications and action controls. Run the huddemo.
go run widgets/hud/huddemo/huddemo.goDisplays a paginated emoji grid for keyboard and mouse selection. It is demonstrated in the tabdemo.
go run widgets/tab/tabdemo/tabdemo.goIf you are willing to contribute, improve the infrastructure or develop a widget, first of all Thank You! Your help is appreciated.
Please see the CONTRIBUTING.md file for guidelines related to the Google's CLA, and code review requirements.
As stated above the primary goal of this project is to develop readable, well designed code, the functionality and efficiency come second. This is achieved through detailed code reviews, design discussions and following of the design guidelines. Please familiarize yourself with these before contributing.
If you're developing a new widget, please see the widget development section.
Termdash uses this branching model. When you fork the repository, base your changes off the devel branch and the pull request should merge it back to the devel branch. Commits to the master branch are limited to releases, major bug fixes and documentation updates.
- datadash: Visualize streaming or tabular data inside the terminal.
- grafterm: Metrics dashboards visualization on the terminal.
- perfstat: Analyze and show tips about possible bottlenecks in Linux systems.
- gex: Cosmos SDK explorer in-terminal.
- ali: ALI HTTP load testing tool with realtime analysis.
- suimon: SUI blockchain explorer and monitor.
This is not an official Google product.