Terminal based dashboard.

Overview

Doc Status Build Status Sourcegraph Coverage Status Go Report Card License Mentioned in Awesome Go

termdashlogo

Termdash is a cross-platform customizable terminal based dashboard.

termdashdemo

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.

Public API and status

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.

Current feature set

  • 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.

Installation

To install this library, run the following:

go get -u github.com/mum4k/termdash
cd github.com/mum4k/termdash

Usage

The usage of most of these elements is demonstrated in termdashdemo.go. To execute the demo:

go run termdashdemo/termdashdemo.go

Documentation

Please refer to the Termdash wiki for all documentation and resources.

Implemented Widgets

The Button

Allows users to interact with the application, each button press runs a callback function. Run the buttondemo.

go run widgets/button/buttondemo/buttondemo.go

buttondemo

The TextInput

Allows users to interact with the application by entering, editing and submitting text data. Run the textinputdemo.

go run widgets/textinput/textinputdemo/textinputdemo.go

textinputdemo

Can be used to create text input forms that support keyboard navigation:

go run widgets/textinput/formdemo/formdemo.go

formdemo

The Gauge

Displays the progress of an operation. Run the gaugedemo.

go run widgets/gauge/gaugedemo/gaugedemo.go

gaugedemo

The Donut

Visualizes progress of an operation as a partial or a complete donut. Run the donutdemo.

go run widgets/donut/donutdemo/donutdemo.go

donutdemo

The Text

Displays text content, supports trimming and scrolling of content. Run the textdemo.

go run widgets/text/textdemo/textdemo.go

textdemo

The SparkLine

Draws 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.go

sparklinedemo

The BarChart

Displays multiple bars showing relative ratios of values. Run the barchartdemo.

go run widgets/barchart/barchartdemo/barchartdemo.go

barchartdemo

The LineChart

Displays series of values on a line chart, supports zoom triggered by mouse events. Run the linechartdemo.

go run widgets/linechart/linechartdemo/linechartdemo.go

linechartdemo

The SegmentDisplay

Displays text by simulating a 16-segment display. Run the segmentdisplaydemo.

go run widgets/segmentdisplay/segmentdisplaydemo/segmentdisplaydemo.go

segmentdisplaydemo

Contributing

If 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.

Similar projects in Go

Projects using Termdash

  • 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.

Disclaimer

This is not an official Google product.

