Open-source project
powerline/powerline avatar
powerline/powerline

Powerline for vim, tmux and shells: what the Python statusline plugin actually does

Powerline is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, tmux, IPython, Awesome and Qtile.

14,821 stars995 forksPythonNOASSERTION

At a glance

What is it?
Powerline is a Python statusline plugin for vim that also renders prompts and statuslines for zsh, bash, fish, tmux, IPython, Awesome, i3 and Qtile. Its configuration is JSON, and its README points anyone who dislikes Python at vim-airline instead.
Who is it for?
Adopt Powerline if you want one Python codebase rendering statuslines in vim, tmux and several shells, and you are willing to maintain JSON config under .config/powerline/. Do not adopt it if you want a vim-only statusline with no Python dependency, since the README itself points that audience to vim-airline.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Activity is slowing. The repository last received commits 6 months ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 28, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The problem Powerline solves, and who it is for

Most editors and shells ship a statusline that tells you a filename and not much else. Powerline replaces those lines with segmented, colour-coded bars: vim's statusline changes highlighting with the current mode, segments truncate automatically in small windows, and the same rendering engine feeds tmux, zsh, bash, fish, IPython and several window managers. The README frames the rewrite as a deliberate move away from vimscript, which is what made one codebase able to serve all of those targets instead of just vim.

The audience is therefore people who already live in a terminal and want consistent status information across the tools they use, not people who want to tweak one line of .vimrc. The README is explicit that the project is not for everyone: it answers the objection "I hate Python" by recommending the vim-airline project as the most lightweight and feature-rich alternative. That is an unusual thing for a README to say, and it is the clearest statement of scope in the whole document.

How the renderer, segments and daemon fit together

The architecture is a Python renderer driven by JSON. Configuration lives under .config/powerline/, and the README splits it cleanly: files under themes decide which segments appear, files under colorschemes decide which colours from colors.json are used to draw a segment. Local configuration only overrides the global configuration rather than replacing it, so an unset key falls back to the shipped default. That override model is why the README tells you to start by copying powerline_root/powerline/config_files/ into .config/powerline/ rather than writing files from scratch.

Where powerline_root points depends on how you installed it. The README gives three answers: /usr/lib/python3.6/site-packages/ or similar for AUR and pip installs, /usr/share/powerline/ for apt-get, and the repository's own config_files directory when you work from a checkout. Getting this path wrong is the most likely reason a fresh install appears to do nothing.

The daemon is the other half of the design. The README states that the daemon ensures only one Python instance is launched for prompts and statuslines, which is the performance argument for a Python-based statusline in the first place: starting an interpreter on every prompt would be slow, so Powerline keeps one around. The repository also contains a client/ directory with powerline.c, powerline.sh and powerline.py, and setup.py compiles the C client into scripts/powerline, falling back to the shell script (which needs socat, sed and sh) or the Python script when compilation fails.

Installing Powerline and configuring your first statusline

The README does not give a single install command. It describes where powerline_root lands for pip/AUR and apt-get installs, and the setup.py in the repository declares the distribution name powerline-status. The reliable first step is therefore to install through your package manager or pip and then locate the shipped config_files directory, because every later step depends on copying from it.

The README recommends starting by copying the default configuration located at powerline_root/powerline/config_files/ to .config/powerline/, and its example tree shows the resulting layout with colors.json, config.json, and the colorschemes and themes directories.

bash
cp -r powerline_root/powerline/config_files/ .config/powerline/

After the copy you should see colors.json, config.json, and the colorschemes and themes directories inside .config/powerline/. If the copy produced nothing, powerline_root is wrong for your install method; check whether you installed via pip or apt-get and use the path the README lists for that case.

The README's example tree shows the two files you actually edit for a window manager statusline, colorschemes/wm/default.json and themes/wm/default.json. The same pattern applies to other renderers: find the subdirectory named after the application, and edit the default.json inside it. Because local config only overrides global config, you can leave most keys out. The README does not print a sample segment file, and it points to the segment reference in the online documentation for the available segments and their configuration.

Finally, the README directs you to the powerline-fonts repository for pre-patched versions of popular open source coding fonts. The screenshots in the README use Pragmata Pro, and the segmented arrows in those images are what the patched fonts provide.

Where Powerline gets in the way

The Python 3.6 requirement is a hard floor, not a preference. The README states that Powerline does not support python2 anymore and that it will stop working with python2 in the near future. If you are on a distribution still pinned to python2, this project is not an option until that changes.

The second constraint is the font. Segmented statuslines need glyphs that stock monospace fonts do not carry, which is why a separate powerline-fonts repository exists. Setting up Powerline on a machine where you cannot install fonts, or over a terminal whose font you do not control, produces a statusline full of replacement boxes rather than the output in the screenshots.

The third is configuration sprawl. Because every supported application reads from the same .config/powerline/ tree but different subdirectories, a change meant for tmux can sit next to one meant for vim with nothing in the file itself announcing which renderer will read it. The README's directory listing is the map; there is no single config file to reason about.

And if all you want is a nicer vim statusline, Powerline is the wrong tool by its own admission. The README's answer to "this is just too much hassle for me" is to look at derivatives, naming vim-airline as the most lightweight and feature-rich alternative.

vim-airline versus Powerline: one editor or many surfaces

The README names vim-airline as the alternative, and the difference is architectural rather than cosmetic. vim-airline is a vim plugin: it lives in vim, it is configured for vim, and it does not attempt to draw a tmux bar or a shell prompt. Powerline is a Python rendering engine with adapters, which is why the same install can serve a vim statusline, a tmux statusline and prompts in bash, zsh, fish and IPython, plus statuslines in Awesome, i3 and Qtile.

That scope is the trade-off. If you only use vim, vim-airline gives you a statusline without a Python runtime, without a daemon, and without a shared JSON config tree. If you want the same visual language across tmux and your shell prompt, Powerline is the one that spans those surfaces, and the daemon is what keeps the Python cost from being paid on every prompt. Choosing between them is really choosing how many applications you want the statusline to cover.

Maintenance, licensing and what the repository shows

The last push to the develop branch was on 2026-03-11, and the most recent release listed is 2.8.4 from 2024-08-29, following 2.8.3 in 2022 and 2.8.2 in 2021. The repository is not archived. The README still labels the version as beta, which is worth noting for anyone deciding how much to depend on the configuration format staying put across upgrades.

Upgrade cost is concentrated in the config tree. Since local configuration only overrides the global defaults, a new release can change a shipped default and alter your statusline without you editing anything. The practical defence is to keep your overrides in .config/powerline/ minimal and to diff them against the new config_files after an upgrade, rather than copying the whole tree once and forgetting it.

The repository's LICENSE file is present at the top level, but the licence is recorded here as NOASSERTION, meaning the identifier could not be confirmed from the available metadata. Read LICENSE directly before redistributing Powerline or bundling it into a product; this article cannot tell you what terms it sets.

What to check before you commit to Powerline

Confirm your Python version first. The README's support statement is 3.6 and newer, and the python2 path is described as ending. Then confirm the font situation on every machine where the statusline will render, including remote hosts you SSH into, because the font is a property of the terminal you look at, not of the machine running Powerline.

Next, locate powerline_root for your install method and copy config_files from there. If you skip the copy and edit the shipped files instead, an upgrade will overwrite your work. If you copy and then never look again, an upgrade can silently change behaviour through the defaults you did not override.

Finally, decide how many surfaces you actually want. The value of Powerline is that one configuration tree drives vim, tmux and your shell prompt; if you only intend to use it in vim, the README's own recommendation points elsewhere.

Editorial conclusion

Adopt Powerline if you want one Python codebase rendering statuslines in vim, tmux and several shells, and you are willing to maintain JSON config under .config/powerline/. Do not adopt it if you want a vim-only statusline with no Python dependency, since the README itself points that audience to vim-airline. Before installing, verify two things: that your Python is 3.6 or newer, because the README states Powerline no longer supports python2, and that you have a patched font, since the screenshots depend on one and powerline-fonts exists for that purpose.

Frequently asked questions

Which applications does Powerline support?

The README states that Powerline is a statusline plugin for vim and also provides statuslines and prompts for zsh, bash, fish, tmux, IPython, Awesome, i3 and Qtile. It adds that writing renderers for other applications is simple.

Where does Powerline keep its configuration files?

Basic configuration is done via JSON files under .config/powerline/. The README recommends copying the defaults from powerline_root/powerline/config_files/ first, since local configuration only overrides the global configuration rather than replacing it.

Does Powerline still work with Python 2?

No. The README states that Powerline does not support python2 anymore and that it will stop working with python2 in the near future. It also says the code is tested to work in Python 3.6+.

Do I need a special font to use Powerline?

The README links to the powerline-fonts repository for pre-patched versions of popular open source coding fonts, and the screenshots use Pragmata Pro. Without a patched font the segmented glyphs in those screenshots will not render correctly.

Is there a lighter alternative to Powerline for vim?

The README points readers who find Powerline too much hassle to its derivatives, naming vim-airline as the most lightweight and feature-rich alternative currently available.

Official sources

  1. Issues
  2. powerline/powerline on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/powerline-powerline.svg)](https://hysenlabs.com/projects/powerline-powerline)