Programming language: Scala
License: MIT License
Tags: Tools     Onions     Scurses     Terminal     UI    

Scurses alternatives and similar packages

Based on the "Tools" category.
Alternatively, view Scurses alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Scurses or a related project?

Add another 'Tools' Package


Scurses / Onions

Scurses and Onions are frameworks for drawing nice things in your terminal using simple, elegant Scala. Scurses provides a low-level drawing and event handling API while Onions provides a high-level UI API with useful widgets.


<!-- MarkdownTOC autolink="true" -->

<!-- /MarkdownTOC -->


High-level Scurses framework for easy terminal UI


libraryDependencies += "net.team2xh" %% "onions" % "<version in the badge>"

Example application

To see an example application showcasing all the widgets, run:

$ sbt onions/run

Make sure that your terminal is sized big enough, scrolling is not supported yet.

Goal is to provide an API full of widgets to make it really easy for users to quickly set up a dashboard to monitor their services in the terminal (graphs, histograms, logs, etc.). It works great through SSH as well!

How to use

Scurses { implicit screen =>
  val frame = Frame("Example UI")
  // Three columns
  val colA = frame.panel
  val colB = colA.splitRight
  val colC = colB.splitRight
  // Split second column in three rows
  val colB2 = colB.splitDown
  val colB3 = colB2.splitDown
  // Split third row of second column into two columns
  val colB3B = colB3.splitRight
  val colB3B2 = colB3B.splitDown
  // Split last column into two rows
  val colC2 = colC.splitDown

  // Add a label in the first column
  Label(colA, Lorem.Ipsum, TextWrap.JUSTIFY)

  val r = Random
  val points = (1 to 50) map (i => {
    val x = r.nextInt(40)
    val y = 50 - x + (r.nextGaussian() * 5).toInt - 2
    (x, y max 0)

  // Add a scatter plot in the first row of third column
  ScatterPlot(colC, points, "Time", "Sales")

  // Show a heat map of the same values in the second row
  HeatMap(colC2, points, "Time", "Sales")

  // Display and launch event loop

For examples regarding all widgets, see ExampleUI.scala

Keyboard controls

Keys Action
↑ / ↓ Focus next widget in direction / Focus next panel in direction
← / → Focus next panel in direction
⇥ / ⇧+⇥ Focus next / previous panel
CTRL+SPACE Switch to next tab (if panel has multiple tabs)
SPACE / ↵ Activate label action, check radio or checkbox
< / > Move slider left / right (also with SPACE / ↵)


Low-level terminal drawing API for Scala


libraryDependencies += "net.team2xh" %% "scurses" % "<version in the badge>"

Example applications

  • Hello World:
$ sbt "scurses/runMain net.team2xh.scurses.examples.HelloWorld"
  • Game of life:
$ sbt scurses/run
  • Stress test:
$ sbt "scurses/runMain net.team2xh.scurses.examples.StressTest"

How to use

import net.team2xh.scurses.Scurses

Scurses { screen =>
  // The screen will only be in Scurses mode inside this block
  // Scurses will reset the terminal buffer and everything when outside

  // Get the current terminal size
  val (w, h) = screen.size

  val greeting = "Hello, world!"
  val prompt = "Press a key to continue..."
  // Put some strings in the middle of the screen
  screen.put(w/2 - greeting.length/2, h/2, greeting)
  screen.put(w/2 - prompt.length/2, h/2 + 1, prompt, Colors.BRIGHT_BLACK)
  // Flush the buffer
  // Wait for an input without storing it