Issues
  • Y-axis label formatter for LineChart

    Y-axis label formatter for LineChart

    This PR fixes #187

    Adds the ability to set custom labels on the Y-axis using a value formatter that accepts a numeric value (float64) and returns the corresponding label to this value (string).

    The PR is in WIP state. I'll update the PR accordingly.

    Steps:

    • [x] Set the Linechart Y-axis option with the ValueFormatter.
    • [x] Use the formatter on the Value if is present.
    • [x] Create formatter for most common time units.
    • [x] Create formatter to round values (#95).

    This approach seems to work fine, I put an image of the project that I'm developing (a Grafana for terminal that I'll make it public soon) using this feature.

    cla: yes 
    opened by slok 27
  • termdash makes debugging panics difficult

    termdash makes debugging panics difficult

    By default, when a termdash program panics, the panic is not printed to the output.

    Is there some way to intercept the panic to print it to a log file?

    question 
    opened by dyc3 19
  • Update tcell to the latest 2.x version

    Update tcell to the latest 2.x version

    Changelog: https://github.com/gdamore/tcell/blob/master/CHANGESv2.adoc

    And while we are at it, we can also consider making tcell the default in all code examples.

    enhancement 
    opened by mum4k 19
  • Does not render on Windows Terminal (preview)

    Does not render on Windows Terminal (preview)

    Currently using https://github.com/microsoft/terminal from the window's app store (which is still in preview since it has not officially released yet) on my Windows machine.

    I'm trying to make a cross-platform terminal application but it doesn't seem to work at all through Windows Terminal, regardless of the underlying shell I use (e.g. neither cmd nor powershell work when launched through Windows Terminal).

    I am aware that termbox-go does not work through mintty or cygwin, but I can confirm that termbox-go and termui do work through the new Windows Terminal application.

    Here is an example of a termui application running in windows terminal: image

    However when I try to build the TextInputDemo as an executable and run this through Windows Terminal, it does not show up at all.

    image

    It simply shows a flashing cursor at the top left.

    bug 
    opened by kvnxiao 14
  • Font modifier cell options (bold, italic, underline)

    Font modifier cell options (bold, italic, underline)

    It's currently not possible to set text as bold, italic, underline, or strikethrough.

    | Modifier | ANSI | |-|-| | Bold | \e[1m | | Italics | \e[3m | | Underline | \e[4m | | Strikethrough | \e[9m |

    enhancement 
    opened by dyc3 14
  • What are the keyboard shortcuts for changing widget focus?

    What are the keyboard shortcuts for changing widget focus?

    Good day. This wiki article says:

    "Focus can be changed using mouse or keyboard shortcuts." https://github.com/mum4k/termdash/blob/master/doc/hld.md

    I'm working with a terminal without mouse support. What are the shortcuts for changing focus? Thanks.

    enhancement 
    opened by HouzuoGuo 14
  • Allow the user to request an unscaled X axis on the LineChart

    Allow the user to request an unscaled X axis on the LineChart

    Hello,

    [Category: Question]

    As I mentioned before - fantastic work so far! One thing I found might be missing would be a way to get the width of the lineChart for when you implement scrolling behavior.

    I see some functions under Container which might be helpful, is there a way to return the effective width of the linechart itself (the piece where braille gets drawn to the screen [the canvas])? Right now I use a hacky method where the ui.TerminalDimensions() function is called from the termUI library to take the 85 percent of the total terminal width (because the linechart container takes up 85 percent plus another 15 percent for the text box). I'd like to remove the termUI dependency entirely and somehow find the width of the canvas.

    termWidth, termHeight := ui.TerminalDimensions()
    termWidth = int((float64(termWidth)*float64(0.85)))
    

    Thanks! Keith

    enhancement 
    opened by keithknott26 13
  • add font modifier cell options: bold, italic, underline.

    add font modifier cell options: bold, italic, underline.

    This PR adds cell options for the font modifiers bold, italic, and underline.

    tcell was upgraded 1.4.0.

    Strikethrough cell option was added as a no-op until tcell is updated to v2.0.0. I figured it wasn't a good idea to upgrade tcell by a whole major version without testing.

    Closes #251

    cla: yes 
    opened by dyc3 12
  • Add Tcell implementation for terminal backend

    Add Tcell implementation for terminal backend

    Adds the option to use https://github.com/gdamore/tcell as the terminal screen. This PR also addresses #223, being that tcell enables proper rendering on Windows devices (including Windows Terminal).

    Fixes #100. Fixes #223.

    cla: yes 
    opened by kvnxiao 12
  • panic: line style LineStyleLight line part linePartHAndUp is a rune ┴ with width 2, all parts must be half-width runes (width of one)

    panic: line style LineStyleLight line part linePartHAndUp is a rune ┴ with width 2, all parts must be half-width runes (width of one)

    Hi, I run the code from https://github.com/mum4k/termdash/blob/master/widgets/gauge/gaugedemo/gaugedemo.go in my Mac, but it panic:

    panic: line style LineStyleLight line part linePartHAndUp is a rune ┴ with width 2, all parts must be half-width runes (width of one)
    
    goroutine 1 [running]:
    github.com/mum4k/termdash/draw.init.0()
    	/Users/pathbox/gowork/src/github.com/mum4k/termdash/draw/line_style.go:76 +0x294
    exit status 2
    

    I don't know the reason

    It can't run in macOS(10.14.3) ?

    I try another demo, the same question is happened,too.

    I find the source code is:

    func init() {
    	for ls, parts := range lineStyleChars {
    		for part, r := range parts {
    			if got := runewidth.RuneWidth(r); got > 1 {
    				panic(fmt.Errorf("line style %v line part %v is a rune %c with width %v, all parts must be half-width runes (width of one)", ls, part, r, got))
    			}
    		}
    	}
    }
    

    It seems that it is about rune width of the hAndUp '┴', I don't know how to solve it

    bug 
    opened by pathbox 11
  • Bump github.com/gdamore/tcell/v2 from 2.2.0 to 2.4.0

    Bump github.com/gdamore/tcell/v2 from 2.2.0 to 2.4.0

    Bumps github.com/gdamore/tcell/v2 from 2.2.0 to 2.4.0.

    Release notes

    Sourced from github.com/gdamore/tcell/v2's releases.

    Version 2.3.1 Bug fix release

    This release fixes a resize regression introduced in v2.3.0. Resizing the window would cause a panic in v2.3.0.

    Version 2.3.0 Features & Fixes

    Version 2.3.0 brings in three new features, and also addresses a few bugs.

    New features:

    • A new Tty interface is available to allow for custom Tty backends (for example to implement an SSH web-based alternative) (fixes #148)
    • Screen.HasPendingEvent() is provided to permit collecting multiple events between screen refreshes (fixes #422)
    • FromImageColor() is available to convert an image.Color into a tcell.Color (fixes #450)

    Bug fixes:

    • Notably the tty handling for /dev/tty on UNIX had bugs on suspend or close, affecting Linux in particular (fixes #452, #449)
    • Fini was not safe to call if the Screen was suspended (fixes #460, #440)
    Commits
    • 5d53415 Fix links to tslocum's packages. Add link to tutorial from readme.
    • 0de353b Convert documentation to Markdown.
    • b60a903 Add Screen.ChannelEvents v2 (#465)
    • 7946eb8 Wait for output to drain.
    • 6582146 Close the tty device when finishing.
    • 15d485c Add a stdin version of Tty, and handle unset terminal sizes sanely.
    • da8f206 Reset colors to default on suspend.
    • b7e369f Add aretext to the list of examples in the README
    • 0fb69ae Add support for the foot terminal
    • 4f213fd Make sun-color 256 color by default, and just drop the sun-256color.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    cla: yes dependencies 
    opened by dependabot[bot] 0
  • Bump github.com/mattn/go-runewidth from 0.0.12 to 0.0.13

    Bump github.com/mattn/go-runewidth from 0.0.12 to 0.0.13

    Bumps github.com/mattn/go-runewidth from 0.0.12 to 0.0.13.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    cla: yes dependencies 
    opened by dependabot[bot] 1
  • Tracking container focus

    Tracking container focus

    When you click into a container with the mouse and it gets focus, can other containers poll some event table to track that ?

    Im trying to figure out how a container can do some work based on which other container gets focus

    Thanks

    enhancement 
    opened by markgardner10 3
  • Circular / Ring Buffer for Text Widget

    Circular / Ring Buffer for Text Widget

    I've started using this for a quick internal project, with one of features being log files monitored and displayed in real-time while other stats are displayed.

    While this is working, one issue we've of course hit is when verbose logs are monitored that the size of the text buffer keeps increasing and of course leads to high memory usage and performance degradation.

    A possible fix to this is to implement a simple ring buffer, where the Text content has an (optional) maximum it can grow to. During the Write call it could then pop content off the top of the buffer as required so that it never grows further than the maximum content.

    I've added this as a basic proof of concept internally, but wanted to confirm if this would be the best approach (or if I'm missing something obvious!) before submitting any pull request.

    enhancement 
    opened by timbutler 3
  • Allow SplitFixed to set the size of the second container

    Allow SplitFixed to set the size of the second container

    Issue

    As per the documentation,

    // SplitFixed sets the size of the first container to be a fixed value
    // and makes the second container take up the remaining space.
    // When using SplitVertical, the provided size is applied to the new left
    // container, the new right container gets the reminder of the size.
    // When using SplitHorizontal, the provided size is applied to the new top
    // container, the new bottom container gets the reminder of the size.
    

    This allows for simple adaptive design if one wants to fix widgets on the left side or on top of the screen. Fixing a widget on the bottom is comparatively complex, (or entirely simple, but not documented).

    It would be a helpful change to allow fixing the second container in splits.

    Proposed API change:

    container.SplitFixed is to allow numbers from 1-cells to -1 as its argument. Providing it with a number like this fixes the second container to the absolute value of the argument. Values of 0 and cells are preserved as is to maintain backwards compatibility.

    enhancement 
    opened by pavel-lexyr 5
  • Implementing the HeatMap widget

    Implementing the HeatMap widget

    • [x] Define the API
    • [x] Implement basic features
    • [x] Implement playHeatMap for demo
    • [ ] Write tests [WIP]
    • [ ] Polish code and comments

    Close #265

    cla: yes 
    opened by fgksgf 6
  • Support styling across termdash

    Support styling across termdash

    Currently termdash mostly supports running on black background. Individual widgets can choose colors of elements on their canvas, but there isn't a good way to change the color of the entire application.

    Additionally we could consider adding some effects similar to those used by the Linux dialog application.

    apt-get install dialog
    cd /usr/share/doc/dialog/examples
    ./form1
    

    This is one example for inspiration: Screenshot 2020-11-28 at 12 19 41

    enhancement help wanted 
    opened by mum4k 0
  • Widget: heat map

    Widget: heat map

    Hello, I implemented a heat map widget with termdash in SkyWalking-CLI, like this: heatmap

    I want to contribute it back recently, but I need some time to polish code to make it more general. I think the format of input data should be [['xlabel', 'ylabel', value],...], how about you ?

    If you have any advice about the widget, please let me know :)

    enhancement 
    opened by fgksgf 3
  • Support for copy & paste

    Support for copy & paste

    The tcell library seems to have added support for pasting into the terminal. We should investigate of copy&paste can now be supported and add it to termdash.

    https://github.com/gdamore/tcell/blob/master/CHANGESv2.adoc

    Related to #254 and #220.

    enhancement 
    opened by mum4k 2
  • Include support for key modifiers to match the one in `tcell`

    Include support for key modifiers to match the one in `tcell`

    The tcell library added better support for key modifiers:

    https://github.com/gdamore/tcell/blob/master/CHANGESv2.adoc https://github.com/gdamore/tcell/blob/7d87d8188c8d3a236c778107d4925a9b2465a5f6/key.go#L73-L79

    We should expand our terminalapi package to include these. Related to #254.

    enhancement 
    opened by mum4k 0
Releases(v0.16.0)
  • v0.16.0(Apr 3, 2021)

    Added

    • The Text widget has a new option MaxTextCells which can be used to limit the maximum number of cells the widget keeps in memory.

    Changed

    • Bump github.com/mattn/go-runewidth from 0.0.10 to 0.0.12.
    Source code(tar.gz)
    Source code(zip)
  • v0.15.0(Mar 6, 2021)

    Changed

    • Bump github.com/gdamore/tcell/v2 from 2.0.0 to 2.2.0.
    • Bump github.com/mattn/go-runewidth from 0.0.9 to 0.0.10.
    • Allowing CI to modify go.mod and go.sum when necessary.
    • Executed go mod tidy.

    Added

    • TitleColor and TitleFocusedColor options for border title which enables the setting of separate colors for border and title on a container.
    Source code(tar.gz)
    Source code(zip)
  • v0.14.0(Dec 30, 2020)

    Breaking API changes

    • The widgetapi.Widget.Keyboard and widgetapi.Widget.Mouse methods now accepts a second argument which provides widgets with additional metadata. All widgets implemented outside of the termdash repository will need to be updated similarly to the Barchart example below. Change the original method signatures:

      func (*BarChart) Keyboard(k *terminalapi.Keyboard) error { ... }
      
      func (*BarChart) Mouse(m *terminalapi.Mouse) error { ... }
      
      

      By adding the new *widgetapi.EventMeta argument as follows:

      func (*BarChart) Keyboard(k *terminalapi.Keyboard, meta *widgetapi.EventMeta) error { ... }
      
      func (*BarChart) Mouse(m *terminalapi.Mouse, meta *widgetapi.EventMeta) error { ... }
      

    Fixed

    • termdash no longer crashes when tcell is used and the terminal window downsizes while content is being drawn.

    Added

    Text input form functionality with keyboard navigation

    • added a new formdemo that demonstrates a text input form with keyboard navigation.

    Infrastructure changes

    • container now allows users to configure keyboard keys that move focus to the next or the previous container.
    • containers can request to be skipped when focus is moved using keyboard keys.
    • containers can register into separate focus groups and specific keyboard keys can be configured to move the focus within each focus group.
    • widgets can now request keyboard events exclusively when focused.
    • users can now set a container as focused using the new container.Focused option.

    Updates to the button widget

    • the button widget allows users to specify multiple trigger keys.
    • the button widget now supports different keys for the global and focused scope.
    • the button widget can now be drawn without the shadow or the press animation.
    • the button widget can now be drawn without horizontal padding around its text.
    • the button widget now allows specifying cell options for each cell of the displayed text. Separate cell options can be specified for each of button's main states (up, focused and up, down).
    • the button widget allows specifying separate fill color values for each of its main states (up, focused and up, down).
    • the button widget now has a method SetCallback that allows updating the callback function on an existing button instance.

    Updates to the textinput widget

    • the textinput widget can now be configured to request keyboard events exclusively when focused.
    • the textinput widget can now be initialized with a default text in the input box.
    Source code(tar.gz)
    Source code(zip)
  • v0.13.0(Nov 17, 2020)

    Added

    • the Text widget now allows user to specify custom scroll marker runes.

    Changed

    • terminal cells now support font modifier options (bold, italic, underline, strike through).
    • tcell dependency was upgraded to v2.0.0.
    • upgraded versions of all other dependencies.
    • aligned the definition of the first 16 colors with the definition used by Xterm and tcell. Defined two non-standard colors ColorMagenta and ColorCyan to make this change backward compatible for users that use termbox-go.
    • made tcell terminal implementation the default in examples, demos and documentation.

    Fixed

    • coveralls again triggers and reports on PRs.
    • addressed some lint issues.
    • improved test coverage in some modules.
    • changed the Blue color in demos to a more visible shade.
    • fixed a bug where segment display text in termdashdemo appeared to be jumping.
    Source code(tar.gz)
    Source code(zip)
  • v0.12.1(Jun 20, 2020)

    Fixed

    • the tcell unit test can now pass in headless mode (when TERM="") which happens under bazel.
    • switching coveralls integration to Github application.
    Source code(tar.gz)
    Source code(zip)
  • v0.12.0(Apr 10, 2020)

  • v0.11.0(Mar 7, 2020)

    Breaking API changes

    • Termdash now requires at least Go version 1.11.

    Added

    • New tcell based terminal implementation which implements the terminalapi.Terminal interface.
    • tcell implementation supports two initialization Options:
      • ColorMode the terminal color output mode (defaults to 256 color mode)
      • ClearStyle the foreground and background color style to use when clearing the screen (defaults to the global ColorDefault for both foreground and background)

    Fixed

    • Improved test coverage of the Gauge widget.
    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Jun 6, 2019)

    Added

    • Added time.Duration based ValueFormatter for the LineChart Y-axis labels.
    • Added round and suffix ValueFormatter for the LineChart Y-axis labels.
    • Added decimal and suffix ValueFormatter for the LineChart Y-axis labels.
    • Added a container.SplitOption that allows fixed size container splits.
    • Added grid functions that allow fixed size rows and columns.

    Changed

    • The LineChart can format the labels on the Y-axis with a ValueFormatter.
    • The SegmentDisplay can now display dots and colons ('.' and ':').
    • The Donut widget now guarantees spacing between the donut and its label.
    • The continuous build on Travis CI now builds with cgo explicitly disabled to ensure both Termdash and its dependencies use pure Go.

    Fixed

    • Lint issues found on the Go report card.
    • An internal library belonging to the Text widget was incorrectly passing math.MaxUint32 as an int argument.
    Source code(tar.gz)
    Source code(zip)
Owner
Jakub Sobon
Jakub Sobon
Terminal based dashboard.

Termdash is a cross-platform customizable terminal based dashboard. The feature set is inspired by the gizak/termui project, which in turn was inspire

Jakub Sobon 1.8k Sep 11, 2021
Terminal string styling for go done right, with full and painless Windows 10 support.

GChalk GChalk is a library heavily inspired by chalk, the popular Node.js terminal color library, and using go ports of supports-color and ansi-styles

Jason Walton 280 Sep 12, 2021
Golang terminal dashboard

termui termui is a cross-platform and fully-customizable terminal dashboard and widget library built on top of termbox-go. It is inspired by blessed-c

Zack Guo 11.2k Sep 15, 2021
Simple tables in terminal with Go

Simple tables in terminal with Go This package allows to generate and display ascii tables in the terminal, f.e.: +----+------------------+-----------

Alexey Popov 328 Sep 10, 2021
Building powerful interactive prompts in Go, inspired by python-prompt-toolkit.

go-prompt A library for building powerful interactive prompts inspired by python-prompt-toolkit, making it easier to build cross-platform command line

Masashi SHIBATA 4.1k Sep 12, 2021
A go library to render progress bars in terminal applications

uiprogress A Go library to render progress bars in terminal applications. It provides a set of flexible features with a customizable API. Progress bar

Greg Osuri 1.8k Sep 3, 2021
Minimalist Go package aimed at creating Console User Interfaces.

GOCUI - Go Console User Interface Minimalist Go package aimed at creating Console User Interfaces. Features Minimalist API. Views (the "windows" in th

Roi Martin 7.4k Sep 14, 2021
A tiny library for super simple Golang tables

Tabby A tiny library for super simple Golang tables Get Tabby go get github.com/cheynewallace/tabby Import Tabby import "github.com/cheynewallace/tabb

Cheyne Wallace 295 Aug 13, 2021
go-isatty - isatty for golang.

go-isatty isatty for golang Usage package main import ( "fmt" "github.com/mattn/go-isatty" "os" ) func main() { if isatty.IsTerminal(os.Stdout.F

mattn 547 Sep 7, 2021
multi progress bar for Go cli applications

Multi Progress Bar mpb is a Go lib for rendering progress bars in terminal applications. Features Multiple Bars: Multiple progress bars are supported

Vladimir Bauer 1.4k Sep 8, 2021
Intuitive package for prettifying terminal/console output. http://godoc.org/github.com/ttacon/chalk

chalk Chalk is a go package for styling console/terminal output. Check out godoc for some example usage: http://godoc.org/github.com/ttacon/chalk The

Trey Tacon 380 Sep 10, 2021
An ANSI colour terminal package for Go

colourize An ANSI colour terminal package for Go. Supports all ANSI colours and emphasis. Not compatible with Windows systems. Installation go get gi

Trey Bastian 24 Mar 30, 2021
Console Text Colors - The non-invasive cross-platform terminal color library does not need to modify the Print method

ctc - Console Text Colors The non-invasive cross-platform terminal color library does not need to modify the Print method Virtual unix-like environmen

null 34 Sep 8, 2021
uilive is a go library for updating terminal output in realtime

uilive uilive is a go library for updating terminal output in realtime. It provides a buffered io.Writer that is flushed at a timed interval. uilive p

Greg Osuri 1.3k Sep 6, 2021
A go library to improve readability in terminal apps using tabular data

uitable uitable is a go library for representing data as tables for terminal applications. It provides primitives for sizing and wrapping columns to i

Greg Osuri 619 Sep 5, 2021
Go package to make lightweight ASCII line graph ╭┈╯ in command line apps with no other dependencies.

asciigraph Go package to make lightweight ASCII line graphs ╭┈╯. Installation go get github.com/guptarohit/asciigraph Usage Basic graph package main

Rohit Gupta 1.7k Sep 10, 2021
Golang ultimate ANSI-colors that supports Printf/Sprintf methods

Aurora Ultimate ANSI colors for Golang. The package supports Printf/Sprintf etc. TOC Installation Usage Simple Printf aurora.Sprintf Enable/Disable co

Konstantin Ivanov 1.1k Sep 10, 2021
A really basic thread-safe progress bar for Golang applications

progressbar A very simple thread-safe progress bar which should work on every OS without problems. I needed a progressbar for croc and everything I tr

Zack 2.1k Sep 9, 2021