Writing Programs with Ncurses

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • SonarQube - Static code analysis for 29 languages.
  • OPS - Build and Run Open Source Unikernels
  • Scout APM - Less time debugging, more time building
  • notcurses

    blingful character graphics/TUI library. definitely not curses.

  • rich

    Rich is a Python library for rich text and beautiful formatting in the terminal.

  • SonarQube

    Static code analysis for 29 languages.. Your projects are multi-language. So is SonarQube analysis. Find Bugs, Vulnerabilities, Security Hotspots, and Code Smells so you can release quality code every time. Get started analyzing your projects today for free.

  • imtui

    ImTui: Immediate Mode Text-based User Interface C++ Library

    For C++, there is also ImTui that I wrote sometime ago:

    https://github.com/ggerganov/imtui

    I made a few sample apps with it, such as HN client and a WTF configuration tool. They are both linked in the repo if you are interested.

    I still want to make some other cool terminal app with it, but haven't found a nice idea yet.

  • brick

    A declarative Unix terminal UI programming library written in Haskell

    There is brick[1][2] for Haskell. Other languages may have something similar.

    [1] https://hackage.haskell.org/package/brick

    [2] https://github.com/jtdaugherty/brick/blob/master/docs/samtay...

  • growlight

    notcurses block device manager / system installation tool

  • typer

    Typer, build great CLIs. Easy to code. Based on Python type hints.

    It feels like we live in a pretty good time for writing TUIs, CLIs and also small self-contained tools (thanks to languages like Go, which have a lot of libraries, are easy to use, but also compile to statically linked executables).

    What stuck with me was using the Typer library for a Python tool that i wrote: https://typer.tiangolo.com/

    It made regular shell scripts into a fully fledged CLI with nested commands thanks to just a few decorators that were sprinkled in the source files, as well as the occasional slight signature alteration.

    Developing a GUI feels awfully complicated in comparison and i'm amazed that there don't seem to be all that many (if any) frameworks for creating GUIs in a similar way - by annotating method calls as actions that correspond to the actual GUI elements and letting some smart parsing logic handle the rest for you.

    I feel like perhaps the world would be a slightly better place if desktop software could also be distributed as libraries of callable code, where you could automate button presses programmatically and there would be a 1:1 link between what you can do in code and manually.

  • meli

    🐝 experimental terminal mail client, mirror of https://git.meli.delivery/meli/meli.git https://crates.io/crates/meli (by meli)

    I don't know if it counts as rich, but I rolled my own terminal UI in my email client meli [0]. There's a web demo here: https://meli.delivery/wasm2.html that is the client compiled to webassembly and the ANSI escape codes translated to equivalent SVG drawing so that you can try it on your browser. [0] https://github.com/meli/meli/

  • OPS

    OPS - Build and Run Open Source Unikernels. Quickly and easily build and deploy open source unikernels in tens of seconds. Deploy in any language to any cloud.

  • tig

    Text-mode interface for git

  • ncspot

    Cross-platform ncurses Spotify client written in Rust, inspired by ncmpc and the likes.

    My personal favorite is musikcube: https://musikcube.com/

    The mouse support is excellent, assuming your terminal emulator supports the features it needs. Pretty much everything can be clicked and right-clicked.

    I listen to most of my music through musikcube and ncspot https://github.com/hrkfdn/ncspot these days.

  • musikcube

    a cross-platform, terminal-based music player, audio engine, metadata indexer, and server in c++

    My personal favorite is musikcube: https://musikcube.com/

    The mouse support is excellent, assuming your terminal emulator supports the features it needs. Pretty much everything can be clicked and right-clicked.

    I listen to most of my music through musikcube and ncspot https://github.com/hrkfdn/ncspot these days.

  • fari

    Console utility for fast Safari tab browsing

    I had always wanted to write something in this and got my chance last year when I finally decided to write a utility for Safari tab management:

    https://github.com/incanus/fari

    Since then, however, I’ve switched to the Min browser. But it was super empowering to make a console-based interface and I’m looking forward to trying it again soon.

  • awesome-tuis

    List of projects that provide terminal user interfaces

  • yad

    Yet Another Dialog

  • Ink

    🌈 React for interactive command-line apps

    The most modern terminal GUI (as for 2021) would have to use React: https://github.com/vadimdemedes/ink

  • termbox

    Library for writing text-based user interfaces (by termbox)

    I just discovered this lovely little library:

    https://github.com/termbox/termbox/

  • sfm

    simple file manager

  • imgui

    Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

    ImTui provides an ncurses interface for this. It uses the ncurses API to render the characters in the terminal and also to grab input from the keyboard and the mouse.

    Technically, ncurses is an overkill for this application, since ImTui only uses only a very small subset of the ncurses functions. But this was the easiest way to make it work.

    ImTui can be extended with more interfaces. For example, I made a second one which I call "Emscripten" interface. It's purpose is to provide an API to easily export the framebuffer to the JS layer and to easily grab input back from the JS layer. This way, I can have a single application code that builds and runs both in the terminal and on the web.

    [0] https://github.com/ocornut/imgui

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts