The personal information dashboard for your terminal



All Contributors Travis Status Go Report Card Twitter

WTF (aka 'wtfutil') is the personal information dashboard for your terminal, providing at-a-glance access to your very important but infrequently-needed stats and data.

Used by thousands of developers and tech people around the world, WTF is free and open-source. To support the continued use and development of WTF, please consider sponsoring WTF via GitHub Sponsors.

Are you a contributor or sponsor?

Awesome! See here for how you can change the exit message, the message WTF shows when quitting, to something special just for you.


Installing via Homebrew

The simplest way from Homebrew:

brew install wtfutil


That version can sometimes lag a bit, as recipe updates take time to get accepted into homebrew-core. If you always want the bleeding edge of releases, you can tap it:

brew tap wtfutil/wtfutil
brew install wtfutil


Installing via MacPorts

You can also install via MacPorts:

sudo port selfupdate
sudo port install wtfutil


Installing a Binary

Download the latest binary from GitHub.

WTF is a stand-alone binary. Once downloaded, copy it to a location you can run executables from (ie: /usr/local/bin/), and set the permissions accordingly:

chmod a+x /usr/local/bin/wtfutil

and you should be good to go.

Installing from Source

If you want to run the build command from within your $GOPATH:

# Set the Go proxy
export GOPROXY=",direct"

# Disable the Go checksum database
export GOSUMDB=off

# Enable Go modules
export GO111MODULE=on

go get -u
cd $GOPATH/src/
make install
make run

If you want to run the build command from a folder that is not in your $GOPATH:

# Set the Go proxy
export GOPROXY=",direct"

go get -u
cd $GOPATH/src/
make install
make run

Installing from Source using Docker

All building is done inside a docker container. You can then copy the binary to your local machine.

curl -o
docker build -f -t wtfutil --build-arg=version=master .
docker create --name wtf_build wtfutil
docker cp wtf_build:/usr/local/bin/wtfutil ~/.local/bin
docker rm wtf_build

Note: WTF is only compatible with Go versions 1.16.0 or later (due to the use of Go modules and newer standard library functions). If you would like to use gccgo to compile, you must use gccgo-9 or later which introduces support for Go modules.

Installing via Arch User Repository

Arch Linux users can utilise the wtfutil package to build it from source, or wtfutil-bin to install pre-built binaries.

Running via Docker

You can run wtf inside a docker container:

# download or create the Dockerfile
curl -o Dockerfile

# build the docker container
docker build -t wtfutil .

# or for a particular tag or branch
docker build --build-arg=version=v0.25.0 -t wtfutil .

# run the container
docker run -it wtfutil

# run container with a local config file
docker run -it -v path/to/config.yml:/config/config.yml wtfutil --config=/config/config.yml



If you’re a member of the Gophers Slack community ( there’s a WTFUtil channel you should join for all your WTF questions, development conversations, etc.

Find #wtfutil on and join us.


Also, follow on Twitter for news and latest updates.


See for the definitive documentation. Here's some short-cuts:


Modules are the chunks of functionality that make WTF useful. Modules are added and configured by including their configuration values in your config.yml file. The documentation for each module describes how to configure them.

Some interesting modules you might consider adding to get you started:

Getting Bugs Fixed or Features Added

WTF is open-source software, informally maintained by a small collection of volunteers who come and go at their leisure. There are absolutely no guarantees that, even if an issue is opened for them, bugs will be fixed or features added.

If there is a bug that you really need to have fixed or a feature you really want to have implemented, you can greatly increase your chances of that happening by creating a bounty on BountySource to provide an incentive for someone to tackle it.

Contributing to the Source Code

First, kindly read Talk, then code by Dave Cheney. It's great advice and will often save a lot of time and effort.

Next, kindly read for details on our code of conduct, and the process for submitting pull requests.

Then create your branch, write your code, submit your PR, and join the rest of the awesome people who've contributed their time and effort towards WTF. Without their contributors, WTF wouldn't be possible.

Don't worry if you've never written Go before, or never contributed to an open source project before, or that your code won't be good enough. For a surprising number of people WTF has been their first Go project, or first open source contribution. If you're here, and you've read this far, you're the right stuff.

Contributing to the Documentation

Documentation now lives in its own repository here:

Please make all additions and updates to documentation in that repository.

Adding Dependencies

Dependency management in WTF is handled by Go modules. Please check out that page for more details on how Go modules work.


Chris Cummer

Anand Sudhir Prayaga

Hossein Mehrabi



Bill Keenan

June S



lucus lee

Mike Lloyd

Sergio Rubio

Farhad Farahi

Lasantha Kularatne

Mark Old


David Barda

Geoff Lee

George Opritescu


Michael Cordell

Patrick José Pereira

sherod taylor

Andrew Scott

Lassi Piironen



Leon Stigter

Amr Tamimi

Jagdeep Singh

Lineu Felipe


Brendan O'Leary



Rohan Verma

Tim Fitzgerald

Federico Ruggi

Craig Woodward



Kenny Wu

Renán Romero

Bastian Groß


Dan Rabinowitz

David Missmann

Mathias Weber


Harald Nordgren

Matei Alexandru Gardus

Sean Smith

Halil Kaskavalci

Johan Denoyer

Jelle Vink

Devin Collins

Danne Stayskal

Max Beizer



Andrew Scibek


Michele Gerarduzzi

Jack Morris


Levi Baber

Graham Anderson

Romain Bossart

Kirill Motkov

Brian Choromanski

Sean DuBois

Gary Kim


Dmytro Prokhorenkov



Andrew Suderman

Bob 'Wombat' Hogg

Christopher Hall

Heitor Neiva

Herby Gillot

James Canning


Mikkel Jeppesen Juhl


Nate Yourchuck

Casey Primozic

Alvaro [Andor]

Joel Valentine

Viktor Braun


Narendra L


Tim Scheuermann

Indradhanush Gupta

Victor Hugo Avelar Ossorio

Steven Whitehead

Lawrence Craft

Avi Press

Sarah Kraßnigg

Jason Schweier


Vighnesh SK

Alex Fornuto


Johan Denoyer

Albert Salim

Ricardo N Feliciano

Omer Davutoglu


Dan Bent


Matjaž Depolli

Toon Schoenmakers



Nikolay Mateev

Charlie Wang


Bjoern Weidlich

Scott Hansen

David Bond

Yvonnick Esnault

Vinícius Letério


Jon Hadfield

Tejas Shah

Frederik Mogensen

Risto Saarelma

Sam Roberts




Frederik Mogensen


Tim Hwang

Ying Fan Chong

Martin Johns

Jamie Tanna

Todd Trimble

Mitchell Hanberg

Miha Frangež

Sahil Dhiman

Pingzhou | 平舟

Yuval Goldberg

David Bouchare

Fredrik Steen


Pierre Gaxatte

Christian Frichot

Lukas Kämmerling


The inspiration for WTF came from Monica Dinculescu's tiny-care-terminal.

WTF is built atop tcell and tview, fantastic projects both. WTF is built, packaged, and deployed via GoReleaser.

  • Security: open call for thoughts on securing WTF's config file

    Security: open call for thoughts on securing WTF's config file

    WTF's config.yml file is a plain text file stored in the user's home directory. Given the nature of many of the modules in WTF, that file could hold account information, passwords, URIs, and API keys for the user's critical systems.

    This issue is a place to discuss the security of that file.

    1. Does it need to be secured? Should we just trust the machine instead?
    2. If it should, how so? What's least-friction for the user?
    🔍 investigating wontfix 
    opened by senorprogrammer 35
  • Error on Build?

    Error on Build?

    Bug Report


    Ran Go Get and ran make and ran into error

    What is the current behaviour?

    When running make, errors out with  ╍╍  g s g s    wtf  make install │ which wtf | xargs rm || true go install -ldflags="-X main.version=v0.0.4_`git rev-parse --abbrev-ref HEAD` -X" which wtf make: *** [install] Error 1

    Go version is go version go1.10.2 darwin/amd64

    🔍 investigating 
    opened by askl56 34
  • Windows Support

    Windows Support

    Great project! I'm a Windows guy, so naturally I tried it on Windows in PowerShell. Works for me with go build -v -o wtf.exe or go install -v since I didn't have make installed.

    There are some areas that do need fixing, but I wanted to start a top level issue with some of what I see out of the box with a vanilla config:

    • [] Bad Character Encoding in the box headers.
    • [] Linux-specific tools used.
    • [] Makefile only works on Linux.


    You can see some of the issues in the screenshot. If you can point me to where that code exists, I might be able to help make it work as intended on Windows.

    💪 improvement 💨 windows wontfix 
    opened by mxplusb 32
  • Introduce wtf installer

    Introduce wtf installer


    Since #130, I decided to create a quick installer. The installer uses the dialog utils but I will create a option that you don't have to use these. You can try it, working fine on arch, debian and ubuntu. I don't have an option to try it on mac OS but you can do it.

    Quick fix of the Makefile would be to add

    ln -s $GOPATH/bin/wtf /bin/wtf

    But the installer is working fine of course.



    opened by deltaxflux 24
  • Use docker-credential-helper to manage secrets

    Use docker-credential-helper to manage secrets

    Store service credentials securely in the stores supported by docker:


    Introduces a top-level config property, "secretStore" and additional command line arguments to manage the stored secrets.

    The value of secretStore is used to find a helper command, docker-credential-<secretStore>.

    The docker project currently provides 4 store helpers:

    • "osxkeychain" (OS X only)
    • "secretservice" (Linux only)
    • "wincred" (Windows only)
    • "pass" (any OS supporting pass, which uses gpg2)

    Docker-for-desktop provides the credential helpers above, as well as docker-credential-desktop.

    Installation instructions for the helpers:


    Users could provide additional helpers, the only requirement is that the helper implements the credential store protocol:


    The credential protocol is open, and new credential stores can be implemented by any CLI satisfying the protocol:


    The modifications to existing modules is not tested due to lack of API keys, but demonstrates the unobtrusive changes required to use the secret store.

    This is one approach to moving secrets out of config.yml, see

    I'm curious to see if this scratches people's itch. The setup is pretty minimal, though the docker credential helpers need to be available, which they might be for any users of docker-for-desktop.

    It uses existing secure storage mechanisms rather than inventing any. The secrets are stored in either the OS keyring, which should be pretty secure, or in (which should work on any system with gpg2).

    It requires pretty minimal changes to modules to support it (I included a bunch of - untested - module hacks in this PR as examples). Generally, you'd add wtf.secretStore: "" (it has a reasonable store default based on GOOS), and then remove your apiKey, and possibly username and API URL , from the module, and then save them with wtfutil save-secret URL_or_NAME SECRET , and that's it.

    I also considered an approach where api keys and the like have a special string format, like, and that triggers the store lookup, but it seemed more opaque, and more onerous to the user, as well as not dealing so obviously well with usernames or API endpoints.

    There are some limitations: this is struck to the docker-credential-helper's view of the world, which is that there is a SERVICE (any string, its not forced to be a URL, but it is a unique key), and that maps to a SECRET for one, single, named USER. The user can be defaulted to "default" in modules that don't need or want to store that, and the service can be the module name, so this seems to cover most use-cases reasonably.

    The save-secret interface is a bit WIP ATM. It should really prompt for the secret (secrets should not be put in CLI arguments, they are visible briefly with ps). For the truly energetic, I assume an entire secret manager UI could be implemented (the helpers support listing existing credentials). The sub-command structure is pretty awful, too, for which I blame go-flags, I spent more time struggling with it than writing the actual code.

    I've tested only with enterprise github, its the only one of the modules I have an API key for, so YMMV.

    opened by sam-github 19
  • Any way to specify `config.yml` other `~/.config/wtf/config.yml` folder?

    Any way to specify `config.yml` other `~/.config/wtf/config.yml` folder?

    How can we help?

    I am trying to add wtf into homebrew-core (PR:, but I constantly run into the permission issue even though I try to specify the config file in this way (ignore the weird path):

    /usr/local/Cellar/wtfutil/0.17.1/bin/wtf --config=/private/tmp/wtfutil-test-20190720-64834-1j01eaq/config.yml

    Let me know what is the right way to do the --config=<path> reference.

    opened by chenrui333 18
  • Just got

    Just got "Error: character set not supported"

    I just got "Error: character set not supported",when i'm running wft.exe with default config.yml.

    $ wtf.exe Error: character set not supported

    won't fix 💨 windows 
    opened by Jaydonjin 18
  • Data races popping up and rendering breaks

    Data races popping up and rendering breaks

    What's the problem?

    Been running wtf dash for a few weeks now without issue. Today, after playing around with my config a bit, i noticed the dashboard just stops rendering properly. It will start up and render correctly for a short time ~10-15 seconds but then become gibberish. When I exit out, I see a message like:

    "Found 24 data race(s)"

    The number can vary from run to run, but typically around 20-30.

    How did you expect it to behave?

    Just like it has been. Start the dashboard and the rendering/drawing behaves like normal

    Operating system

    Mac OS

    Terminal program & version


    WTF version

    just pulled master today.

    🐛 bug 👍 confirmed 
    opened by michaelMinar 15
  • go get fails

    go get fails

    go get
    ../go/src/ duration.Round undefined (type time.Duration has no field or method Round)

    go version go1.8.3 linux/amd64

    🔍 investigating 
    opened by talonx 15
  • Keyboard controls no longer work

    Keyboard controls no longer work

    What's broken?

    The latest upgrade to tview v2 seems to have broken keyboard movement within modules. Arrow keys no longer work and the Esc key no longer gives up focus.

    🐛 bug critical 
    opened by senorprogrammer 14
  • Does not start - error: infocmp not found

    Does not start - error: infocmp not found

    What's broken?

    Trying to run wtfutil (version 0.20.0) errors out with:

    $ wtfutil
    ERROR exec: "infocmp": executable file not found in $PATH

    I am using termite as a terminal, TERM is set to termite.

    OS: NixOS

    opened by avdv 14
  • Configurable source title name for FeedReader

    Configurable source title name for FeedReader

    I've recently upgraded and noticed immediately that the FeedReader now also shows the source title. With multiple feeds, this is a nice feature. However, for a single feed, the source title feels redundant.

    Screenshot 2023-01-03 at 2 42 03 AM

    Currently, is there a way to hide the source title?

    What should it do?

    If there is no way to hide the source title, this ticket is a feature request to add a way to hide the source title. Perhaps a simple config hideSourceTitle: bool would do?

    I'm also interested in contributing once the approach is decided.


    opened by wijayaerick 0
  • Module Dynamic Refresh Interval Control

    Module Dynamic Refresh Interval Control

    What should it do?

    Module control of the widget refresh interval after startup.

    Currently the refresh interval for a widget is set at startup in app/scheduler.go. Modules can set their refresh interval in the config.yml entry for the module but once initialized and set in schedule.go the module can no longer alter the refresh interval.

    This issue came up in a discussion. One use case is a module with multiple modes, one that does not require frequent refresh and another that does require frequent refresh. Switching between these two modes, for example with a key press, it would be desirable to also modify the refresh interval accordingly. In the discussion @senorprogrammer suggested that a module could support:

    • module.PauseRefresh()
    • module.ResumeRefresh()
    • module.GetRefreshInterval()
    • module.SetRefreshInterval(interval)
    • module.RestoreRefreshInterval()

    This feature request issue is requesting support for these module level refresh interval control methods.

    💥 feature 
    opened by doctorfree 0
  • Add keyboard controls to lunarphase module

    Add keyboard controls to lunarphase module

    This pull request adds keyboard control for the lunarphase module to display the next day/week lunar phase, previous day/week lunar phase, enable/disable widget display, and open a site displaying more info on the currently selected day's lunar phase in a browser.

    Corresponding documentation will be submitted in a pull request to wtfdocs

    opened by doctorfree 4
  • uptimerobot module title not working

    uptimerobot module title not working

    Using Ubuntu 22.04 Jammy and precompiled binary wtf_0.42.0_linux_amd64,

    When setting the title configuration option in the config.yml file, the custom title is not displayed when running the program.

    wtfutil --module=uptimerobot shows that I can use an Optional title string.

    opened by nhasian 0
  • CI Feature: Implement pull request preview environments

    CI Feature: Implement pull request preview environments

    How can we help?

    I would like to support wtf by implementing Uffizzi preview environments. Disclaimer: I work on Uffizzi.

    Uffizzi is a Open Source full stack previews engine and our platform is available completely free for wtf (and all open source projects). This will provide maintainers with preview environments of every PR in the cloud, which enables faster iterations and reduces time to merge. You can see the open source repos which are currently using Uffizzi over here

    Uffizzi is purpose-built for the task of previewing PRs and it integrates with your workflow to deploy preview environments in the background without any manual steps for maintainers or contributors. We can go ahead and create an Initial PoC for you right away if you think there is value in this proposal.

    • [ ] Initial PoC
    opened by waveywaves 0
The personal information dashboard for your terminal
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 2.2k Jan 1, 2023
Contextual information about your git projects, right on the command-line

gitty gitty is a smart little CLI helper for git projects, that shows you all the relevant issues, pull requests and changes at a quick glance. It cur

Christian Muehlhaeuser 406 Jan 8, 2023
Command line tool to show the weather information of your city

go-weather when you type weather <city>, it will show you the weather of the city you input. Useful API comes from You can registe

常乐村喵蕉君 0 Nov 5, 2021
Pi-fetch - get a summary of your pi-hole stats from your terminal

pi-fetch get a summary of your pi-hole stats from your terminal _ ___ _ _ ___|_|___| _|___| |_ ___| |_ | . | |___| _| -_| _

wise 0 Jan 9, 2022
A personal knowledge management and sharing system for VSCode

Foam ?? This is an early stage project under rapid development. For updates join the Foam community Discord! ?? Foam is a personal knowledge managemen

Foam 13.3k Jan 9, 2023
Libraries and CLIs for my personal all-in-one productivity system including components like bookmarks, notes, todos, projects, etc.

bntp.go Libraries and CLIs for my personal all-in-one productivity system including components like bookmarks, notes, todos, projects, etc. Neovim int

Jonas Mühlmann 13 Sep 13, 2022
Grit is an experimental personal task manager that represents tasks as nodes of a multitree

Grit is an experimental personal task manager that represents tasks as nodes of a multitree, a class of directed acyclic graphs. The structure en

Tomasz Klimczak 1.6k Jan 2, 2023
A personal collection of handy CLI tools

Toolkit A personal collection of handy CLI tools Installation 1.) Download and extract the ZIP package for the the latest release 2.) Copy the appropr

Luke Johnson 0 Nov 8, 2021
Creating a simple CLI tool in the Go Programming Language for personal learning and fun

Creating a simple CLI tool in the Go Programming Language for personal learning and fun Open to feedback :) Build docker dev environment docker build

Mohamed Abukar 4 Dec 12, 2021
Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal.

Stonks is a terminal based stock visualizer and tracker. Installation Requirements: golang >= 1.13 Manual Clone the repo Run make && make install Pack

Eric Moynihan 518 Dec 16, 2022
Are you programming and suddenly your stomach is rumbling? No problem, order your Ifood without leaving your favorite text editor ❤️

vim-ifood Você ta programando e de repente bateu aquela fome? Sem problemas, peça seu Ifood sem sair do seu editor de texto favorito ❤️ Are you progra

Felipe Volpone 4 Jun 2, 2022
A zoom meeting scanner made in go and it will show the meeting information

zoom-scanner A zoom meeting scanner made in go and it will show the meeting information Installation: git clone

Krisna Pranav 7 Aug 31, 2022
🖼️ A command-line system information tool written in bash 3.2+

A command-line system information tool written in bash 3.2+ Neofetch is a command-line system information tool written in bash 3.2+. Neofetch displays

dylan 16.9k Dec 30, 2022
Gofetch is a pretty command-line "Go and System information" tool written in Go

GoFetch Show off your Go information with this cool command-line tool! Report Bug || Request Feature Table of Contents About the Project Built With Ge

null 77 Nov 1, 2022
Command line tool for searching Pokémon information

Pokesearch Command line tool for searching Pokemon information. Work in progress To-do Usage details Finish Research release details Command

Adory Vo 0 Jan 27, 2022
Nebula Diagnosis CLI Tool is an information diagnosis cli tool for the nebula service and the node to which the service belongs.

Nebula Diagnosis CLI Tool is an information diagnosis cli tool for the nebula service and the node to which the service belongs.

Katz 1 Jan 12, 2022
gomerge is a tool to quickly bulk merge several pull requests from your terminal.

Gomerge is a tool to quickly enable you to bulk merge Github pull requests from your terminal. The intention of this tool is to simplfy, and eventually automate the merging of github pull requests. This tool should be able to run on most systems.

Cian Gallagher 41 Dec 28, 2022
YouTube client on your terminal

MeowTube YouTube client on your terminal Table of Contents About Getting Started Usage Contributing About MeowTube is a CLI (Command Line Interface) t

Abdul Fattah Ikhsan 27 Jul 29, 2022
🎄 A Christmas tree right from your terminal!

ctree ?? A Christmas tree right from your terminal! ?? Demo ⌛ No Refresh Don't want the tree to refresh every 2 seconds? Easy! Just add the --no-refre

Matthew Gleich 39 Dec 20, 2022